Merge "msm: camera: sensor: Add Init setting retry in case cci is resetting" into camera-kernel.lnx.4.0

This commit is contained in:
Camera Software Integration 2020-02-04 15:18:05 -08:00 • committed by Gerrit - the friendly Code Review server
commit d8b3b0fb80
4 changed files with 53 additions and 10 deletions

View file

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
*/
#include <linux/module.h>
@ -957,10 +957,19 @@ int32_t cam_actuator_driver_cmd(struct cam_actuator_ctrl_t *a_ctrl,
ACT_APPLY_SETTINGS_NOW) {
rc = cam_actuator_apply_settings(a_ctrl,
&a_ctrl->i2c_data.init_settings);
if ((rc == -EAGAIN) &&
(a_ctrl->io_master_info.master_type == CCI_MASTER)) {
CAM_WARN(CAM_ACTUATOR,
"CCI HW is in resetting mode:: Reapplying Init settings");
usleep_range(1000, 1010);
rc = cam_actuator_apply_settings(a_ctrl,
&a_ctrl->i2c_data.init_settings);
}
if (rc < 0)
CAM_ERR(CAM_ACTUATOR,
"Cannot apply Update settings");
"Failed to apply Init settings: rc = %d",
rc);
/* Delete the request even if the apply is failed */
rc = delete_request(&a_ctrl->i2c_data.init_settings);
if (rc < 0) {

View file

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
*/
#include <linux/module.h>
@ -662,6 +662,16 @@ int cam_flash_i2c_apply_setting(struct cam_flash_ctrl *fctrl,
list) {
rc = cam_sensor_util_i2c_apply_setting
(&(fctrl->io_master_info), i2c_list);
if ((rc == -EAGAIN) &&
(fctrl->io_master_info.master_type ==
CCI_MASTER)) {
CAM_WARN(CAM_FLASH,
"CCI HW is in reset mode: Reapplying Init settings");
usleep_range(1000, 1010);
rc = cam_sensor_util_i2c_apply_setting
(&(fctrl->io_master_info), i2c_list);
}
if (rc) {
CAM_ERR(CAM_FLASH,
"Failed to apply init settings: %d",

View file

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
*/
#include <linux/module.h>
@ -583,8 +583,18 @@ static int cam_ois_pkt_parse(struct cam_ois_ctrl_t *o_ctrl, void *arg)
}
rc = cam_ois_apply_settings(o_ctrl, &o_ctrl->i2c_init_data);
if ((rc == -EAGAIN) &&
(o_ctrl->io_master_info.master_type == CCI_MASTER)) {
CAM_WARN(CAM_OIS,
"CCI HW is restting: Reapplying INIT settings");
usleep_range(1000, 1010);
rc = cam_ois_apply_settings(o_ctrl,
&o_ctrl->i2c_init_data);
}
if (rc < 0) {
CAM_ERR(CAM_OIS, "Cannot apply Init settings");
CAM_ERR(CAM_OIS,
"Cannot apply Init settings: rc = %d",
rc);
goto pwr_dwn;
}

View file

@ -644,7 +644,7 @@ int cam_sensor_match_id(struct cam_sensor_ctrl_t *s_ctrl)
int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl,
void *arg)
{
int rc = 0;
int rc = 0, pkt_opcode = 0;
struct cam_control *cmd = (struct cam_control *)arg;
struct cam_sensor_power_ctrl_t *power_info =
&s_ctrl->sensordata->power_info;
@ -932,14 +932,28 @@ int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl,
if (s_ctrl->i2c_data.init_settings.is_settings_valid &&
(s_ctrl->i2c_data.init_settings.request_id == 0)) {
pkt_opcode =
CAM_SENSOR_PACKET_OPCODE_SENSOR_INITIAL_CONFIG;
rc = cam_sensor_apply_settings(s_ctrl, 0,
CAM_SENSOR_PACKET_OPCODE_SENSOR_INITIAL_CONFIG);
pkt_opcode);
if ((rc == -EAGAIN) &&
(s_ctrl->io_master_info.master_type == CCI_MASTER)) {
/* If CCI hardware is resetting we need to wait
* for sometime before reapply
*/
CAM_WARN(CAM_SENSOR,
"Reapplying the Init settings due to cci hw reset");
usleep_range(1000, 1010);
rc = cam_sensor_apply_settings(s_ctrl, 0,
pkt_opcode);
}
s_ctrl->i2c_data.init_settings.request_id = -1;
if (rc < 0) {
CAM_ERR(CAM_SENSOR,
"cannot apply init settings");
"cannot apply init settings rc= %d",
rc);
delete_request(&s_ctrl->i2c_data.init_settings);
goto release_mutex;
}