Hi Steve, On Sun, Nov 24, 2019 at 11:06:57AM -0800, Steve Longerbeam wrote: > Implement a notifier bound op to register media links from the remote > sub-device's source pad(s) to the CSI sink pad. > > Signed-off-by: Steve Longerbeam <slongerbeam@xxxxxxxxx> > --- > Changes in v2: > Rename notifier_to_dev() to imx7_csi_notifier_to_dev() and remove > unnecessary inline. > Suggested-by: Rui Miguel Silva <rmfrfs@xxxxxxxxx> Many thanks for this. Reviewed-by: Rui Miguel Silva <rmfrfs@xxxxxxxxx> ------ Cheers, Rui > --- > drivers/staging/media/imx/imx7-media-csi.c | 25 ++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c > index 15b08bfb5aa7..848d1286fbeb 100644 > --- a/drivers/staging/media/imx/imx7-media-csi.c > +++ b/drivers/staging/media/imx/imx7-media-csi.c > @@ -196,6 +196,12 @@ struct imx7_csi { > struct completion last_eof_completion; > }; > > +static struct imx7_csi * > +imx7_csi_notifier_to_dev(struct v4l2_async_notifier *n) > +{ > + return container_of(n, struct imx7_csi, notifier); > +} > + > static u32 imx7_csi_reg_read(struct imx7_csi *csi, unsigned int offset) > { > return readl(csi->regbase + offset); > @@ -1187,6 +1193,23 @@ static int imx7_csi_parse_endpoint(struct device *dev, > return fwnode_device_is_available(asd->match.fwnode) ? 0 : -EINVAL; > } > > +static int imx7_csi_notify_bound(struct v4l2_async_notifier *notifier, > + struct v4l2_subdev *sd, > + struct v4l2_async_subdev *asd) > +{ > + struct imx7_csi *csi = imx7_csi_notifier_to_dev(notifier); > + struct media_pad *sink = &csi->sd.entity.pads[IMX7_CSI_PAD_SINK]; > + > + return media_create_fwnode_pad_links(sink, > + dev_fwnode(csi->sd.dev), > + &sd->entity, > + dev_fwnode(sd->dev), 0); > +} > + > +static const struct v4l2_async_notifier_operations imx7_csi_notify_ops = { > + .bound = imx7_csi_notify_bound, > +}; > + > static int imx7_csi_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > @@ -1269,6 +1292,8 @@ static int imx7_csi_probe(struct platform_device *pdev) > > v4l2_async_notifier_init(&csi->notifier); > > + csi->notifier.ops = &imx7_csi_notify_ops; > + > ret = v4l2_async_register_fwnode_subdev(&csi->sd, &csi->notifier, > sizeof(struct v4l2_async_subdev), > NULL, 0, > -- > 2.17.1 >