[PATCH 42/55] media: rkisp1: Use fwnode_graph_for_each_endpoint
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Jun 17 15:56:30 PDT 2022
Hi Paul,
Thank you for the patch.
On Wed, Jun 15, 2022 at 04:11:14AM +0900, Paul Elder wrote:
> When registering the notifier, replace the manual while loop with
> fwnode_graph_for_each_endpoint. This simplifies error handling.
>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-dev.c | 44 +++++++++----------
> 1 file changed, 20 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index a3e182c86bdd..00ace8224575 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -158,29 +158,28 @@ static const struct v4l2_async_notifier_operations rkisp1_subdev_notifier_ops =
> static int rkisp1_subdev_notifier_register(struct rkisp1_device *rkisp1)
> {
> struct v4l2_async_notifier *ntf = &rkisp1->notifier;
> - unsigned int next_id = 0;
> + struct fwnode_handle *fwnode = dev_fwnode(rkisp1->dev);
> + struct fwnode_handle *ep;
> unsigned int index = 0;
> - int ret;
> + int ret = 0;
>
> v4l2_async_nf_init(ntf);
>
> - while (1) {
> + ntf->ops = &rkisp1_subdev_notifier_ops;
> +
> + fwnode_graph_for_each_endpoint(fwnode, ep) {
> struct v4l2_fwnode_endpoint vep = {
> .bus_type = V4L2_MBUS_CSI2_DPHY
> };
> struct rkisp1_sensor_async *rk_asd;
> - struct fwnode_handle *source = NULL;
> - struct fwnode_handle *ep;
> -
> - ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(rkisp1->dev),
> - 0, next_id,
> - FWNODE_GRAPH_ENDPOINT_NEXT);
> - if (!ep)
> - break;
> + struct fwnode_handle *source;
>
> ret = v4l2_fwnode_endpoint_parse(ep, &vep);
> - if (ret)
> - goto err_parse;
> + if (ret) {
> + dev_err(rkisp1->dev, "failed to parse endpoint %pfw\n",
> + ep);
> + break;
> + }
>
> source = fwnode_graph_get_remote_endpoint(ep);
> if (!source) {
> @@ -188,14 +187,15 @@ static int rkisp1_subdev_notifier_register(struct rkisp1_device *rkisp1)
> "endpoint %pfw has no remote endpoint\n",
> ep);
> ret = -ENODEV;
> - goto err_parse;
> + break;
> }
>
> rk_asd = v4l2_async_nf_add_fwnode(ntf, source,
> struct rkisp1_sensor_async);
> if (IS_ERR(rk_asd)) {
> + fwnode_handle_put(source);
> ret = PTR_ERR(rk_asd);
> - goto err_parse;
> + break;
> }
>
> rk_asd->index = index++;
> @@ -206,27 +206,23 @@ static int rkisp1_subdev_notifier_register(struct rkisp1_device *rkisp1)
>
> dev_dbg(rkisp1->dev, "registered ep id %d with %d lanes\n",
> vep.base.id, rk_asd->lanes);
> + }
>
> - next_id = vep.base.id + 1;
> -
> - fwnode_handle_put(ep);
> -
> - continue;
> -err_parse:
> + if (ret) {
> fwnode_handle_put(ep);
> - fwnode_handle_put(source);
> v4l2_async_nf_cleanup(ntf);
> return ret;
> }
>
> - if (next_id == 0)
> + if (!index)
> dev_dbg(rkisp1->dev, "no remote subdevice found\n");
> - ntf->ops = &rkisp1_subdev_notifier_ops;
> +
> ret = v4l2_async_nf_register(&rkisp1->v4l2_dev, ntf);
> if (ret) {
> v4l2_async_nf_cleanup(ntf);
> return ret;
> }
> +
> return 0;
> }
>
--
Regards,
Laurent Pinchart
More information about the Linux-rockchip
mailing list