Commit 3b423e1b authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab
Browse files

media: atomisp: Split subdev and video-node registration into 2 steps



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: default avatarAndy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 0d945e4d
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -1281,7 +1281,13 @@ 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,
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,
+4 −2
Original line number Diff line number Diff line
@@ -417,7 +417,9 @@ 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,
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);
+3 −1
Original line number Diff line number Diff line
@@ -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");