Implement a notifier bound op to register media links from the remote
sub-device's source pad(s) to the mipi csi-2 receiver sink pad.

Signed-off-by: Steve Longerbeam <slongerb...@gmail.com>
---
 drivers/staging/media/imx/imx7-mipi-csis.c | 25 ++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/drivers/staging/media/imx/imx7-mipi-csis.c 
b/drivers/staging/media/imx/imx7-mipi-csis.c
index f71d9183cad2..e03b2317a1ac 100644
--- a/drivers/staging/media/imx/imx7-mipi-csis.c
+++ b/drivers/staging/media/imx/imx7-mipi-csis.c
@@ -259,6 +259,12 @@ struct csi_state {
        bool sink_linked;
 };
 
+static inline struct csi_state *
+notifier_to_csis_state(struct v4l2_async_notifier *n)
+{
+       return container_of(n, struct csi_state, notifier);
+}
+
 struct csis_pix_format {
        unsigned int pix_width_alignment;
        u32 code;
@@ -863,6 +869,23 @@ static int mipi_csis_parse_endpoint(struct device *dev,
        return 0;
 }
 
+static int mipi_csis_notify_bound(struct v4l2_async_notifier *notifier,
+                                 struct v4l2_subdev *sd,
+                                 struct v4l2_async_subdev *asd)
+{
+       struct csi_state *state = notifier_to_csis_state(notifier);
+       struct media_pad *sink = &state->mipi_sd.entity.pads[CSIS_PAD_SINK];
+
+       return media_create_fwnode_pad_links(sink,
+                                            dev_fwnode(state->mipi_sd.dev),
+                                            &sd->entity,
+                                            dev_fwnode(sd->dev), 0);
+}
+
+static const struct v4l2_async_notifier_operations mipi_csis_notify_ops = {
+       .bound = mipi_csis_notify_bound,
+};
+
 static int mipi_csis_subdev_init(struct v4l2_subdev *mipi_sd,
                                 struct platform_device *pdev,
                                 const struct v4l2_subdev_ops *ops)
@@ -895,6 +918,8 @@ static int mipi_csis_subdev_init(struct v4l2_subdev 
*mipi_sd,
 
        v4l2_async_notifier_init(&state->notifier);
 
+       state->notifier.ops = &mipi_csis_notify_ops;
+
        ret = v4l2_async_register_fwnode_subdev(mipi_sd, &state->notifier,
                                                sizeof(struct 
v4l2_async_subdev),
                                                &sink_port, 1,
-- 
2.17.1

Reply via email to