Merge "msm: ais: sensor: Fix turning clocks off during suspend"

This commit is contained in:
Linux Build Service Account 2018-07-08 20:23:57 -07:00 committed by Gerrit - the friendly Code Review server
commit 0e811b3f2e

View file

@ -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;
}