From: Sheng Nan Date: Fri, 23 Nov 2012 02:59:22 +0000 (+0800) Subject: ENGR00234362 Camera: ov5640_mipi: wait for sensor stable before streamon X-Git-Tag: v3.0.35-fsl~225 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=970a982a17d3b8144356b5be9f6165864e92ea7b;p=karo-tx-linux.git ENGR00234362 Camera: ov5640_mipi: wait for sensor stable before streamon ov5642 add some delay to wait for sensor stable after S_PARM. And ov5640_mipi should keep the same behavior. So the upper layer can trust the first frame comes out of ov5640_mipi. - delay added according to the recommended time from ov company Signed-off-by: Sheng Nan --- diff --git a/drivers/media/video/mxc/capture/ov5640_mipi.c b/drivers/media/video/mxc/capture/ov5640_mipi.c index bde39a51d368..d2b79d2162be 100644 --- a/drivers/media/video/mxc/capture/ov5640_mipi.c +++ b/drivers/media/video/mxc/capture/ov5640_mipi.c @@ -1216,7 +1216,7 @@ static int ov5640_init_mode(enum ov5640_frame_rate frame_rate, s32 ArySize = 0; int retval = 0; void *mipi_csi2_info; - u32 mipi_reg; + u32 mipi_reg, msec_wait4stable = 0; enum ov5640_downsize_mode dn_mode, orig_dn_mode; if ((mode > ov5640_mode_MAX || mode < ov5640_mode_MIN) @@ -1288,6 +1288,20 @@ static int ov5640_init_mode(enum ov5640_frame_rate frame_rate, OV5640_set_bandingfilter(); ov5640_set_virtual_channel(ov5640_data.csi); + /* add delay to wait for sensor stable */ + if (mode == ov5640_mode_QSXGA_2592_1944) { + /* dump the first two frames: 1/7.5*2 + * the frame rate of QSXGA is 7.5fps */ + msec_wait4stable = 267; + } else if (frame_rate == ov5640_15_fps) { + /* dump the first nine frames: 1/15*9 */ + msec_wait4stable = 600; + } else if (frame_rate == ov5640_30_fps) { + /* dump the first nine frames: 1/30*9 */ + msec_wait4stable = 300; + } + msleep(msec_wait4stable); + if (mipi_csi2_info) { unsigned int i;