Merge "msm: ais: sensor: Fix the state check for i2c ops"
This commit is contained in:
commit
fd9828eea2
3 changed files with 104 additions and 10 deletions
|
@ -2012,7 +2012,7 @@ static void msm_isp_enqueue_tasklet_cmd(struct vfe_device *vfe_dev,
|
|||
MSM_VFE_TASKLETQ_SIZE;
|
||||
list_add_tail(&queue_cmd->list, &vfe_dev->tasklet_q);
|
||||
spin_unlock_irqrestore(&vfe_dev->tasklet_lock, flags);
|
||||
tasklet_schedule(&vfe_dev->vfe_tasklet);
|
||||
tasklet_hi_schedule(&vfe_dev->vfe_tasklet);
|
||||
}
|
||||
|
||||
irqreturn_t msm_isp_process_irq(int irq_num, void *data)
|
||||
|
|
|
@ -296,7 +296,8 @@ static void msm_sensor_stop_stream(struct msm_sensor_ctrl_t *s_ctrl)
|
|||
int32_t rc = 0;
|
||||
|
||||
mutex_lock(s_ctrl->msm_sensor_mutex);
|
||||
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP) {
|
||||
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP ||
|
||||
s_ctrl->sensor_state == MSM_SENSOR_CCI_UP) {
|
||||
s_ctrl->sensor_i2c_client->i2c_func_tbl->i2c_write_table(
|
||||
s_ctrl->sensor_i2c_client, &s_ctrl->stop_setting);
|
||||
kfree(s_ctrl->stop_setting.reg_setting);
|
||||
|
@ -511,7 +512,8 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) {
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
|
@ -588,6 +590,14 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
|
||||
read_config_ptr =
|
||||
(struct msm_camera_i2c_read_config *)
|
||||
compat_ptr(cdata->cfg.setting);
|
||||
|
@ -660,6 +670,14 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
|
||||
if (copy_from_user(&write_config32,
|
||||
(void __user *)compat_ptr(cdata->cfg.setting),
|
||||
sizeof(
|
||||
|
@ -766,7 +784,8 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) {
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
|
@ -852,7 +871,7 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
|
|||
|
||||
kfree(s_ctrl->stop_setting.reg_setting);
|
||||
s_ctrl->stop_setting.reg_setting = NULL;
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) {
|
||||
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
|
@ -879,6 +898,12 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_CCI_DOWN) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
rc = msm_camera_cci_power_up(s_ctrl->sensor_device_type,
|
||||
s_ctrl->sensor_i2c_client);
|
||||
if (rc < 0) {
|
||||
|
@ -886,11 +911,21 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
|
|||
__LINE__, rc);
|
||||
break;
|
||||
}
|
||||
s_ctrl->sensor_state = MSM_SENSOR_CCI_UP;
|
||||
CDBG("%s:%d sensor state %d\n", __func__, __LINE__,
|
||||
s_ctrl->sensor_state);
|
||||
break;
|
||||
case CFG_CCI_POWER_DOWN:
|
||||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
rc = msm_camera_cci_power_down(s_ctrl->sensor_device_type,
|
||||
s_ctrl->sensor_i2c_client);
|
||||
if (rc < 0) {
|
||||
|
@ -898,6 +933,9 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
|
|||
__LINE__, rc);
|
||||
break;
|
||||
}
|
||||
s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN;
|
||||
CDBG("%s:%d sensor state %d\n", __func__, __LINE__,
|
||||
s_ctrl->sensor_state);
|
||||
break;
|
||||
case CFG_SET_STOP_STREAM_SETTING: {
|
||||
struct msm_camera_i2c_reg_setting32 stop_setting32;
|
||||
|
@ -908,6 +946,14 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
|
||||
if (copy_from_user(&stop_setting32,
|
||||
(void __user *)compat_ptr((cdata->cfg.setting)),
|
||||
sizeof(struct msm_camera_i2c_reg_setting32))) {
|
||||
|
@ -1064,7 +1110,8 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp)
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) {
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
|
@ -1134,6 +1181,14 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp)
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
|
||||
read_config_ptr =
|
||||
(struct msm_camera_i2c_read_config *)cdata->cfg.setting;
|
||||
if (copy_from_user(&read_config, (void __user *)read_config_ptr,
|
||||
|
@ -1199,6 +1254,14 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp)
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
|
||||
if (copy_from_user(&write_config,
|
||||
(void __user *)cdata->cfg.setting,
|
||||
sizeof(struct msm_camera_i2c_array_write_config))) {
|
||||
|
@ -1282,7 +1345,8 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp)
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) {
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
|
@ -1364,7 +1428,7 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp)
|
|||
|
||||
kfree(s_ctrl->stop_setting.reg_setting);
|
||||
s_ctrl->stop_setting.reg_setting = NULL;
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) {
|
||||
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
|
@ -1392,6 +1456,12 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp)
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_CCI_DOWN) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
rc = msm_camera_cci_power_up(s_ctrl->sensor_device_type,
|
||||
s_ctrl->sensor_i2c_client);
|
||||
if (rc < 0) {
|
||||
|
@ -1399,12 +1469,22 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp)
|
|||
__LINE__, rc);
|
||||
break;
|
||||
}
|
||||
s_ctrl->sensor_state = MSM_SENSOR_CCI_UP;
|
||||
CDBG("%s:%d sensor state %d\n", __func__, __LINE__,
|
||||
s_ctrl->sensor_state);
|
||||
break;
|
||||
|
||||
case CFG_CCI_POWER_DOWN:
|
||||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
rc = msm_camera_cci_power_down(s_ctrl->sensor_device_type,
|
||||
s_ctrl->sensor_i2c_client);
|
||||
if (rc < 0) {
|
||||
|
@ -1412,6 +1492,9 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp)
|
|||
__LINE__, rc);
|
||||
break;
|
||||
}
|
||||
s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN;
|
||||
CDBG("%s:%d sensor state %d\n", __func__, __LINE__,
|
||||
s_ctrl->sensor_state);
|
||||
break;
|
||||
|
||||
case CFG_SET_STOP_STREAM_SETTING: {
|
||||
|
@ -1422,6 +1505,14 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp)
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
goto DONE;
|
||||
|
||||
if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP &&
|
||||
s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) {
|
||||
pr_err("%s:%d failed: invalid state %d\n", __func__,
|
||||
__LINE__, s_ctrl->sensor_state);
|
||||
rc = -EFAULT;
|
||||
break;
|
||||
}
|
||||
|
||||
if (copy_from_user(stop_setting,
|
||||
(void __user *)cdata->cfg.setting,
|
||||
sizeof(struct msm_camera_i2c_reg_setting))) {
|
||||
|
@ -1522,7 +1613,8 @@ static int msm_sensor_power(struct v4l2_subdev *sd, int on)
|
|||
struct msm_sensor_ctrl_t *s_ctrl = get_sctrl(sd);
|
||||
|
||||
mutex_lock(s_ctrl->msm_sensor_mutex);
|
||||
if (!on && s_ctrl->sensor_state == MSM_SENSOR_POWER_UP) {
|
||||
if (!on && (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP ||
|
||||
s_ctrl->sensor_state == MSM_SENSOR_CCI_UP)) {
|
||||
s_ctrl->func_tbl->sensor_power_down(s_ctrl);
|
||||
s_ctrl->sensor_state = MSM_SENSOR_POWER_DOWN;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
|
||||
/* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
|
@ -52,6 +52,8 @@ struct msm_sensor_ctrl_t;
|
|||
enum msm_sensor_state_t {
|
||||
MSM_SENSOR_POWER_DOWN,
|
||||
MSM_SENSOR_POWER_UP,
|
||||
MSM_SENSOR_CCI_DOWN,
|
||||
MSM_SENSOR_CCI_UP,
|
||||
};
|
||||
|
||||
struct msm_sensor_fn_t {
|
||||
|
|
Loading…
Add table
Reference in a new issue