Link digital subdevice to the current VIN instance if the instance
support it and we are currently using media controller API.

Signed-off-by: Jacopo Mondi <[email protected]>
---
 drivers/media/platform/rcar-vin/rcar-core.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/rcar-vin/rcar-core.c 
b/drivers/media/platform/rcar-vin/rcar-core.c
index 67494ee..503c905 100644
--- a/drivers/media/platform/rcar-vin/rcar-core.c
+++ b/drivers/media/platform/rcar-vin/rcar-core.c
@@ -26,6 +26,12 @@
 
 #include "rcar-vin.h"
 
+static int rvin_group_add_link(struct rvin_dev *vin,
+                              struct media_entity *source,
+                              unsigned int source_idx,
+                              struct media_entity *sink,
+                              unsigned int sink_idx,
+                              u32 flags);
 /* 
-----------------------------------------------------------------------------
  * Media Controller link notification
  */
@@ -418,6 +424,7 @@ static int rvin_digital_notify_complete(struct 
v4l2_async_notifier *notifier)
 {
        struct rvin_dev *vin = notifier_to_vin(notifier);
        struct v4l2_subdev *sd = vin_to_source(vin);
+       struct media_entity *source, *sink;
        int ret;
 
        /* Verify subdevices mbus format */
@@ -464,7 +471,20 @@ static int rvin_digital_notify_complete(struct 
v4l2_async_notifier *notifier)
                v4l2_disable_ioctl(&vin->vdev, VIDIOC_ENUMSTD);
        }
 
-       return rvin_reset_format(vin);
+       ret = rvin_reset_format(vin);
+       if (ret)
+               return ret;
+
+       /* Link the digital subdev with the VIN instance, if supported */
+       if (vin->info->use_mc && (vin->info->din_mask & BIT(vin->id))) {
+               source = &vin->digital.subdev->entity;
+               sink = &vin->group->vin[vin->id]->vdev.entity;
+
+               ret = rvin_group_add_link(vin, source, 0, sink, 0,
+                                         MEDIA_LNK_FL_ENABLED);
+       }
+
+       return ret;
 }
 
 static void rvin_digital_notify_unbind(struct v4l2_async_notifier *notifier,
-- 
2.7.4

Reply via email to