Merge "msm: ais: sensor: Fix turning clocks off during suspend"
This commit is contained in:
commit
0e811b3f2e
1 changed files with 55 additions and 41 deletions
|
@ -73,35 +73,41 @@ static int msm_sensor_suspend(struct device *dev)
|
|||
return -EFAULT;
|
||||
}
|
||||
|
||||
/* Turning on cci clock to retain previous state */
|
||||
if (!msm_camera_cci_power_up(s_ctrl->sensor_device_type,
|
||||
s_ctrl->sensor_i2c_client)) {
|
||||
s_ctrl->sensor_state = MSM_SENSOR_CCI_UP;
|
||||
}
|
||||
|
||||
if (s_ctrl->is_csid_tg_mode)
|
||||
return 0;
|
||||
|
||||
kfree(s_ctrl->stop_setting.reg_setting);
|
||||
s_ctrl->stop_setting.reg_setting = NULL;
|
||||
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) {
|
||||
if (s_ctrl->sensor_state == MSM_SENSOR_CCI_DOWN) {
|
||||
|
||||
/* Turning on cci clock to retain previous state */
|
||||
if (!msm_camera_cci_power_up(s_ctrl->sensor_device_type,
|
||||
s_ctrl->sensor_i2c_client)) {
|
||||
s_ctrl->sensor_state = MSM_SENSOR_CCI_UP;
|
||||
}
|
||||
|
||||
kfree(s_ctrl->stop_setting.reg_setting);
|
||||
s_ctrl->stop_setting.reg_setting = NULL;
|
||||
if (s_ctrl->func_tbl->sensor_power_down) {
|
||||
if (s_ctrl->sensordata->misc_regulator)
|
||||
msm_sensor_misc_regulator(s_ctrl, 0);
|
||||
|
||||
rc = s_ctrl->func_tbl->sensor_power_down(s_ctrl);
|
||||
if (rc < 0) {
|
||||
pr_err("%s:%d failed rc %d\n", __func__,
|
||||
__LINE__, rc);
|
||||
rc = -EFAULT;
|
||||
return rc;
|
||||
}
|
||||
s_ctrl->sensor_state = MSM_SENSOR_POWER_DOWN;
|
||||
} else {
|
||||
rc = -EFAULT;
|
||||
}
|
||||
} else if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) {
|
||||
pr_debug("just returning success since sensor is already off %d\n",
|
||||
s_ctrl->sensor_state);
|
||||
return 0;
|
||||
}
|
||||
if (s_ctrl->func_tbl->sensor_power_down) {
|
||||
if (s_ctrl->sensordata->misc_regulator)
|
||||
msm_sensor_misc_regulator(s_ctrl, 0);
|
||||
|
||||
rc = s_ctrl->func_tbl->sensor_power_down(s_ctrl);
|
||||
if (rc < 0) {
|
||||
pr_err("%s:%d failed rc %d\n", __func__,
|
||||
__LINE__, rc);
|
||||
rc = -EFAULT;
|
||||
return rc;
|
||||
}
|
||||
s_ctrl->sensor_state = MSM_SENSOR_POWER_DOWN;
|
||||
} else {
|
||||
pr_err("%s:%d invalid state\n", __func__,
|
||||
__LINE__);
|
||||
rc = -EFAULT;
|
||||
}
|
||||
|
||||
|
@ -123,33 +129,41 @@ static int msm_sensor_resume(struct device *dev)
|
|||
if (s_ctrl->is_csid_tg_mode)
|
||||
return 0;
|
||||
|
||||
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP) {
|
||||
pr_debug("just returning success since sensor is alreay on %d\n",
|
||||
s_ctrl->sensor_state);
|
||||
return 0;
|
||||
}
|
||||
if (s_ctrl->func_tbl->sensor_power_up) {
|
||||
if (s_ctrl->sensordata->misc_regulator)
|
||||
msm_sensor_misc_regulator(s_ctrl, 1);
|
||||
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) {
|
||||
|
||||
rc = s_ctrl->func_tbl->sensor_power_up(s_ctrl);
|
||||
if (rc < 0) {
|
||||
pr_err("%s:%d failed rc %d\n", __func__,
|
||||
__LINE__, rc);
|
||||
if (s_ctrl->func_tbl->sensor_power_up) {
|
||||
if (s_ctrl->sensordata->misc_regulator)
|
||||
msm_sensor_misc_regulator(s_ctrl, 1);
|
||||
|
||||
rc = s_ctrl->func_tbl->sensor_power_up(s_ctrl);
|
||||
if (rc < 0) {
|
||||
pr_err("%s:%d failed rc %d\n", __func__,
|
||||
__LINE__, rc);
|
||||
rc = -EFAULT;
|
||||
return rc;
|
||||
}
|
||||
s_ctrl->sensor_state = MSM_SENSOR_POWER_UP;
|
||||
CDBG("%s:%d sensor state %d\n", __func__, __LINE__,
|
||||
s_ctrl->sensor_state);
|
||||
} else {
|
||||
rc = -EFAULT;
|
||||
}
|
||||
s_ctrl->sensor_state = MSM_SENSOR_POWER_UP;
|
||||
CDBG("%s:%d sensor state %d\n", __func__, __LINE__,
|
||||
|
||||
/* Turning off cci clock to retain previous state */
|
||||
if (!msm_camera_cci_power_down(s_ctrl->sensor_device_type,
|
||||
s_ctrl->sensor_i2c_client)) {
|
||||
s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN;
|
||||
}
|
||||
} else if (s_ctrl->sensor_state == MSM_SENSOR_CCI_DOWN) {
|
||||
pr_debug("just returning success since sensor is already on %d\n",
|
||||
s_ctrl->sensor_state);
|
||||
rc = 0;
|
||||
} else {
|
||||
pr_err("%s:%d invalid state\n", __func__,
|
||||
__LINE__);
|
||||
rc = -EFAULT;
|
||||
}
|
||||
|
||||
/* Turning off cci clock to retain previous state */
|
||||
if (!msm_camera_cci_power_down(s_ctrl->sensor_device_type,
|
||||
s_ctrl->sensor_i2c_client)) {
|
||||
s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue