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;
|
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)
|
if (s_ctrl->is_csid_tg_mode)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
kfree(s_ctrl->stop_setting.reg_setting);
|
if (s_ctrl->sensor_state == MSM_SENSOR_CCI_DOWN) {
|
||||||
s_ctrl->stop_setting.reg_setting = NULL;
|
|
||||||
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_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",
|
pr_debug("just returning success since sensor is already off %d\n",
|
||||||
s_ctrl->sensor_state);
|
s_ctrl->sensor_state);
|
||||||
return 0;
|
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 {
|
} else {
|
||||||
|
pr_err("%s:%d invalid state\n", __func__,
|
||||||
|
__LINE__);
|
||||||
rc = -EFAULT;
|
rc = -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,33 +129,41 @@ static int msm_sensor_resume(struct device *dev)
|
||||||
if (s_ctrl->is_csid_tg_mode)
|
if (s_ctrl->is_csid_tg_mode)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP) {
|
if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) {
|
||||||
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);
|
|
||||||
|
|
||||||
rc = s_ctrl->func_tbl->sensor_power_up(s_ctrl);
|
if (s_ctrl->func_tbl->sensor_power_up) {
|
||||||
if (rc < 0) {
|
if (s_ctrl->sensordata->misc_regulator)
|
||||||
pr_err("%s:%d failed rc %d\n", __func__,
|
msm_sensor_misc_regulator(s_ctrl, 1);
|
||||||
__LINE__, rc);
|
|
||||||
|
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;
|
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);
|
s_ctrl->sensor_state);
|
||||||
|
rc = 0;
|
||||||
} else {
|
} else {
|
||||||
|
pr_err("%s:%d invalid state\n", __func__,
|
||||||
|
__LINE__);
|
||||||
rc = -EFAULT;
|
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;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue