media: st-mipid02: Use v4l2_async_notifier_add_fwnode_remote_subdev
authorEzequiel Garcia <ezequiel@collabora.com>
Mon, 18 Jan 2021 01:52:49 +0000 (02:52 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Sat, 6 Feb 2021 07:43:02 +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/i2c/st-mipid02.c

index 003ba22334cdff083db53d0983fd323bdcc50878..bb32a5278a4eb13d086c39698f7754d2fc3ec8e1 100644 (file)
@@ -92,7 +92,6 @@ struct mipid02_dev {
        u64 link_frequency;
        struct v4l2_fwnode_endpoint tx;
        /* remote source */
-       struct v4l2_async_subdev asd;
        struct v4l2_async_notifier notifier;
        struct v4l2_subdev *s_subdev;
        /* registers */
@@ -844,6 +843,7 @@ static int mipid02_parse_rx_ep(struct mipid02_dev *bridge)
 {
        struct v4l2_fwnode_endpoint ep = { .bus_type = V4L2_MBUS_CSI2_DPHY };
        struct i2c_client *client = bridge->i2c_client;
+       struct v4l2_async_subdev *asd;
        struct device_node *ep_node;
        int ret;
 
@@ -875,18 +875,17 @@ static int mipid02_parse_rx_ep(struct mipid02_dev *bridge)
        bridge->rx = ep;
 
        /* register async notifier so we get noticed when sensor is connected */
-       bridge->asd.match.fwnode =
-               fwnode_graph_get_remote_port_parent(of_fwnode_handle(ep_node));
-       bridge->asd.match_type = V4L2_ASYNC_MATCH_FWNODE;
+       v4l2_async_notifier_init(&bridge->notifier);
+       asd = v4l2_async_notifier_add_fwnode_remote_subdev(
+                                       &bridge->notifier,
+                                       of_fwnode_handle(ep_node),
+                                       sizeof(*asd));
        of_node_put(ep_node);
 
-       v4l2_async_notifier_init(&bridge->notifier);
-       ret = v4l2_async_notifier_add_subdev(&bridge->notifier, &bridge->asd);
-       if (ret) {
-               dev_err(&client->dev, "fail to register asd to notifier %d",
-                       ret);
-               fwnode_handle_put(bridge->asd.match.fwnode);
-               return ret;
+       if (IS_ERR(asd)) {
+               dev_err(&client->dev, "fail to register asd to notifier %ld",
+                       PTR_ERR(asd));
+               return PTR_ERR(asd);
        }
        bridge->notifier.ops = &mipid02_notifier_ops;