media: atomisp: Split subdev and video-node registration into 2 steps
authorHans de Goede <hdegoede@redhat.com>
Sun, 28 Aug 2022 19:41:50 +0000 (21:41 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sat, 24 Sep 2022 07:57:10 +0000 (09:57 +0200)
Split subdev and video-node registration into 2 steps, this is
a preparation step for moving video-node registration to the
end of probe() so that the loading() mutex can be removed.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/staging/media/atomisp/pci/atomisp_subdev.c
drivers/staging/media/atomisp/pci/atomisp_subdev.h
drivers/staging/media/atomisp/pci/atomisp_v4l2.c

index 5e66d6a..047e2e9 100644 (file)
@@ -1281,8 +1281,14 @@ void atomisp_subdev_unregister_entities(struct atomisp_sub_device *asd)
        atomisp_video_unregister(&asd->video_out_video_capture);
 }
 
-int atomisp_subdev_register_entities(struct atomisp_sub_device *asd,
-                                    struct v4l2_device *vdev)
+int atomisp_subdev_register_subdev(struct atomisp_sub_device *asd,
+                                  struct v4l2_device *vdev)
+{
+       return v4l2_device_register_subdev(vdev, &asd->subdev);
+}
+
+int atomisp_subdev_register_video_nodes(struct atomisp_sub_device *asd,
+                                       struct v4l2_device *vdev)
 {
        int ret;
 
@@ -1291,12 +1297,6 @@ int atomisp_subdev_register_entities(struct atomisp_sub_device *asd,
         * Should any of those use V4L2_CAP_META_CAPTURE? Probably yes.
         */
 
-       /* Register the subdev and video node. */
-
-       ret = v4l2_device_register_subdev(vdev, &asd->subdev);
-       if (ret < 0)
-               goto error;
-
        asd->video_out_preview.vdev.v4l2_dev = vdev;
        asd->video_out_preview.vdev.device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
        ret = video_register_device(&asd->video_out_preview.vdev,
index d1a9857..d8b2dd0 100644 (file)
@@ -417,8 +417,10 @@ int atomisp_update_run_mode(struct atomisp_sub_device *asd);
 void atomisp_subdev_cleanup_pending_events(struct atomisp_sub_device *asd);
 
 void atomisp_subdev_unregister_entities(struct atomisp_sub_device *asd);
-int atomisp_subdev_register_entities(struct atomisp_sub_device *asd,
-                                    struct v4l2_device *vdev);
+int atomisp_subdev_register_subdev(struct atomisp_sub_device *asd,
+                                  struct v4l2_device *vdev);
+int atomisp_subdev_register_video_nodes(struct atomisp_sub_device *asd,
+                                       struct v4l2_device *vdev);
 int atomisp_subdev_init(struct atomisp_device *isp);
 void atomisp_subdev_cleanup(struct atomisp_device *isp);
 int atomisp_create_pads_links(struct atomisp_device *isp);
index bb48c74..9a1eae1 100644 (file)
@@ -1193,7 +1193,9 @@ static int atomisp_register_entities(struct atomisp_device *isp)
        for (i = 0; i < isp->num_of_streams; i++) {
                struct atomisp_sub_device *asd = &isp->asd[i];
 
-               ret = atomisp_subdev_register_entities(asd, &isp->v4l2_dev);
+               ret = atomisp_subdev_register_subdev(asd, &isp->v4l2_dev);
+               if (ret == 0)
+                       ret = atomisp_subdev_register_video_nodes(asd, &isp->v4l2_dev);
                if (ret < 0) {
                        dev_err(isp->dev,
                                "atomisp_subdev_register_entities fail\n");