]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00279087-2 csi_v4l2_capture: move int_dev_init() to open function
authorRobby Cai <R63905@freescale.com>
Wed, 11 Sep 2013 05:27:59 +0000 (13:27 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Wed, 20 Aug 2014 08:06:30 +0000 (10:06 +0200)
By later initialization for camera dev (to call int_dev_init), the driver
works well whether the master (csi_v4l2_capture) or the slave (ov5640)
has been attached first. In this way, the driver can stick to the philosophy
for the V4L2_INT_DEVICE framework (the attach sequence shouldn't matter).

The following way to insert modules should work:

$ insmod fsl_csi.ko
$ insmod ov5640_camera.ko
$ insmod csi_v4l2_capture.ko

or,

$ insmod fsl_csi.ko
$ insmod csi_v4l2_capture.ko
$ insmod ov5640_camera.ko

Signed-off-by: Robby Cai <R63905@freescale.com>
drivers/media/platform/mxc/capture/csi_v4l2_capture.c

index 3874a1428bb3fe13a47682d276f29ea5bad79084..3a611f05f293be9bace36cc552755ddcc3081b66 100644 (file)
@@ -1147,7 +1147,9 @@ static int csi_v4l_open(struct file *file)
 
                cam_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
                clk_prepare_enable(sensor->sensor_clk);
+               vidioc_int_s_power(cam->sensor, 1);
                vidioc_int_init(cam->sensor);
+               vidioc_int_dev_init(cam->sensor);
        }
 
        file->private_data = dev;
@@ -1199,6 +1201,7 @@ static int csi_v4l_close(struct file *file)
                wait_event_interruptible(cam->power_queue,
                                         cam->low_power == false);
                file->private_data = NULL;
+               vidioc_int_s_power(cam->sensor, 0);
                clk_disable_unprepare(sensor->sensor_clk);
        }
 
@@ -1999,9 +2002,6 @@ static int csi_v4l2_master_attach(struct v4l2_int_device *slave)
                return -1;
        }
 
-       vidioc_int_s_power(cam->sensor, 1);
-       vidioc_int_dev_init(slave);
-       vidioc_int_s_power(cam->sensor, 0);
        cam_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        vidioc_int_g_fmt_cap(cam->sensor, &cam_fmt);