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

Commit 1c6ee55b authored by Karthik Anantha Ram's avatar Karthik Anantha Ram Committed by Gerrit - the friendly Code Review server
Browse files

msm: camera: sensor: Validate power settings



As part of shutdown when we free the power settings we should
assign the pointer to NULL. And in power down we validate the
settings.

Change-Id: I7abe11548e211dfd89387069191234488dcfd0ce
Signed-off-by: default avatarKarthik Anantha Ram <kartanan@codeaurora.org>
parent 821168b3
Loading
Loading
Loading
Loading
+5 −18
Original line number Diff line number Diff line
@@ -518,6 +518,8 @@ void cam_sensor_shutdown(struct cam_sensor_ctrl_t *s_ctrl)

	kfree(power_info->power_setting);
	kfree(power_info->power_down_setting);
	power_info->power_setting = NULL;
	power_info->power_down_setting = NULL;

	s_ctrl->streamon_count = 0;
	s_ctrl->streamoff_count = 0;
@@ -584,24 +586,6 @@ int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl,
				"Already Sensor Probed in the slot");
			break;
		}
		/* Allocate memory for power up setting */
		pu = kzalloc(sizeof(struct cam_sensor_power_setting) *
			MAX_POWER_CONFIG, GFP_KERNEL);
		if (!pu) {
			rc = -ENOMEM;
			goto release_mutex;
		}

		pd = kzalloc(sizeof(struct cam_sensor_power_setting) *
			MAX_POWER_CONFIG, GFP_KERNEL);
		if (!pd) {
			kfree(pu);
			rc = -ENOMEM;
			goto release_mutex;
		}

		power_info->power_setting = pu;
		power_info->power_down_setting = pd;

		if (cmd->handle_type ==
			CAM_HANDLE_MEM_HANDLE) {
@@ -618,6 +602,9 @@ int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl,
			return -EINVAL;
		}

		pu = power_info->power_setting;
		pd = power_info->power_down_setting;

		/* Parse and fill vreg params for powerup settings */
		rc = msm_camera_fill_vreg_params(
			&s_ctrl->soc_info,
+13 −7
Original line number Diff line number Diff line
@@ -860,8 +860,10 @@ int32_t cam_sensor_update_power_settings(void *cmd_buf,
	return rc;
free_power_down_settings:
	kfree(power_info->power_down_setting);
	power_info->power_down_setting = NULL;
free_power_settings:
	kfree(power_info->power_setting);
	power_info->power_setting = NULL;
	return rc;
}

@@ -1305,7 +1307,9 @@ int cam_sensor_core_power_up(struct cam_sensor_power_ctrl_t *ctrl,
		CAM_DBG(CAM_SENSOR, "index: %d", index);
		power_setting = &ctrl->power_setting[index];
		if (!power_setting) {
			CAM_ERR(CAM_SENSOR, "Invalid power up settings");
			CAM_ERR(CAM_SENSOR,
				"Invalid power up settings for index %d",
				index);
			return -EINVAL;
		}

@@ -1595,11 +1599,6 @@ static int cam_config_mclk_reg(struct cam_sensor_power_ctrl_t *ctrl,

	pd = &ctrl->power_down_setting[index];

	if (!pd) {
		CAM_ERR(CAM_SENSOR, "Invalid power down setting");
		return -EINVAL;
	}

	for (j = 0; j < num_vreg; j++) {
		if (!strcmp(soc_info->rgltr_name[j], "cam_clk")) {

@@ -1642,7 +1641,7 @@ int msm_camera_power_down(struct cam_sensor_power_ctrl_t *ctrl,
{
	int index = 0, ret = 0, num_vreg = 0, i;
	struct cam_sensor_power_setting *pd = NULL;
	struct cam_sensor_power_setting *ps;
	struct cam_sensor_power_setting *ps = NULL;
	struct msm_camera_gpio_num_info *gpio_num_info = NULL;

	CAM_DBG(CAM_SENSOR, "Enter");
@@ -1662,6 +1661,13 @@ int msm_camera_power_down(struct cam_sensor_power_ctrl_t *ctrl,
	for (index = 0; index < ctrl->power_down_setting_size; index++) {
		CAM_DBG(CAM_SENSOR, "index %d",  index);
		pd = &ctrl->power_down_setting[index];
		if (!pd) {
			CAM_ERR(CAM_SENSOR,
				"Invalid power down settings for index %d",
				index);
			return -EINVAL;
		}

		ps = NULL;
		CAM_DBG(CAM_SENSOR, "type %d",  pd->seq_type);
		switch (pd->seq_type) {