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

Commit a7573e07 authored by Depeng Shao's avatar Depeng Shao
Browse files

msm: camera: sensor: Using low priority queue for init setting



This change uses low priority queue to write sensor init
setting.

CRs-Fixed: 3368476
Change-Id: I265920c40fae562b4f86d92a65785a73a9b78116
Signed-off-by: default avatarDepeng Shao <quic_depengs@quicinc.com>
parent e6d03e41
Loading
Loading
Loading
Loading
+4 −3
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 Qualcomm Innovation Center, Inc. All rights reserved.
 */

#include <linux/module.h>
@@ -153,7 +154,7 @@ static int32_t cam_actuator_i2c_modes_util(

	if (i2c_list->op_code == CAM_SENSOR_I2C_WRITE_RANDOM) {
		rc = camera_io_dev_write(io_master_info,
			&(i2c_list->i2c_settings));
			&(i2c_list->i2c_settings), false);
		if (rc < 0) {
			CAM_ERR(CAM_ACTUATOR,
				"Failed to random write I2C settings: %d",
@@ -164,7 +165,7 @@ static int32_t cam_actuator_i2c_modes_util(
		rc = camera_io_dev_write_continuous(
			io_master_info,
			&(i2c_list->i2c_settings),
			0);
			0, false);
		if (rc < 0) {
			CAM_ERR(CAM_ACTUATOR,
				"Failed to seq write I2C settings: %d",
@@ -175,7 +176,7 @@ static int32_t cam_actuator_i2c_modes_util(
		rc = camera_io_dev_write_continuous(
			io_master_info,
			&(i2c_list->i2c_settings),
			1);
			1, false);
		if (rc < 0) {
			CAM_ERR(CAM_ACTUATOR,
				"Failed to burst write I2C settings: %d",
+20 −10
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 Qualcomm Innovation Center, Inc. All rights reserved.
 */

#include <linux/module.h>
@@ -1654,11 +1655,14 @@ static int32_t cam_cci_write(struct v4l2_subdev *sd,
	case MSM_CCI_I2C_WRITE:
	case MSM_CCI_I2C_WRITE_SEQ:
	case MSM_CCI_I2C_WRITE_BURST:
		if (!c_ctrl->force_low_priority) {
			for (i = 0; i < NUM_QUEUES; i++) {
			if (mutex_trylock(&cci_master_info->mutex_q[i])) {
				if (mutex_trylock(
					&cci_master_info->mutex_q[i])) {
					rc = cam_cci_i2c_write(sd, c_ctrl, i,
						MSM_SYNC_DISABLE);
				mutex_unlock(&cci_master_info->mutex_q[i]);
					mutex_unlock(
						&cci_master_info->mutex_q[i]);
					return rc;
				}
			}
@@ -1666,6 +1670,12 @@ static int32_t cam_cci_write(struct v4l2_subdev *sd,
			rc = cam_cci_i2c_write(sd, c_ctrl,
				PRIORITY_QUEUE, MSM_SYNC_DISABLE);
			mutex_unlock(&cci_master_info->mutex_q[PRIORITY_QUEUE]);
		} else {
			mutex_lock(&cci_master_info->mutex_q[SYNC_QUEUE]);
			rc = cam_cci_i2c_write(sd, c_ctrl,
				SYNC_QUEUE, MSM_SYNC_DISABLE);
			mutex_unlock(&cci_master_info->mutex_q[SYNC_QUEUE]);
		}
		break;
	case MSM_CCI_I2C_WRITE_ASYNC:
		rc = cam_cci_i2c_write_async(sd, c_ctrl,
+2 −0
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 Qualcomm Innovation Center, Inc. All rights reserved.
 */

#ifndef _CAM_CCI_DEV_H_
@@ -284,6 +285,7 @@ struct cam_cci_ctrl {
		struct cam_cci_wait_sync_cfg cci_wait_sync_cfg;
		struct cam_cci_gpio_cfg gpio_cfg;
	} cfg;
	bool force_low_priority;
};

struct cci_write_async {
+4 −4
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ static int cam_eeprom_read_memory(struct cam_eeprom_ctrl_t *e_ctrl,
			i2c_reg_array.delay = emap[j].page.delay;
			i2c_reg_settings.reg_setting = &i2c_reg_array;
			rc = camera_io_dev_write(&e_ctrl->io_master_info,
				&i2c_reg_settings);
				&i2c_reg_settings, false);
			if (rc) {
				CAM_ERR(CAM_EEPROM, "page write failed rc %d",
					rc);
@@ -82,7 +82,7 @@ static int cam_eeprom_read_memory(struct cam_eeprom_ctrl_t *e_ctrl,
			i2c_reg_array.delay = emap[j].pageen.delay;
			i2c_reg_settings.reg_setting = &i2c_reg_array;
			rc = camera_io_dev_write(&e_ctrl->io_master_info,
				&i2c_reg_settings);
				&i2c_reg_settings, false);
			if (rc) {
				CAM_ERR(CAM_EEPROM, "page enable failed rc %d",
					rc);
@@ -126,7 +126,7 @@ static int cam_eeprom_read_memory(struct cam_eeprom_ctrl_t *e_ctrl,
			i2c_reg_array.delay = emap[j].pageen.delay;
			i2c_reg_settings.reg_setting = &i2c_reg_array;
			rc = camera_io_dev_write(&e_ctrl->io_master_info,
				&i2c_reg_settings);
				&i2c_reg_settings, false);
			if (rc) {
				CAM_ERR(CAM_EEPROM,
					"page disable failed rc %d",
@@ -1172,7 +1172,7 @@ static int32_t cam_eeprom_write(struct cam_eeprom_ctrl_t *e_ctrl)
			&(i2c_set->list_head), list) {
			rc = camera_io_dev_write_continuous(
				&e_ctrl->io_master_info,
				&i2c_list->i2c_settings, 1);
				&i2c_list->i2c_settings, 1, false);
		if (rc < 0) {
			CAM_ERR(CAM_EEPROM,
				"Error in EEPROM write");
+4 −3
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 Qualcomm Innovation Center, Inc. All rights reserved.
 */

#include <linux/module.h>
@@ -223,7 +224,7 @@ static int cam_ois_apply_settings(struct cam_ois_ctrl_t *o_ctrl,
		&(i2c_set->list_head), list) {
		if (i2c_list->op_code ==  CAM_SENSOR_I2C_WRITE_RANDOM) {
			rc = camera_io_dev_write(&(o_ctrl->io_master_info),
				&(i2c_list->i2c_settings));
				&(i2c_list->i2c_settings), false);
			if (rc < 0) {
				CAM_ERR(CAM_OIS,
					"Failed in Applying i2c wrt settings");
@@ -354,7 +355,7 @@ static int cam_ois_fw_download(struct cam_ois_ctrl_t *o_ctrl)
	}

	rc = camera_io_dev_write_continuous(&(o_ctrl->io_master_info),
		&i2c_reg_setting, 1);
		&i2c_reg_setting, 1, false);
	if (rc < 0) {
		CAM_ERR(CAM_OIS, "OIS FW download failed %d", rc);
		goto release_firmware;
@@ -399,7 +400,7 @@ static int cam_ois_fw_download(struct cam_ois_ctrl_t *o_ctrl)
	}

	rc = camera_io_dev_write_continuous(&(o_ctrl->io_master_info),
		&i2c_reg_setting, 1);
		&i2c_reg_setting, 1, false);
	if (rc < 0)
		CAM_ERR(CAM_OIS, "OIS FW download failed %d", rc);

Loading