summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorGuoqing Jiang <b22156@freescale.com>2009-07-22 16:42:05 +0800
committerJustin Waters <justin.waters@timesys.com>2009-10-13 11:04:38 -0400
commit5bc5a6849bb0e6ff38c01e967944a184692f7632 (patch)
treecced305d65fe75630c364667b70132e29a20a6a9 /drivers/media
parent84d89243205f2a561801c31f4ab95287c2a09dce (diff)
ENGR00113642 Camera: Workaround for incorrect color of still capture on MX25
Workaround to keep the sensor clock always on when the video device is opened, and disable the clock when the device is no long used. Signed-off-by: Guoqing Jiang <b22156@freescale.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/mxc/capture/csi_v4l2_capture.c12
-rw-r--r--drivers/media/video/mxc/capture/ov2640.c2
2 files changed, 3 insertions, 11 deletions
diff --git a/drivers/media/video/mxc/capture/csi_v4l2_capture.c b/drivers/media/video/mxc/capture/csi_v4l2_capture.c
index b0b7379a2cb2..3266d2500081 100644
--- a/drivers/media/video/mxc/capture/csi_v4l2_capture.c
+++ b/drivers/media/video/mxc/capture/csi_v4l2_capture.c
@@ -90,7 +90,6 @@ static int start_preview(cam_data *cam)
__raw_writel(__raw_readl(CSI_CSICR3) | BIT_DMA_REFLASH_RFF, CSI_CSICR3);
csi_enable_int(0);
- csi_enable_mclk(CSI_MCLK_I2C, true, true);
return 0;
}
@@ -104,7 +103,6 @@ static int start_preview(cam_data *cam)
*/
static int stop_preview(cam_data *cam)
{
- csi_enable_mclk(CSI_MCLK_I2C, false, false);
csi_disable_int();
/* set CSI_CSIDMASA_FB1 and CSI_CSIDMASA_FB2 to default value */
@@ -325,9 +323,7 @@ static int csi_v4l2_s_param(cam_data *cam, struct v4l2_streamparm *parm)
currentparm.parm.capture.timeperframe.denominator,
parm->parm.capture.timeperframe.denominator);
- csi_enable_mclk(CSI_MCLK_I2C, true, true);
err = vidioc_int_s_parm(cam->sensor, parm);
- csi_enable_mclk(CSI_MCLK_I2C, false, false);
if (err) {
pr_err("%s: vidioc_int_s_parm returned an error %d\n",
__func__, err);
@@ -382,7 +378,6 @@ static int csi_v4l_open(struct inode *inode, struct file *file)
cam_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
csi_enable_mclk(CSI_MCLK_I2C, true, true);
vidioc_int_init(cam->sensor);
- csi_enable_mclk(CSI_MCLK_I2C, false, false);
}
file->private_data = dev;
@@ -424,6 +419,7 @@ static int csi_v4l_close(struct inode *inode, struct file *file)
wait_event_interruptible(cam->power_queue,
cam->low_power == false);
file->private_data = NULL;
+ csi_enable_mclk(CSI_MCLK_I2C, false, false);
}
return err;
@@ -473,11 +469,9 @@ static ssize_t csi_v4l_read(struct file *file, char *buf, size_t count,
__raw_writel(__raw_readl(CSI_CSICR3) | BIT_FRMCNT_RST,
CSI_CSICR3);
csi_enable_int(1);
- csi_enable_mclk(CSI_MCLK_I2C, true, true);
}
wait_event_interruptible(cam->still_queue, cam->still_counter);
- csi_enable_mclk(CSI_MCLK_I2C, false, false);
csi_disable_int();
err = copy_to_user(buf, cam->still_buf_vaddr,
cam->v2f.fmt.pix.sizeimage);
@@ -544,9 +538,7 @@ static int csi_v4l_do_ioctl(struct inode *inode, struct file *file,
struct v4l2_format *sf = arg;
pr_debug(" case VIDIOC_S_FMT\n");
retval = csi_v4l2_s_fmt(cam, sf);
- csi_enable_mclk(CSI_MCLK_I2C, true, true);
vidioc_int_s_fmt_cap(cam->sensor, sf);
- csi_enable_mclk(CSI_MCLK_I2C, false, false);
break;
}
@@ -972,7 +964,7 @@ static __init int camera_init(void)
/* This function contains a bug that won't let this be rmmod'd. */
v4l2_int_device_register(&csi_v4l2_int_device);
- /* Register the I2C device */
+ /* Register the platform device */
err = platform_device_register(&csi_v4l2_devices);
if (err != 0) {
pr_err("ERROR: v4l2 capture: camera_init: "
diff --git a/drivers/media/video/mxc/capture/ov2640.c b/drivers/media/video/mxc/capture/ov2640.c
index 5d07040afed3..bf338db158b6 100644
--- a/drivers/media/video/mxc/capture/ov2640.c
+++ b/drivers/media/video/mxc/capture/ov2640.c
@@ -961,7 +961,7 @@ static int ov2640_probe(struct i2c_client *client,
}
/* This function attaches this structure to the /dev/video0 device.
- * The pointer in priv points to the mt9v111_data structure here.*/
+ * The pointer in priv points to the ov2640_data structure here.*/
ov2640_int_device.priv = &ov2640_data;
retval = v4l2_int_device_register(&ov2640_int_device);