media: imx: imx7-media-csi: Fix error handling in imx7_csi_async_register()
authorFrieder Schrempf <frieder.schrempf@kontron.de>
Wed, 15 Feb 2023 17:16:38 +0000 (18:16 +0100)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Tue, 11 Apr 2023 16:11:53 +0000 (18:11 +0200)
The CSI requires a connected source subdev to operate. If
fwnode_graph_get_endpoint_by_id() fails and returns NULL, there is no
point in going on. Print an error message and abort instead.

Also we don't need to check for an existing asd. Any failure of
v4l2_async_nf_add_fwnode_remote() should abort the probe.

Suggested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/platform/nxp/imx7-media-csi.c

index 9ee46c1..cc468b3 100644 (file)
@@ -2107,18 +2107,21 @@ static int imx7_csi_async_register(struct imx7_csi *csi)
 
        ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csi->dev), 0, 0,
                                             FWNODE_GRAPH_ENDPOINT_NEXT);
-       if (ep) {
-               asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep,
-                                                     struct v4l2_async_subdev);
+       if (!ep) {
+               ret = dev_err_probe(csi->dev, -ENOTCONN,
+                                   "Failed to get remote endpoint\n");
+               goto error;
+       }
 
-               fwnode_handle_put(ep);
+       asd = v4l2_async_nf_add_fwnode_remote(&csi->notifier, ep,
+                                             struct v4l2_async_subdev);
 
-               if (IS_ERR(asd)) {
-                       ret = PTR_ERR(asd);
-                       /* OK if asd already exists */
-                       if (ret != -EEXIST)
-                               goto error;
-               }
+       fwnode_handle_put(ep);
+
+       if (IS_ERR(asd)) {
+               ret = dev_err_probe(csi->dev, PTR_ERR(asd),
+                                   "Failed to add remote subdev to notifier\n");
+               goto error;
        }
 
        csi->notifier.ops = &imx7_csi_notify_ops;