msm: camera: Add effects for front camera.
Added Support for Effects like saturtaion,contrast for YUV sensor
CRs-Fixed: 352316
Change-Id: If278755849a866e84069ce517b2f1f6c67294980
Signed-off-by: Katta Santhisindhu <kattas@codeaurora.org>
diff --git a/drivers/media/video/msm/io/msm_camera_i2c.c b/drivers/media/video/msm/io/msm_camera_i2c.c
index 6f45637..cecf9b0 100644
--- a/drivers/media/video/msm/io/msm_camera_i2c.c
+++ b/drivers/media/video/msm/io/msm_camera_i2c.c
@@ -165,6 +165,31 @@
return rc;
}
+int32_t msm_camera_i2c_set_write_mask_data(struct msm_camera_i2c_client *client,
+ uint16_t addr, uint16_t data, int16_t mask,
+ enum msm_camera_i2c_data_type data_type)
+{
+ int32_t rc;
+ uint16_t reg_data;
+ CDBG("%s\n", __func__);
+ if (mask == -1)
+ return 0;
+ if (mask == 0)
+ rc = msm_camera_i2c_write(client, addr, data, data_type);
+ else{
+ rc = msm_camera_i2c_read(client, addr, ®_data, data_type);
+ if (rc < 0) {
+ CDBG("%s read fail\n", __func__);
+ return rc;
+ }
+ reg_data = reg_data & mask;
+ reg_data = (reg_data | (data & (~mask)));
+ rc = msm_camera_i2c_write(client, addr, reg_data, data_type);
+ if (rc < 0)
+ CDBG("%s write fail\n", __func__);
+ }
+ return rc;
+}
int32_t msm_camera_i2c_compare(struct msm_camera_i2c_client *client,
uint16_t addr, uint16_t data,
@@ -291,6 +316,13 @@
reg_conf_tbl->reg_data,
MSM_CAMERA_I2C_WORD_DATA, 0);
break;
+ case MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA:
+ rc = msm_camera_i2c_set_write_mask_data(client,
+ reg_conf_tbl->reg_addr,
+ reg_conf_tbl->reg_data,
+ reg_conf_tbl->mask,
+ MSM_CAMERA_I2C_BYTE_DATA);
+ break;
default:
pr_err("%s: Unsupport data type: %d\n",
__func__, dt);
@@ -402,7 +434,6 @@
if (i >= conf->num_index)
return rc;
-
rc = msm_sensor_write_all_conf_array(client,
&conf->conf[i*conf->num_conf], conf->num_conf);
@@ -426,4 +457,3 @@
return rc;
}
-
diff --git a/drivers/media/video/msm/io/msm_camera_i2c.h b/drivers/media/video/msm/io/msm_camera_i2c.h
index 2fbf5ca..01c8259 100644
--- a/drivers/media/video/msm/io/msm_camera_i2c.h
+++ b/drivers/media/video/msm/io/msm_camera_i2c.h
@@ -42,6 +42,7 @@
MSM_CAMERA_I2C_UNSET_BYTE_MASK,
MSM_CAMERA_I2C_SET_WORD_MASK,
MSM_CAMERA_I2C_UNSET_WORD_MASK,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA,
};
enum msm_camera_i2c_cmd_type {
@@ -52,6 +53,7 @@
struct msm_camera_i2c_reg_conf {
uint16_t reg_addr;
uint16_t reg_data;
+ int16_t mask;
enum msm_camera_i2c_data_type dt;
enum msm_camera_i2c_cmd_type cmd_type;
};
diff --git a/drivers/media/video/msm/sensors/msm_sensor.c b/drivers/media/video/msm/sensors/msm_sensor.c
index 5b9eb31..76981b0 100644
--- a/drivers/media/video/msm/sensors/msm_sensor.c
+++ b/drivers/media/video/msm/sensors/msm_sensor.c
@@ -770,8 +770,7 @@
struct v4l2_control *ctrl)
{
int rc = -1, i = 0;
- struct msm_sensor_ctrl_t *s_ctrl =
- (struct msm_sensor_ctrl_t *) sd->dev_priv;
+ struct msm_sensor_ctrl_t *s_ctrl = get_sctrl(sd);
struct msm_sensor_v4l2_ctrl_info_t *v4l2_ctrl =
s_ctrl->msm_sensor_v4l2_ctrl_info;
@@ -779,10 +778,10 @@
CDBG("%d\n", ctrl->id);
if (v4l2_ctrl == NULL)
return rc;
-
for (i = 0; i < s_ctrl->num_v4l2_ctrl; i++) {
if (v4l2_ctrl[i].ctrl_id == ctrl->id) {
if (v4l2_ctrl[i].s_v4l2_ctrl != NULL) {
+ CDBG("\n calling msm_sensor_s_ctrl_by_enum\n");
rc = v4l2_ctrl[i].s_v4l2_ctrl(
s_ctrl,
&s_ctrl->msm_sensor_v4l2_ctrl_info[i],
diff --git a/drivers/media/video/msm/sensors/msm_sensor.h b/drivers/media/video/msm/sensors/msm_sensor.h
index c5fbea2..7ade827 100644
--- a/drivers/media/video/msm/sensors/msm_sensor.h
+++ b/drivers/media/video/msm/sensors/msm_sensor.h
@@ -84,6 +84,7 @@
struct msm_camera_i2c_conf_array *init_settings;
uint8_t init_size;
struct msm_camera_i2c_conf_array *mode_settings;
+ struct msm_camera_i2c_conf_array *no_effect_settings;
struct msm_sensor_output_info_t *output_settings;
uint8_t num_conf;
};
diff --git a/drivers/media/video/msm/sensors/ov7692_v4l2.c b/drivers/media/video/msm/sensors/ov7692_v4l2.c
index e7970d5..8c94e3b 100644
--- a/drivers/media/video/msm/sensors/ov7692_v4l2.c
+++ b/drivers/media/video/msm/sensors/ov7692_v4l2.c
@@ -17,6 +17,10 @@
DEFINE_MUTEX(ov7692_mut);
static struct msm_sensor_ctrl_t ov7692_s_ctrl;
+static int effect_value = CAMERA_EFFECT_OFF;
+static unsigned int SAT_U = 0x80; /* DEFAULT SATURATION VALUES*/
+static unsigned int SAT_V = 0x80; /* DEFAULT SATURATION VALUES*/
+
static struct msm_camera_i2c_reg_conf ov7692_start_settings[] = {
{0x0e, 0x00},
};
@@ -168,6 +172,58 @@
ARRAY_SIZE(ov7692_full_settings), 0, MSM_CAMERA_I2C_BYTE_DATA},
};
+static struct msm_camera_i2c_reg_conf ov7692_saturation[][4] = {
+ {{0x81, 0x33, 0xCC}, {0xd8, 0x00, 0x00}, {0xd9, 0x00, 0x00},
+ {0xd2, 0x02, 0x00},}, /* SATURATION LEVEL0*/
+ {{0x81, 0x33, 0xCC}, {0xd8, 0x10, 0x00}, {0xd9, 0x10, 0x00},
+ {0xd2, 0x02, 0x00},}, /* SATURATION LEVEL1*/
+ {{0x81, 0x33, 0xCC}, {0xd8, 0x20, 0x00}, {0xd9, 0x20, 0x00},
+ {0xd2, 0x02, 0x00},}, /* SATURATION LEVEL2*/
+ {{0x81, 0x33, 0xCC}, {0xd8, 0x30, 0x00}, {0xd9, 0x30, 0x00},
+ {0xd2, 0x02, 0x00},}, /* SATURATION LEVEL3*/
+ {{0x81, 0x33, 0xCC}, {0xd8, 0x40, 0x00}, {0xd9, 0x40, 0x00},
+ {0xd2, 0x02, 0x00},}, /* SATURATION LEVEL4*/
+ {{0x81, 0x33, 0xCC}, {0xd8, 0x50, 0x00}, {0xd9, 0x50, 0x00},
+ {0xd2, 0x02, 0x00},}, /* SATURATION LEVEL5*/
+ {{0x81, 0x33, 0xCC}, {0xd8, 0x60, 0x00}, {0xd9, 0x60, 0x00},
+ {0xd2, 0x02, 0x00},}, /* SATURATION LEVEL6*/
+ {{0x81, 0x33, 0xCC}, {0xd8, 0x70, 0x00}, {0xd9, 0x70, 0x00},
+ {0xd2, 0x02, 0x00},}, /* SATURATION LEVEL7*/
+ {{0x81, 0x33, 0xCC}, {0xd8, 0x80, 0x00}, {0xd9, 0x80, 0x00},
+ {0xd2, 0x02, 0x00},}, /* SATURATION LEVEL8*/
+};
+static struct msm_camera_i2c_conf_array ov7692_saturation_confs[][1] = {
+ {{ov7692_saturation[0], ARRAY_SIZE(ov7692_saturation[0]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_saturation[1], ARRAY_SIZE(ov7692_saturation[1]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_saturation[2], ARRAY_SIZE(ov7692_saturation[2]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_saturation[3], ARRAY_SIZE(ov7692_saturation[3]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_saturation[4], ARRAY_SIZE(ov7692_saturation[4]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_saturation[5], ARRAY_SIZE(ov7692_saturation[5]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_saturation[6], ARRAY_SIZE(ov7692_saturation[6]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_saturation[7], ARRAY_SIZE(ov7692_saturation[7]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_saturation[8], ARRAY_SIZE(ov7692_saturation[8]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+};
+
+static int ov7692_saturation_enum_map[] = {
+ MSM_V4L2_SATURATION_L0,
+ MSM_V4L2_SATURATION_L1,
+ MSM_V4L2_SATURATION_L2,
+ MSM_V4L2_SATURATION_L3,
+ MSM_V4L2_SATURATION_L4,
+ MSM_V4L2_SATURATION_L5,
+ MSM_V4L2_SATURATION_L6,
+ MSM_V4L2_SATURATION_L7,
+ MSM_V4L2_SATURATION_L8,
+};
static struct msm_sensor_output_info_t ov7692_dimensions[] = {
{
.x_output = 0x280,
@@ -180,6 +236,562 @@
},
};
+static struct msm_camera_i2c_enum_conf_array ov7692_saturation_enum_confs = {
+ .conf = &ov7692_saturation_confs[0][0],
+ .conf_enum = ov7692_saturation_enum_map,
+ .num_enum = ARRAY_SIZE(ov7692_saturation_enum_map),
+ .num_index = ARRAY_SIZE(ov7692_saturation_confs),
+ .num_conf = ARRAY_SIZE(ov7692_saturation_confs[0]),
+ .data_type = MSM_CAMERA_I2C_BYTE_DATA,
+};
+
+static struct msm_camera_i2c_reg_conf ov7692_contrast[][16] = {
+ {{0xb2, 0x29}, {0xa3, 0x55}, {0xa4, 0x5b}, {0xa5, 0x67}, {0xa6, 0x7e},
+ {0xa7, 0x89}, {0xa8, 0x93}, {0xa9, 0x9c}, {0xaa, 0xa4},
+ {0xab, 0xac}, {0xac, 0xb3}, {0xad, 0xbe}, {0xae, 0xc7},
+ {0xaf, 0xd5}, {0xb0, 0xdd}, {0xb1, 0xe1},}, /* CONTRAST L0*/
+ {{0xb2, 0x20}, {0xa3, 0x43}, {0xa4, 0x4a}, {0xa5, 0x58}, {0xa6, 0x73},
+ {0xa7, 0x80}, {0xa8, 0x8b}, {0xa9, 0x96}, {0xaa, 0x9f},
+ {0xab, 0xa8}, {0xac, 0xb1}, {0xad, 0xbe}, {0xae, 0xc9},
+ {0xaf, 0xd8}, {0xb0, 0xe2}, {0xb1, 0xe8},}, /* CONTRAST L1*/
+ {{0xb2, 0x18}, {0xa3, 0x31}, {0xa4, 0x39}, {0xa5, 0x4a}, {0xa6, 0x68},
+ {0xa7, 0x77}, {0xa8, 0x84}, {0xa9, 0x90}, {0xaa, 0x9b},
+ {0xab, 0xa5}, {0xac, 0xaf}, {0xad, 0xbe}, {0xae, 0xca},
+ {0xaf, 0xdc}, {0xb0, 0xe7}, {0xb1, 0xee},}, /* CONTRAST L2*/
+ {{0xb2, 0x10}, {0xa3, 0x1f}, {0xa4, 0x28}, {0xa5, 0x3b}, {0xa6, 0x5d},
+ {0xa7, 0x6e}, {0xa8, 0x7d}, {0xa9, 0x8a}, {0xaa, 0x96},
+ {0xab, 0xa2}, {0xac, 0xad}, {0xad, 0xbe}, {0xae, 0xcc},
+ {0xaf, 0xe0}, {0xb0, 0xed}, {0xb1, 0xf4},}, /* CONTRAST L3*/
+ {{0xb2, 0x6}, {0xa3, 0xb}, {0xa4, 0x15}, {0xa5, 0x2a}, {0xa6, 0x51},
+ {0xa7, 0x63}, {0xa8, 0x74}, {0xa9, 0x83}, {0xaa, 0x91},
+ {0xab, 0x9e}, {0xac, 0xaa}, {0xad, 0xbe}, {0xae, 0xce},
+ {0xaf, 0xe5}, {0xb0, 0xf3}, {0xb1, 0xfb},}, /* CONTRAST L4*/
+ {{0xb2, 0xc}, {0xa3, 0x4}, {0xa4, 0xc}, {0xa5, 0x1f}, {0xa6, 0x45},
+ {0xa7, 0x58}, {0xa8, 0x6b}, {0xa9, 0x7c}, {0xaa, 0x8d},
+ {0xab, 0x9d}, {0xac, 0xac}, {0xad, 0xc3}, {0xae, 0xd2},
+ {0xaf, 0xe8}, {0xb0, 0xf2}, {0xb1, 0xf7},}, /* CONTRAST L5*/
+ {{0xb2, 0x1}, {0xa3, 0x2}, {0xa4, 0x9}, {0xa5, 0x1a}, {0xa6, 0x3e},
+ {0xa7, 0x4a}, {0xa8, 0x59}, {0xa9, 0x6a}, {0xaa, 0x79},
+ {0xab, 0x8e}, {0xac, 0xa4}, {0xad, 0xc1}, {0xae, 0xdb},
+ {0xaf, 0xf4}, {0xb0, 0xff}, {0xb1, 0xff},}, /* CONTRAST L6*/
+ {{0xb2, 0xc}, {0xa3, 0x4}, {0xa4, 0x8}, {0xa5, 0x17}, {0xa6, 0x27},
+ {0xa7, 0x3d}, {0xa8, 0x54}, {0xa9, 0x60}, {0xaa, 0x77},
+ {0xab, 0x85}, {0xac, 0xa4}, {0xad, 0xc6}, {0xae, 0xd2},
+ {0xaf, 0xe9}, {0xb0, 0xf0}, {0xb1, 0xf7},}, /* CONTRAST L7*/
+ {{0xb2, 0x1}, {0xa3, 0x4}, {0xa4, 0x4}, {0xa5, 0x7}, {0xa6, 0xb},
+ {0xa7, 0x17}, {0xa8, 0x2a}, {0xa9, 0x41}, {0xaa, 0x59},
+ {0xab, 0x6b}, {0xac, 0x8b}, {0xad, 0xb1}, {0xae, 0xd2},
+ {0xaf, 0xea}, {0xb0, 0xf4}, {0xb1, 0xff},}, /* CONTRAST L8*/
+};
+
+static struct msm_camera_i2c_conf_array ov7692_contrast_confs[][1] = {
+ {{ov7692_contrast[0], ARRAY_SIZE(ov7692_contrast[0]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_contrast[1], ARRAY_SIZE(ov7692_contrast[1]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_contrast[2], ARRAY_SIZE(ov7692_contrast[2]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_contrast[3], ARRAY_SIZE(ov7692_contrast[3]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_contrast[4], ARRAY_SIZE(ov7692_contrast[4]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_contrast[5], ARRAY_SIZE(ov7692_contrast[5]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_contrast[6], ARRAY_SIZE(ov7692_contrast[6]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_contrast[7], ARRAY_SIZE(ov7692_contrast[7]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_contrast[8], ARRAY_SIZE(ov7692_contrast[8]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+};
+
+
+static int ov7692_contrast_enum_map[] = {
+ MSM_V4L2_CONTRAST_L0,
+ MSM_V4L2_CONTRAST_L1,
+ MSM_V4L2_CONTRAST_L2,
+ MSM_V4L2_CONTRAST_L3,
+ MSM_V4L2_CONTRAST_L4,
+ MSM_V4L2_CONTRAST_L5,
+ MSM_V4L2_CONTRAST_L6,
+ MSM_V4L2_CONTRAST_L7,
+ MSM_V4L2_CONTRAST_L8,
+};
+
+static struct msm_camera_i2c_enum_conf_array ov7692_contrast_enum_confs = {
+ .conf = &ov7692_contrast_confs[0][0],
+ .conf_enum = ov7692_contrast_enum_map,
+ .num_enum = ARRAY_SIZE(ov7692_contrast_enum_map),
+ .num_index = ARRAY_SIZE(ov7692_contrast_confs),
+ .num_conf = ARRAY_SIZE(ov7692_contrast_confs[0]),
+ .data_type = MSM_CAMERA_I2C_BYTE_DATA,
+};
+static struct msm_camera_i2c_reg_conf ov7692_sharpness[][2] = {
+ {{0xb4, 0x20, 0xDF}, {0xb6, 0x00, 0xE0},}, /* SHARPNESS LEVEL 0*/
+ {{0xb4, 0x20, 0xDF}, {0xb6, 0x01, 0xE0},}, /* SHARPNESS LEVEL 1*/
+ {{0xb4, 0x00, 0xDF}, {0xb6, 0x00, 0xE0},}, /* SHARPNESS LEVEL 2*/
+ {{0xb4, 0x20, 0xDF}, {0xb6, 0x66, 0xE0},}, /* SHARPNESS LEVEL 3*/
+ {{0xb4, 0x20, 0xDF}, {0xb6, 0x99, 0xE0},}, /* SHARPNESS LEVEL 4*/
+ {{0xb4, 0x20, 0xDF}, {0xb6, 0xcc, 0xE0},}, /* SHARPNESS LEVEL 5*/
+};
+
+static struct msm_camera_i2c_conf_array ov7692_sharpness_confs[][1] = {
+ {{ov7692_sharpness[0], ARRAY_SIZE(ov7692_sharpness[0]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_sharpness[1], ARRAY_SIZE(ov7692_sharpness[1]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_sharpness[2], ARRAY_SIZE(ov7692_sharpness[2]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_sharpness[3], ARRAY_SIZE(ov7692_sharpness[3]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_sharpness[4], ARRAY_SIZE(ov7692_sharpness[4]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_sharpness[5], ARRAY_SIZE(ov7692_sharpness[5]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+};
+
+static int ov7692_sharpness_enum_map[] = {
+ MSM_V4L2_SHARPNESS_L0,
+ MSM_V4L2_SHARPNESS_L1,
+ MSM_V4L2_SHARPNESS_L2,
+ MSM_V4L2_SHARPNESS_L3,
+ MSM_V4L2_SHARPNESS_L4,
+ MSM_V4L2_SHARPNESS_L5,
+};
+
+static struct msm_camera_i2c_enum_conf_array ov7692_sharpness_enum_confs = {
+ .conf = &ov7692_sharpness_confs[0][0],
+ .conf_enum = ov7692_sharpness_enum_map,
+ .num_enum = ARRAY_SIZE(ov7692_sharpness_enum_map),
+ .num_index = ARRAY_SIZE(ov7692_sharpness_confs),
+ .num_conf = ARRAY_SIZE(ov7692_sharpness_confs[0]),
+ .data_type = MSM_CAMERA_I2C_BYTE_DATA,
+};
+
+static struct msm_camera_i2c_reg_conf ov7692_exposure[][3] = {
+ {{0x24, 0x50}, {0x25, 0x40}, {0x26, 0xa2},}, /*EXPOSURECOMPENSATIONN2*/
+ {{0x24, 0x70}, {0x25, 0x60}, {0x26, 0xa2},}, /*EXPOSURECOMPENSATIONN1*/
+ {{0x24, 0x86}, {0x25, 0x76}, {0x26, 0xb3},}, /*EXPOSURECOMPENSATIOND*/
+ {{0x24, 0xa8}, {0x25, 0xa0}, {0x26, 0xc4},}, /*EXPOSURECOMPENSATIONp1*/
+ {{0x24, 0xc0}, {0x25, 0xb8}, {0x26, 0xe6},}, /*EXPOSURECOMPENSATIONP2*/
+};
+
+static struct msm_camera_i2c_conf_array ov7692_exposure_confs[][1] = {
+ {{ov7692_exposure[0], ARRAY_SIZE(ov7692_exposure[0]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_exposure[1], ARRAY_SIZE(ov7692_exposure[1]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_exposure[2], ARRAY_SIZE(ov7692_exposure[2]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_exposure[3], ARRAY_SIZE(ov7692_exposure[3]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_exposure[4], ARRAY_SIZE(ov7692_exposure[4]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+};
+
+static int ov7692_exposure_enum_map[] = {
+ MSM_V4L2_EXPOSURE_N2,
+ MSM_V4L2_EXPOSURE_N1,
+ MSM_V4L2_EXPOSURE_D,
+ MSM_V4L2_EXPOSURE_P1,
+ MSM_V4L2_EXPOSURE_P2,
+};
+
+static struct msm_camera_i2c_enum_conf_array ov7692_exposure_enum_confs = {
+ .conf = &ov7692_exposure_confs[0][0],
+ .conf_enum = ov7692_exposure_enum_map,
+ .num_enum = ARRAY_SIZE(ov7692_exposure_enum_map),
+ .num_index = ARRAY_SIZE(ov7692_exposure_confs),
+ .num_conf = ARRAY_SIZE(ov7692_exposure_confs[0]),
+ .data_type = MSM_CAMERA_I2C_BYTE_DATA,
+};
+
+static struct msm_camera_i2c_reg_conf ov7692_iso[][1] = {
+ {{0x14, 0x20, 0x8F},}, /*ISO_AUTO*/
+ {{0x14, 0x20, 0x8F},}, /*ISO_DEBLUR*/
+ {{0x14, 0x00, 0x8F},}, /*ISO_100*/
+ {{0x14, 0x10, 0x8F},}, /*ISO_200*/
+ {{0x14, 0x20, 0x8F},}, /*ISO_400*/
+ {{0x14, 0x30, 0x8F},}, /*ISO_800*/
+ {{0x14, 0x40, 0x8F},}, /*ISO_1600*/
+};
+
+
+static struct msm_camera_i2c_conf_array ov7692_iso_confs[][1] = {
+ {{ov7692_iso[0], ARRAY_SIZE(ov7692_iso[0]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_iso[1], ARRAY_SIZE(ov7692_iso[1]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_iso[2], ARRAY_SIZE(ov7692_iso[2]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_iso[3], ARRAY_SIZE(ov7692_iso[3]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_iso[4], ARRAY_SIZE(ov7692_iso[4]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_iso[5], ARRAY_SIZE(ov7692_iso[5]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+};
+
+static int ov7692_iso_enum_map[] = {
+ MSM_V4L2_ISO_AUTO ,
+ MSM_V4L2_ISO_DEBLUR,
+ MSM_V4L2_ISO_100,
+ MSM_V4L2_ISO_200,
+ MSM_V4L2_ISO_400,
+ MSM_V4L2_ISO_800,
+ MSM_V4L2_ISO_1600,
+};
+
+
+static struct msm_camera_i2c_enum_conf_array ov7692_iso_enum_confs = {
+ .conf = &ov7692_iso_confs[0][0],
+ .conf_enum = ov7692_iso_enum_map,
+ .num_enum = ARRAY_SIZE(ov7692_iso_enum_map),
+ .num_index = ARRAY_SIZE(ov7692_iso_confs),
+ .num_conf = ARRAY_SIZE(ov7692_iso_confs[0]),
+ .data_type = MSM_CAMERA_I2C_BYTE_DATA,
+};
+
+static struct msm_camera_i2c_reg_conf ov7692_no_effect[] = {
+ {0x81, 0x00, 0xDF},
+ {0x28, 0x00,},
+ {0xd2, 0x00,},
+ {0xda, 0x80,},
+ {0xdb, 0x80,},
+};
+
+static struct msm_camera_i2c_conf_array ov7692_no_effect_confs[] = {
+ {&ov7692_no_effect[0],
+ ARRAY_SIZE(ov7692_no_effect), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},
+};
+
+static struct msm_camera_i2c_reg_conf ov7692_special_effect[][5] = {
+ {{0x81, 0x20, 0xDF}, {0x28, 0x00,}, {0xd2, 0x18,}, {0xda, 0x80,},
+ {0xdb, 0x80,},}, /*for special effect OFF*/
+ {{0x81, 0x20, 0xDF}, {0x28, 0x00,}, {0xd2, 0x18,}, {0xda, 0x80,},
+ {0xdb, 0x80,},}, /*for special effect MONO*/
+ {{0x81, 0x20, 0xDF}, {0x28, 0x80,}, {0xd2, 0x40,}, {0xda, 0x80,},
+ {0xdb, 0x80,},}, /*for special efefct Negative*/
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /*Solarize is not supported by sensor*/
+ {{0x81, 0x20, 0xDF}, {0x28, 0x00,}, {0xd2, 0x18,}, {0xda, 0x40,},
+ {0xdb, 0xa0,},}, /*for sepia*/
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /* Posteraize not supported */
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /* White board not supported*/
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /*Blackboard not supported*/
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /*Aqua not supported*/
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /*Emboss not supported */
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /*sketch not supported*/
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /*Neon not supported*/
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /*MAX value*/
+};
+
+static struct msm_camera_i2c_conf_array ov7692_special_effect_confs[][1] = {
+ {{ov7692_special_effect[0], ARRAY_SIZE(ov7692_special_effect[0]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[1], ARRAY_SIZE(ov7692_special_effect[1]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[2], ARRAY_SIZE(ov7692_special_effect[2]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[3], ARRAY_SIZE(ov7692_special_effect[3]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[4], ARRAY_SIZE(ov7692_special_effect[4]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[5], ARRAY_SIZE(ov7692_special_effect[5]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[6], ARRAY_SIZE(ov7692_special_effect[6]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[7], ARRAY_SIZE(ov7692_special_effect[7]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[8], ARRAY_SIZE(ov7692_special_effect[8]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[9], ARRAY_SIZE(ov7692_special_effect[9]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[10], ARRAY_SIZE(ov7692_special_effect[10]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[11], ARRAY_SIZE(ov7692_special_effect[11]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_special_effect[12], ARRAY_SIZE(ov7692_special_effect[12]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+};
+
+static int ov7692_special_effect_enum_map[] = {
+ MSM_V4L2_EFFECT_OFF,
+ MSM_V4L2_EFFECT_MONO,
+ MSM_V4L2_EFFECT_NEGATIVE,
+ MSM_V4L2_EFFECT_SOLARIZE,
+ MSM_V4L2_EFFECT_SEPIA,
+ MSM_V4L2_EFFECT_POSTERAIZE,
+ MSM_V4L2_EFFECT_WHITEBOARD,
+ MSM_V4L2_EFFECT_BLACKBOARD,
+ MSM_V4L2_EFFECT_AQUA,
+ MSM_V4L2_EFFECT_EMBOSS,
+ MSM_V4L2_EFFECT_SKETCH,
+ MSM_V4L2_EFFECT_NEON,
+ MSM_V4L2_EFFECT_MAX,
+};
+
+static struct msm_camera_i2c_enum_conf_array
+ ov7692_special_effect_enum_confs = {
+ .conf = &ov7692_special_effect_confs[0][0],
+ .conf_enum = ov7692_special_effect_enum_map,
+ .num_enum = ARRAY_SIZE(ov7692_special_effect_enum_map),
+ .num_index = ARRAY_SIZE(ov7692_special_effect_confs),
+ .num_conf = ARRAY_SIZE(ov7692_special_effect_confs[0]),
+ .data_type = MSM_CAMERA_I2C_BYTE_DATA,
+};
+
+static struct msm_camera_i2c_reg_conf ov7692_antibanding[][2] = {
+ {{0x13, 0x20, 0xDF}, {0x14, 0x16, 0xE8},}, /*ANTIBANDING 60HZ*/
+ {{0x13, 0x20, 0xDF}, {0x14, 0x17, 0xE8},}, /*ANTIBANDING 50HZ*/
+ {{0x13, 0x20, 0xDF}, {0x14, 0x14, 0xE8},}, /* ANTIBANDING AUTO*/
+};
+
+
+static struct msm_camera_i2c_conf_array ov7692_antibanding_confs[][1] = {
+ {{ov7692_antibanding[0], ARRAY_SIZE(ov7692_antibanding[0]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_antibanding[1], ARRAY_SIZE(ov7692_antibanding[1]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_antibanding[2], ARRAY_SIZE(ov7692_antibanding[2]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+};
+
+static int ov7692_antibanding_enum_map[] = {
+ MSM_V4L2_POWER_LINE_60HZ,
+ MSM_V4L2_POWER_LINE_50HZ,
+ MSM_V4L2_POWER_LINE_AUTO,
+};
+
+
+static struct msm_camera_i2c_enum_conf_array ov7692_antibanding_enum_confs = {
+ .conf = &ov7692_antibanding_confs[0][0],
+ .conf_enum = ov7692_antibanding_enum_map,
+ .num_enum = ARRAY_SIZE(ov7692_antibanding_enum_map),
+ .num_index = ARRAY_SIZE(ov7692_antibanding_confs),
+ .num_conf = ARRAY_SIZE(ov7692_antibanding_confs[0]),
+ .data_type = MSM_CAMERA_I2C_BYTE_DATA,
+};
+
+static struct msm_camera_i2c_reg_conf ov7692_wb_oem[][4] = {
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},},/*WHITEBALNACE OFF*/
+ {{0x13, 0xf7}, {0x15, 0x00},}, /*WHITEBALNACE AUTO*/
+ {{0x13, 0xf5}, {0x01, 0x56}, {0x02, 0x50},
+ {0x15, 0x00},}, /*WHITEBALNACE CUSTOM*/
+ {{0x13, 0xf5}, {0x01, 0x66}, {0x02, 0x40},
+ {0x15, 0x00},}, /*INCANDISCENT*/
+ {{-1, -1, -1}, {-1, -1, -1}, {-1, -1, -1},
+ {-1, -1, -1},}, /*FLOURESECT NOT SUPPORTED */
+ {{0x13, 0xf5}, {0x01, 0x43}, {0x02, 0x5d},
+ {0x15, 0x00},}, /*DAYLIGHT*/
+ {{0x13, 0xf5}, {0x01, 0x48}, {0x02, 0x63},
+ {0x15, 0x00},}, /*CLOUDY*/
+};
+
+static struct msm_camera_i2c_conf_array ov7692_wb_oem_confs[][1] = {
+ {{ov7692_wb_oem[0], ARRAY_SIZE(ov7692_wb_oem[0]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_wb_oem[1], ARRAY_SIZE(ov7692_wb_oem[1]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_wb_oem[2], ARRAY_SIZE(ov7692_wb_oem[2]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_wb_oem[3], ARRAY_SIZE(ov7692_wb_oem[3]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_wb_oem[4], ARRAY_SIZE(ov7692_wb_oem[4]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_wb_oem[5], ARRAY_SIZE(ov7692_wb_oem[5]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+ {{ov7692_wb_oem[6], ARRAY_SIZE(ov7692_wb_oem[6]), 0,
+ MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA},},
+};
+
+static int ov7692_wb_oem_enum_map[] = {
+ MSM_V4L2_WB_OFF,
+ MSM_V4L2_WB_AUTO ,
+ MSM_V4L2_WB_CUSTOM,
+ MSM_V4L2_WB_INCANDESCENT,
+ MSM_V4L2_WB_FLUORESCENT,
+ MSM_V4L2_WB_DAYLIGHT,
+ MSM_V4L2_WB_CLOUDY_DAYLIGHT,
+};
+
+static struct msm_camera_i2c_enum_conf_array ov7692_wb_oem_enum_confs = {
+ .conf = &ov7692_wb_oem_confs[0][0],
+ .conf_enum = ov7692_wb_oem_enum_map,
+ .num_enum = ARRAY_SIZE(ov7692_wb_oem_enum_map),
+ .num_index = ARRAY_SIZE(ov7692_wb_oem_confs),
+ .num_conf = ARRAY_SIZE(ov7692_wb_oem_confs[0]),
+ .data_type = MSM_CAMERA_I2C_BYTE_DATA,
+};
+
+
+int ov7692_saturation_msm_sensor_s_ctrl_by_enum(
+ struct msm_sensor_ctrl_t *s_ctrl,
+ struct msm_sensor_v4l2_ctrl_info_t *ctrl_info, int value)
+{
+ int rc = 0;
+ if (effect_value == CAMERA_EFFECT_OFF) {
+ rc = msm_sensor_write_enum_conf_array(
+ s_ctrl->sensor_i2c_client,
+ ctrl_info->enum_cfg_settings, value);
+ }
+ if (value <= MSM_V4L2_SATURATION_L8)
+ SAT_U = SAT_V = value * 0x10;
+ CDBG("--CAMERA-- %s ...(End)\n", __func__);
+ return rc;
+}
+
+
+int ov7692_contrast_msm_sensor_s_ctrl_by_enum(
+ struct msm_sensor_ctrl_t *s_ctrl,
+ struct msm_sensor_v4l2_ctrl_info_t *ctrl_info, int value)
+{
+ int rc = 0;
+ if (effect_value == CAMERA_EFFECT_OFF) {
+ rc = msm_sensor_write_enum_conf_array(
+ s_ctrl->sensor_i2c_client,
+ ctrl_info->enum_cfg_settings, value);
+ }
+ return rc;
+}
+
+int ov7692_sharpness_msm_sensor_s_ctrl_by_enum(
+ struct msm_sensor_ctrl_t *s_ctrl,
+ struct msm_sensor_v4l2_ctrl_info_t *ctrl_info, int value)
+{
+ int rc = 0;
+ if (effect_value == CAMERA_EFFECT_OFF) {
+ rc = msm_sensor_write_enum_conf_array(
+ s_ctrl->sensor_i2c_client,
+ ctrl_info->enum_cfg_settings, value);
+ }
+ return rc;
+}
+
+int ov7692_effect_msm_sensor_s_ctrl_by_enum(struct msm_sensor_ctrl_t *s_ctrl,
+ struct msm_sensor_v4l2_ctrl_info_t *ctrl_info, int value)
+{
+ int rc = 0;
+ effect_value = value;
+ if (effect_value == CAMERA_EFFECT_OFF) {
+ rc = msm_sensor_write_conf_array(
+ s_ctrl->sensor_i2c_client,
+ s_ctrl->msm_sensor_reg->no_effect_settings, 0);
+ if (rc < 0) {
+ CDBG("write faield\n");
+ return rc;
+ }
+ msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0xda, SAT_U,
+ MSM_CAMERA_I2C_BYTE_DATA);
+ msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0xdb, SAT_V,
+ MSM_CAMERA_I2C_BYTE_DATA);
+ } else {
+ rc = msm_sensor_write_enum_conf_array(
+ s_ctrl->sensor_i2c_client,
+ ctrl_info->enum_cfg_settings, value);
+ }
+ return rc;
+}
+
+int ov7692_antibanding_msm_sensor_s_ctrl_by_enum(
+ struct msm_sensor_ctrl_t *s_ctrl,
+ struct msm_sensor_v4l2_ctrl_info_t *ctrl_info, int value)
+{
+ int rc = 0;
+ return rc;
+}
+
+int ov7692_msm_sensor_s_ctrl_by_enum(struct msm_sensor_ctrl_t *s_ctrl,
+ struct msm_sensor_v4l2_ctrl_info_t *ctrl_info, int value)
+{
+ int rc = 0;
+ rc = msm_sensor_write_enum_conf_array(
+ s_ctrl->sensor_i2c_client,
+ ctrl_info->enum_cfg_settings, value);
+ if (rc < 0) {
+ CDBG("write faield\n");
+ return rc;
+ }
+ return rc;
+}
+
+struct msm_sensor_v4l2_ctrl_info_t ov7692_v4l2_ctrl_info[] = {
+ {
+ .ctrl_id = V4L2_CID_SATURATION,
+ .min = MSM_V4L2_SATURATION_L0,
+ .max = MSM_V4L2_SATURATION_L8,
+ .step = 1,
+ .enum_cfg_settings = &ov7692_saturation_enum_confs,
+ .s_v4l2_ctrl = ov7692_saturation_msm_sensor_s_ctrl_by_enum,
+ },
+ {
+ .ctrl_id = V4L2_CID_CONTRAST,
+ .min = MSM_V4L2_CONTRAST_L0,
+ .max = MSM_V4L2_CONTRAST_L8,
+ .step = 1,
+ .enum_cfg_settings = &ov7692_contrast_enum_confs,
+ .s_v4l2_ctrl = ov7692_contrast_msm_sensor_s_ctrl_by_enum,
+ },
+ {
+ .ctrl_id = V4L2_CID_SHARPNESS,
+ .min = MSM_V4L2_SHARPNESS_L0,
+ .max = MSM_V4L2_SHARPNESS_L5,
+ .step = 1,
+ .enum_cfg_settings = &ov7692_sharpness_enum_confs,
+ .s_v4l2_ctrl = ov7692_sharpness_msm_sensor_s_ctrl_by_enum,
+ },
+ {
+ .ctrl_id = V4L2_CID_EXPOSURE,
+ .min = MSM_V4L2_EXPOSURE_N2,
+ .max = MSM_V4L2_EXPOSURE_P2,
+ .step = 1,
+ .enum_cfg_settings = &ov7692_exposure_enum_confs,
+ .s_v4l2_ctrl = ov7692_msm_sensor_s_ctrl_by_enum,
+ },
+ {
+ .ctrl_id = MSM_V4L2_PID_ISO,
+ .min = MSM_V4L2_ISO_AUTO,
+ .max = MSM_V4L2_ISO_1600,
+ .step = 1,
+ .enum_cfg_settings = &ov7692_iso_enum_confs,
+ .s_v4l2_ctrl = ov7692_msm_sensor_s_ctrl_by_enum,
+ },
+ {
+ .ctrl_id = V4L2_CID_SPECIAL_EFFECT,
+ .min = MSM_V4L2_EFFECT_OFF,
+ .max = MSM_V4L2_EFFECT_NEGATIVE,
+ .step = 1,
+ .enum_cfg_settings = &ov7692_special_effect_enum_confs,
+ .s_v4l2_ctrl = ov7692_effect_msm_sensor_s_ctrl_by_enum,
+ },
+ {
+ .ctrl_id = V4L2_CID_POWER_LINE_FREQUENCY,
+ .min = MSM_V4L2_POWER_LINE_60HZ,
+ .max = MSM_V4L2_POWER_LINE_AUTO,
+ .step = 1,
+ .enum_cfg_settings = &ov7692_antibanding_enum_confs,
+ .s_v4l2_ctrl = ov7692_antibanding_msm_sensor_s_ctrl_by_enum,
+ },
+ {
+ .ctrl_id = V4L2_CID_WHITE_BALANCE_TEMPERATURE,
+ .min = MSM_V4L2_WB_OFF,
+ .max = MSM_V4L2_WB_CLOUDY_DAYLIGHT,
+ .step = 1,
+ .enum_cfg_settings = &ov7692_wb_oem_enum_confs,
+ .s_v4l2_ctrl = ov7692_msm_sensor_s_ctrl_by_enum,
+ },
+
+};
static struct msm_camera_csi_params ov7692_csi_params = {
.data_format = CSI_8BIT,
@@ -234,6 +846,8 @@
}
static struct v4l2_subdev_core_ops ov7692_subdev_core_ops = {
+ .s_ctrl = msm_sensor_v4l2_s_ctrl,
+ .queryctrl = msm_sensor_v4l2_query_ctrl,
.ioctl = msm_sensor_subdev_ioctl,
.s_power = msm_sensor_power,
};
@@ -306,12 +920,15 @@
.init_settings = &ov7692_init_conf[0],
.init_size = ARRAY_SIZE(ov7692_init_conf),
.mode_settings = &ov7692_confs[0],
+ .no_effect_settings = &ov7692_no_effect_confs[0],
.output_settings = &ov7692_dimensions[0],
.num_conf = ARRAY_SIZE(ov7692_confs),
};
static struct msm_sensor_ctrl_t ov7692_s_ctrl = {
.msm_sensor_reg = &ov7692_regs,
+ .msm_sensor_v4l2_ctrl_info = ov7692_v4l2_ctrl_info,
+ .num_v4l2_ctrl = ARRAY_SIZE(ov7692_v4l2_ctrl_info),
.sensor_i2c_client = &ov7692_sensor_i2c_client,
.sensor_i2c_addr = 0x78,
.sensor_output_reg_addr = &ov7692_reg_addr,
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index c148b75..0cd570b 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -1274,6 +1274,8 @@
/* last CID + 1 */
#define V4L2_CID_LASTP1 (V4L2_CID_BASE+42)
+#define V4L2_CID_SPECIAL_EFFECT (V4L2_CID_BASE+43)
+/* Minimum number of buffer neede by the device */
/* MPEG-class control IDs defined by V4L2 */
#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
diff --git a/include/media/msm_camera.h b/include/media/msm_camera.h
index 8222b67..6d72470 100644
--- a/include/media/msm_camera.h
+++ b/include/media/msm_camera.h
@@ -916,6 +916,21 @@
MSM_V4L2_SATURATION_L10,
};
+enum msm_v4l2_contrast_level {
+ MSM_V4L2_CONTRAST_L0,
+ MSM_V4L2_CONTRAST_L1,
+ MSM_V4L2_CONTRAST_L2,
+ MSM_V4L2_CONTRAST_L3,
+ MSM_V4L2_CONTRAST_L4,
+ MSM_V4L2_CONTRAST_L5,
+ MSM_V4L2_CONTRAST_L6,
+ MSM_V4L2_CONTRAST_L7,
+ MSM_V4L2_CONTRAST_L8,
+ MSM_V4L2_CONTRAST_L9,
+ MSM_V4L2_CONTRAST_L10,
+};
+
+
enum msm_v4l2_exposure_level {
MSM_V4L2_EXPOSURE_N2,
MSM_V4L2_EXPOSURE_N1,
@@ -951,16 +966,29 @@
};
enum msm_v4l2_wb_mode {
- MSM_V4L2_WB_MIN_MINUS_1,
- MSM_V4L2_WB_AUTO = 1,
+ MSM_V4L2_WB_OFF,
+ MSM_V4L2_WB_AUTO ,
MSM_V4L2_WB_CUSTOM,
MSM_V4L2_WB_INCANDESCENT,
MSM_V4L2_WB_FLUORESCENT,
MSM_V4L2_WB_DAYLIGHT,
MSM_V4L2_WB_CLOUDY_DAYLIGHT,
- MSM_V4L2_WB_TWILIGHT,
- MSM_V4L2_WB_SHADE,
- MSM_V4L2_WB_OFF,
+};
+
+enum msm_v4l2_special_effect {
+ MSM_V4L2_EFFECT_OFF,
+ MSM_V4L2_EFFECT_MONO,
+ MSM_V4L2_EFFECT_NEGATIVE,
+ MSM_V4L2_EFFECT_SOLARIZE,
+ MSM_V4L2_EFFECT_SEPIA,
+ MSM_V4L2_EFFECT_POSTERAIZE,
+ MSM_V4L2_EFFECT_WHITEBOARD,
+ MSM_V4L2_EFFECT_BLACKBOARD,
+ MSM_V4L2_EFFECT_AQUA,
+ MSM_V4L2_EFFECT_EMBOSS,
+ MSM_V4L2_EFFECT_SKETCH,
+ MSM_V4L2_EFFECT_NEON,
+ MSM_V4L2_EFFECT_MAX,
};
enum msm_v4l2_power_line_frequency {