media: cadence: Use v4l2_async_notifier_add_fwnode_remote_subdev
authorEzequiel Garcia <ezequiel@collabora.com>
Mon, 18 Jan 2021 01:52:50 +0000 (02:52 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Sat, 6 Feb 2021 07:43:20 +0000 (08:43 +0100)
The use of v4l2_async_notifier_add_subdev will be discouraged.
Drivers are instead encouraged to use a helper such as
v4l2_async_notifier_add_fwnode_remote_subdev.

This fixes a misuse of the API, as v4l2_async_notifier_add_subdev
should get a kmalloc'ed struct v4l2_async_subdev,
removing some boilerplate code while at it.

Use the appropriate helper v4l2_async_notifier_add_fwnode_remote_subdev,
which handles the needed setup, instead of open-coding it.

Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
Reviewed-by: Helen Koike <helen.koike@collabora.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/cadence/cdns-csi2rx.c

index be9ec59774d6d8a8e45a2b29250ebb7a1abfd9ed..7d299cacef8ceee2965dd0ce1b4b042eaae55920 100644 (file)
@@ -81,7 +81,6 @@ struct csi2rx_priv {
        struct media_pad                pads[CSI2RX_PAD_MAX];
 
        /* Remote source */
-       struct v4l2_async_subdev        asd;
        struct v4l2_subdev              *source_subdev;
        int                             source_pad;
 };
@@ -362,6 +361,7 @@ static int csi2rx_get_resources(struct csi2rx_priv *csi2rx,
 static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
 {
        struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
+       struct v4l2_async_subdev *asd;
        struct fwnode_handle *fwh;
        struct device_node *ep;
        int ret;
@@ -395,17 +395,13 @@ static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
                return -EINVAL;
        }
 
-       csi2rx->asd.match.fwnode = fwnode_graph_get_remote_port_parent(fwh);
-       csi2rx->asd.match_type = V4L2_ASYNC_MATCH_FWNODE;
-       of_node_put(ep);
-
        v4l2_async_notifier_init(&csi2rx->notifier);
 
-       ret = v4l2_async_notifier_add_subdev(&csi2rx->notifier, &csi2rx->asd);
-       if (ret) {
-               fwnode_handle_put(csi2rx->asd.match.fwnode);
-               return ret;
-       }
+       asd = v4l2_async_notifier_add_fwnode_remote_subdev(&csi2rx->notifier,
+                                                          fwh, sizeof(*asd));
+       of_node_put(ep);
+       if (IS_ERR(asd))
+               return PTR_ERR(asd);
 
        csi2rx->notifier.ops = &csi2rx_notifier_ops;