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

Commit fd36e1bb authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge 78d5c31a on remote branch

Change-Id: Id68f2a164ed9a9e8e20c5d3bb566c7beb7c2c0b9
parents 2d879f62 78d5c31a
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
 * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
 */

#include <linux/kernel.h>
@@ -1155,22 +1155,29 @@ int32_t cam_sensor_update_power_settings(void *cmd_buf,
	int32_t i = 0, pwr_up = 0, pwr_down = 0;
	struct cam_sensor_power_setting *pwr_settings;
	void *ptr = cmd_buf, *scr;
	struct cam_cmd_power *pwr_cmd = (struct cam_cmd_power *)cmd_buf;
	struct common_header *cmm_hdr = (struct common_header *)cmd_buf;
	struct cam_cmd_power *pwr_cmd =
		kzalloc(sizeof(struct cam_cmd_power), GFP_KERNEL);
	if (!pwr_cmd)
		return -ENOMEM;
	memcpy(pwr_cmd, cmd_buf, sizeof(struct cam_cmd_power));

	if (!pwr_cmd || !cmd_length || cmd_buf_len < (size_t)cmd_length ||
		cam_sensor_validate(cmd_buf, cmd_buf_len)) {
		CAM_ERR(CAM_SENSOR, "Invalid Args: pwr_cmd %pK, cmd_length: %d",
			pwr_cmd, cmd_length);
		return -EINVAL;
		rc = -EINVAL;
		goto free_power_command;
	}

	power_info->power_setting_size = 0;
	power_info->power_setting =
		kzalloc(sizeof(struct cam_sensor_power_setting) *
			MAX_POWER_CONFIG, GFP_KERNEL);
	if (!power_info->power_setting)
		return -ENOMEM;
	if (!power_info->power_setting) {
		rc = -ENOMEM;
		goto free_power_command;
	}

	power_info->power_down_setting_size = 0;
	power_info->power_down_setting =
@@ -1180,7 +1187,8 @@ int32_t cam_sensor_update_power_settings(void *cmd_buf,
		kfree(power_info->power_setting);
		power_info->power_setting = NULL;
		power_info->power_setting_size = 0;
		return -ENOMEM;
		rc = -ENOMEM;
		goto free_power_command;
	}

	while (tot_size < cmd_length) {
@@ -1364,7 +1372,7 @@ int32_t cam_sensor_update_power_settings(void *cmd_buf,
		}
	}

	return rc;
	goto free_power_command;
free_power_settings:
	kfree(power_info->power_down_setting);
	kfree(power_info->power_setting);
@@ -1372,6 +1380,9 @@ int32_t cam_sensor_update_power_settings(void *cmd_buf,
	power_info->power_setting = NULL;
	power_info->power_down_setting_size = 0;
	power_info->power_setting_size = 0;
free_power_command:
	kfree(pwr_cmd);
	pwr_cmd = NULL;
	return rc;
}