[PORT FROM R2] mt9m114: add awb status checking for 3a stabilization
authorHuang Shenbo <shenbo.huang@intel.com>
Tue, 13 Dec 2011 07:52:15 +0000 (15:52 +0800)
committerbuildbot <buildbot@intel.com>
Thu, 22 Dec 2011 08:02:14 +0000 (00:02 -0800)
BZ: 18089

Also check if awb is steady during 3a stabiliztion checking.

Change-Id: Ifcd0718318d49c167644965036a6c472082452d1
Orig-Change-Id: I8820274891e58a0fb211ebc54950dc9ae96d6c6c
Signed-off-by: Huang Shenbo <shenbo.huang@intel.com>
Reviewed-on: http://android.intel.com:8080/27130
Reviewed-by: buildbot <buildbot@intel.com>
Reviewed-by: Cohen, David A <david.a.cohen@intel.com>
Reviewed-by: Tao, Jing <jing.tao@intel.com>
Reviewed-by: Koski, Anttu <anttu.koski@intel.com>
Reviewed-by: Hu, Gang A <gang.a.hu@intel.com>
Tested-by: Koski, Anttu <anttu.koski@intel.com>
Reviewed-on: http://android.intel.com:8080/29596
Reviewed-by: Lampila, KalleX <kallex.lampila@intel.com>
Tested-by: buildbot <buildbot@intel.com>
drivers/media/video/mt9m114.c
drivers/media/video/mt9m114.h

index 3171ecf..42ab9b2 100644 (file)
@@ -400,13 +400,24 @@ static int mt9m114_wait_3a(struct v4l2_subdev *sd)
 {
        struct i2c_client *client = v4l2_get_subdevdata(sd);
        int timeout = 100;
-       int status;
+       int status_exp, status_wb, ret;
 
        while (timeout--) {
-               mt9m114_read_reg(client, MISENSOR_16BIT, 0xA800, &status);
-               if (status & 0x8) {
-                       v4l2_info(client, "3a stablize time:%dms.\n",
-                                 (100-timeout)*20);
+               ret = mt9m114_read_reg(client, MISENSOR_16BIT,
+                       MISENSOR_AE_TRACK_STATUS, &status_exp);
+               if (ret)
+                       return ret;
+               if (!(status_exp & MISENSOR_AE_READY)) {
+                       msleep(20);
+                       continue;
+               }
+               ret = mt9m114_read_reg(client,
+                       MISENSOR_16BIT, MISENSOR_AWB_STATUS, &status_wb);
+               if (ret)
+                       return ret;
+               if (status_wb & MISENSOR_AWB_STEADY) {
+                       v4l2_info(client, "ae/awb stablize retry count  %d.\n",
+                                 (100-timeout));
                        return 0;
                }
                msleep(20);
index 159a8e8..baca32d 100644 (file)
@@ -59,6 +59,8 @@
 #define MISENSOR_TOK_MASK      0xfff0
 #define MISENSOR_FLIP_EN       (1<<1)  /* enable vert_flip */
 #define MISENSOR_MIRROR_EN     (1<<0)  /* enable horz_mirror */
+#define MISENSOR_AWB_STEADY    (1<<0)  /* awb steady */
+#define MISENSOR_AE_READY      (1<<3)  /* ae status ready */
 
 /* mask to set sensor read_mode via misensor_rmw_reg */
 #define MISENSOR_R_MODE_MASK   0x0330
 
 /* sensor register that control sensor read-mode and mirror */
 #define MISENSOR_READ_MODE     0xC834
+/* sensor ae-track status register */
+#define MISENSOR_AE_TRACK_STATUS       0xA800
+/* sensor awb status register */
+#define MISENSOR_AWB_STATUS    0xAC00
 
 #define SENSOR_DETECTED                1
 #define SENSOR_NOT_DETECTED    0