msm: camera: vision mode sensor driver
Required to activate the vision mode in s5k6b2yx sensor.
Change-Id: I56e7c56fed414d030e6e57ff7e15c20a071c5dc6
Signed-off-by: Punit Soni <punits@codeaurora.org>
Signed-off-by: Ninad Patgaonkar <ninadp@codeaurora.org>
diff --git a/drivers/media/video/msm/sensors/msm_sensor.c b/drivers/media/video/msm/sensors/msm_sensor.c
index 467e4b4..dcefaac 100644
--- a/drivers/media/video/msm/sensors/msm_sensor.c
+++ b/drivers/media/video/msm/sensors/msm_sensor.c
@@ -161,7 +161,8 @@
if (s_ctrl->curr_res >= s_ctrl->msm_sensor_reg->num_conf)
return;
- if (s_ctrl->func_tbl->sensor_adjust_frame_lines)
+ if (s_ctrl->func_tbl->sensor_adjust_frame_lines &&
+ s_ctrl->vision_mode_flag == 0)
s_ctrl->func_tbl->sensor_adjust_frame_lines(s_ctrl);
msm_camera_i2c_write_tbl(
@@ -443,6 +444,9 @@
break;
case CFG_SET_EXP_GAIN:
+ if(s_ctrl->vision_mode_flag) {
+ break;
+ }
if (s_ctrl->func_tbl->
sensor_write_exp_gain == NULL) {
rc = -EFAULT;
@@ -457,6 +461,9 @@
break;
case CFG_SET_PICT_EXP_GAIN:
+ if(s_ctrl->vision_mode_flag) {
+ break;
+ }
if (s_ctrl->func_tbl->
sensor_write_snapshot_exp_gain == NULL) {
rc = -EFAULT;
@@ -562,7 +569,21 @@
else
rc = -EFAULT;
break;
-
+ case CFG_SET_VISION_MODE:
+ if (s_ctrl->func_tbl->sensor_set_vision_mode)
+ rc = s_ctrl->func_tbl->sensor_set_vision_mode(
+ s_ctrl, cdata.cfg.vision_mode_enable);
+ else
+ rc = -EFAULT;
+ break;
+ case CFG_SET_VISION_AE:
+ if (s_ctrl->func_tbl->sensor_set_vision_ae_control)
+ rc = s_ctrl->func_tbl->
+ sensor_set_vision_ae_control(
+ s_ctrl, cdata.cfg.vision_ae);
+ else
+ rc = -EFAULT;
+ break;
default:
rc = -EFAULT;
break;
diff --git a/drivers/media/video/msm/sensors/msm_sensor_common.h b/drivers/media/video/msm/sensors/msm_sensor_common.h
index 79fe52e..e2ae18e 100644
--- a/drivers/media/video/msm/sensors/msm_sensor_common.h
+++ b/drivers/media/video/msm/sensors/msm_sensor_common.h
@@ -156,6 +156,10 @@
void (*sensor_adjust_frame_lines) (struct msm_sensor_ctrl_t *s_ctrl);
int32_t (*sensor_get_csi_params)(struct msm_sensor_ctrl_t *,
struct csi_lane_params_t *);
+ int (*sensor_set_vision_mode)(struct msm_sensor_ctrl_t *s_ctrl,
+ int32_t vision_mode_enable);
+ int (*sensor_set_vision_ae_control)(
+ struct msm_sensor_ctrl_t *s_ctrl, int ae_mode);
};
struct msm_sensor_csi_info {
@@ -192,6 +196,7 @@
struct msm_sensor_v4l2_ctrl_info_t *msm_sensor_v4l2_ctrl_info;
uint16_t num_v4l2_ctrl;
uint8_t is_csic;
+ int8_t vision_mode_flag;
uint16_t curr_line_length_pclk;
uint16_t curr_frame_length_lines;
diff --git a/drivers/media/video/msm/vfe/msm_vfe32.c b/drivers/media/video/msm/vfe/msm_vfe32.c
old mode 100755
new mode 100644
index 94463fa..50ad80e
--- a/drivers/media/video/msm/vfe/msm_vfe32.c
+++ b/drivers/media/video/msm/vfe/msm_vfe32.c
@@ -5913,6 +5913,8 @@
axi_ctrl->share_ctrl->lp_mode = lp_mode;
if (lp_mode)
axi_ctrl->share_ctrl->dual_enabled = 0;
+ else
+ axi_ctrl->share_ctrl->dual_enabled = 1;
return rc;
}
diff --git a/include/media/msm_camera.h b/include/media/msm_camera.h
index 7241e90..90d01da 100644
--- a/include/media/msm_camera.h
+++ b/include/media/msm_camera.h
@@ -1014,7 +1014,9 @@
#define CFG_CONFIG_VREG_ARRAY 52
#define CFG_CONFIG_CLK_ARRAY 53
#define CFG_GPIO_OP 54
-#define CFG_MAX 55
+#define CFG_SET_VISION_MODE 55
+#define CFG_SET_VISION_AE 56
+#define CFG_MAX 57
#define MOVE_NEAR 0
@@ -1672,6 +1674,8 @@
int is_autoflash;
struct mirror_flip mirror_flip;
void *setting;
+ int32_t vision_mode_enable;
+ int32_t vision_ae;
} cfg;
};