]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: qcom: camss: register camss media device before subdevices
authorVladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Tue, 13 May 2025 14:23:48 +0000 (17:23 +0300)
committerHans Verkuil <hverkuil@xs4all.nl>
Thu, 3 Jul 2025 09:02:45 +0000 (11:02 +0200)
A media device can and at least for sake of simplicity should be registered
before V4L2 devices including the ones added on async completion.

The change removes the second and out of camss_probe() media device
registration path, and it allows to get a working ISP media device
independently from connected or not sensor devices.

Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Acked-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Bryan O'Donoghue <bod@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/platform/qcom/camss/camss.c

index 8c844ebf9cb677774caa5d22608be4cffb48ebd6..3e1bd02f5adcbe85aae7afd4f8d3d9a4aac9b1d5 100644 (file)
@@ -3418,11 +3418,7 @@ static int camss_subdev_notifier_complete(struct v4l2_async_notifier *async)
                }
        }
 
-       ret = v4l2_device_register_subdev_nodes(&camss->v4l2_dev);
-       if (ret < 0)
-               return ret;
-
-       return media_device_register(&camss->media_dev);
+       return v4l2_device_register_subdev_nodes(&camss->v4l2_dev);
 }
 
 static const struct v4l2_async_notifier_operations camss_subdev_notifier_ops = {
@@ -3646,6 +3642,12 @@ static int camss_probe(struct platform_device *pdev)
        if (ret < 0)
                goto err_register_subdevs;
 
+       ret = media_device_register(&camss->media_dev);
+       if (ret < 0) {
+               dev_err(dev, "Failed to register media device: %d\n", ret);
+               goto err_register_subdevs;
+       }
+
        if (num_subdevs) {
                camss->notifier.ops = &camss_subdev_notifier_ops;
 
@@ -3654,26 +3656,21 @@ static int camss_probe(struct platform_device *pdev)
                        dev_err(dev,
                                "Failed to register async subdev nodes: %d\n",
                                ret);
-                       goto err_register_subdevs;
+                       goto err_media_device_unregister;
                }
        } else {
                ret = v4l2_device_register_subdev_nodes(&camss->v4l2_dev);
                if (ret < 0) {
                        dev_err(dev, "Failed to register subdev nodes: %d\n",
                                ret);
-                       goto err_register_subdevs;
-               }
-
-               ret = media_device_register(&camss->media_dev);
-               if (ret < 0) {
-                       dev_err(dev, "Failed to register media device: %d\n",
-                               ret);
-                       goto err_register_subdevs;
+                       goto err_media_device_unregister;
                }
        }
 
        return 0;
 
+err_media_device_unregister:
+       media_device_unregister(&camss->media_dev);
 err_register_subdevs:
        camss_unregister_entities(camss);
 err_v4l2_device_unregister: