From c5bf128268c732ee5fa7adf9e9960028e898e20d Mon Sep 17 00:00:00 2001 From: s Date: Thu, 26 Apr 2012 19:25:09 -0400 Subject: [PATCH] [Port from R2] atomisp: The screen flashed green when changing state of back camera. BZ: 31998 We need to re-calculate ITG value when changing state also resolution. When changing state or resolution, sensor settings are changed. Itg value is depend on the sensor settings; frame_length_lines, line_length_pck and read_mode. If use previous itg value without re-calculation, itg may be invalid. Invalid settings of sensor generates some kinds of bad frame.(i.g. green flashed frame) For the same reason, we should remove the restore exposure block in mt9e013_s_mbus_fmt. The previous itg may be not correct value. Solution : - atomisp improve 1'st frame image - libmfldadvci improve 2'nd frame image - libcamera Change-Id: I9bd3893ddc79040c9567eebb7bb6b98b4deaabe7 Signed-off-by: s Reviewed-on: http://android.intel.com:8080/46433 Reviewed-by: Wada, Yoshio Reviewed-by: Kantola, Lasse Reviewed-by: Xia, Yu Y Reviewed-by: Bhat, Sheethal Reviewed-by: Kruger, Jozef Reviewed-by: Hu, Gang A Tested-by: Hu, Gang A Reviewed-by: buildbot Tested-by: buildbot --- drivers/media/video/mt9e013.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/media/video/mt9e013.c b/drivers/media/video/mt9e013.c index 8459097..e3cd8a6 100644 --- a/drivers/media/video/mt9e013.c +++ b/drivers/media/video/mt9e013.c @@ -807,6 +807,14 @@ static long mt9e013_s_exposure(struct v4l2_subdev *sd, fine_itg = exposure->integration_time[1]; gain = exposure->gain[0]; +/* + * we should not accept the invalid value below. + */ + if (fine_itg == 0 || gain == 0) { + struct i2c_client *client = v4l2_get_subdevdata(sd); + v4l2_err(client, "%s: invalid value\n", __func__); + return -EINVAL; + } return mt9e013_set_exposure(sd, coarse_itg, fine_itg, gain); } @@ -1795,6 +1803,9 @@ static int mt9e013_s_mbus_fmt(struct v4l2_subdev *sd, dev->fps = mt9e013_res[dev->fmt_idx].fps; dev->pixels_per_line = mt9e013_res[dev->fmt_idx].pixels_per_line; dev->lines_per_frame = mt9e013_res[dev->fmt_idx].lines_per_frame; + dev->coarse_itg = 0; + dev->fine_itg = 0; + dev->gain = 0; ret = mt9e013_get_intg_factor(client, mt9e013_info, mt9e013_def_reg); mutex_unlock(&dev->input_lock); @@ -1803,11 +1814,6 @@ static int mt9e013_s_mbus_fmt(struct v4l2_subdev *sd, return -EINVAL; } - /* restore exposure, gain settings */ - if (dev->coarse_itg) - mt9e013_set_exposure(sd, dev->coarse_itg, dev->fine_itg, - dev->gain); - return 0; } -- 2.7.4