Re: [PATCH 15/22] media: imx7-media-csi: Create media links in bound notifier
Hi Rui, On 9/2/19 2:38 AM, Rui Miguel Silva wrote: Hi Steve, On Tue 06 Aug 2019 at 00:34, 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 --- drivers/staging/media/imx/imx7-media-csi.c | 24 ++ 1 file changed, 24 insertions(+) diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c index a1c96c52a606..f71ac485f780 100644 --- a/drivers/staging/media/imx/imx7-media-csi.c +++ b/drivers/staging/media/imx/imx7-media-csi.c @@ -196,6 +196,11 @@ struct imx7_csi { struct completion last_eof_completion; }; +static inline struct imx7_csi *notifier_to_dev(struct v4l2_async_notifier *n) As the other one add the namespace for the function name: imx7_csi_notifier_to_dev other than this, looks good to me. Thanks for the review. I will make those changes in next rev. Steve +{ + 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); @@ -1173,6 +1178,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 = 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; @@ -1253,6 +1275,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,
Re: [PATCH 15/22] media: imx7-media-csi: Create media links in bound notifier
Hi Steve, On Tue 06 Aug 2019 at 00:34, 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 > --- > drivers/staging/media/imx/imx7-media-csi.c | 24 ++ > 1 file changed, 24 insertions(+) > > diff --git a/drivers/staging/media/imx/imx7-media-csi.c > b/drivers/staging/media/imx/imx7-media-csi.c > index a1c96c52a606..f71ac485f780 100644 > --- a/drivers/staging/media/imx/imx7-media-csi.c > +++ b/drivers/staging/media/imx/imx7-media-csi.c > @@ -196,6 +196,11 @@ struct imx7_csi { > struct completion last_eof_completion; > }; > > +static inline struct imx7_csi *notifier_to_dev(struct v4l2_async_notifier *n) > As the other one add the namespace for the function name: imx7_csi_notifier_to_dev other than this, looks good to me. Cheers, Rui > +{ > + 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); > @@ -1173,6 +1178,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 = 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; > @@ -1253,6 +1275,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,
[PATCH 15/22] media: imx7-media-csi: Create media links in bound notifier
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 --- drivers/staging/media/imx/imx7-media-csi.c | 24 ++ 1 file changed, 24 insertions(+) diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c index a1c96c52a606..f71ac485f780 100644 --- a/drivers/staging/media/imx/imx7-media-csi.c +++ b/drivers/staging/media/imx/imx7-media-csi.c @@ -196,6 +196,11 @@ struct imx7_csi { struct completion last_eof_completion; }; +static inline struct 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); @@ -1173,6 +1178,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 = 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; @@ -1253,6 +1275,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