Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8e9459d authored by Suprith Malligere Shankaregowda's avatar Suprith Malligere Shankaregowda Committed by Gerrit - the friendly Code Review server
Browse files

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



Added condition check for suspend only if sensor state is power
down and for resume only if sensor state is power up in
pm functions on sensor driver to control.

Change-Id: Ia31f34dc103428423a86efe8f8012db18b5a75f1
Signed-off-by: default avatarSuprith Malligere Shankaregowda <supgow@codeaurora.org>
parent 0fe549f6
Loading
Loading
Loading
Loading
+55 −41
Original line number Diff line number Diff line
@@ -73,22 +73,19 @@ static int msm_sensor_suspend(struct device *dev)
		return -EFAULT;
	}

	if (s_ctrl->is_csid_tg_mode)
		return 0;

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

	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) {
		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);
@@ -104,6 +101,15 @@ static int msm_sensor_suspend(struct device *dev)
		} 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;
	} else {
		pr_err("%s:%d invalid state\n", __func__,
			__LINE__);
		rc = -EFAULT;
	}

	return rc;
}
@@ -123,11 +129,8 @@ 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->sensor_state == MSM_SENSOR_POWER_DOWN) {

		if (s_ctrl->func_tbl->sensor_power_up) {
			if (s_ctrl->sensordata->misc_regulator)
				msm_sensor_misc_regulator(s_ctrl, 1);
@@ -137,6 +140,7 @@ static int msm_sensor_resume(struct device *dev)
				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__,
@@ -150,6 +154,16 @@ static int msm_sensor_resume(struct device *dev)
			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;
	}

	return rc;
}