{
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);
#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