Tundra: support 2nd gyro compatible

detail:
Dongwoon OIS compatible 2nd gyro kernel.

Change-Id: I9cc4918032534a1fa56037a46ccedbff19dc8a6c
Signed-off-by: huqian4 <huqian4@motorola.com>
Reviewed-on: https://gerrit.mot.com/2244554
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Long Cheng <chengl1@motorola.com>
Reviewed-by: Wang Liu <liuwang2@lenovo.com>
Reviewed-by: Zhichao Chen <chenzc2@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
huqian4 2022-04-18 12:50:42 +08:00 • committed by zhaoji1
commit c5923c96a5
4 changed files with 45 additions and 1 deletions

View file

@ -965,6 +965,41 @@ static int cam_ois_pkt_parse(struct cam_ois_ctrl_t *o_ctrl, void *arg)
return rc;
}
break;
case CAM_OIS_PACKET_OPCODE_OIS_GYRO_OFFSET:
if (o_ctrl->cam_ois_state < CAM_OIS_CONFIG) {
rc = -EINVAL;
CAM_WARN(CAM_OIS,
"Not in right state to control OIS: %d",
o_ctrl->cam_ois_state);
return rc;
}
offset = (uint32_t *)&csl_packet->payload;
offset += (csl_packet->cmd_buf_offset / sizeof(uint32_t));
cmd_desc = (struct cam_cmd_buf_desc *)(offset);
i2c_reg_settings = &(o_ctrl->i2c_gyro_data);
i2c_reg_settings->is_settings_valid = 1;
i2c_reg_settings->request_id = 0;
rc = cam_sensor_i2c_command_parser(&o_ctrl->io_master_info,
i2c_reg_settings,
cmd_desc, 1, NULL);
if (rc < 0) {
CAM_ERR(CAM_OIS, "OIS pkt parsing failed: %d", rc);
return rc;
}
rc = cam_ois_apply_settings(o_ctrl, i2c_reg_settings);
if (rc < 0) {
CAM_ERR(CAM_OIS, "Cannot apply gyro offset settings");
return rc;
}
rc = delete_request(i2c_reg_settings);
if (rc < 0) {
CAM_ERR(CAM_OIS,
"Fail deleting gyro offset data: rc: %d", rc);
return rc;
}
break;
case CAM_OIS_PACKET_OPCODE_READ: {
struct cam_buf_io_cfg *io_cfg;
struct i2c_settings_array i2c_read_settings;
@ -1541,6 +1576,9 @@ void cam_ois_shutdown(struct cam_ois_ctrl_t *o_ctrl)
if (o_ctrl->i2c_mode_data.is_settings_valid == 1)
delete_request(&o_ctrl->i2c_mode_data);
if (o_ctrl->i2c_gyro_data.is_settings_valid == 1)
delete_request(&o_ctrl->i2c_gyro_data);
if (o_ctrl->i2c_calib_data.is_settings_valid == 1)
delete_request(&o_ctrl->i2c_calib_data);
@ -1668,6 +1706,9 @@ int cam_ois_driver_cmd(struct cam_ois_ctrl_t *o_ctrl, void *arg)
if (o_ctrl->i2c_mode_data.is_settings_valid == 1)
delete_request(&o_ctrl->i2c_mode_data);
if (o_ctrl->i2c_gyro_data.is_settings_valid == 1)
delete_request(&o_ctrl->i2c_gyro_data);
if (o_ctrl->i2c_calib_data.is_settings_valid == 1)
delete_request(&o_ctrl->i2c_calib_data);

View file

@ -490,6 +490,7 @@ static int cam_ois_component_bind(struct device *dev,
INIT_LIST_HEAD(&(o_ctrl->i2c_calib_data.list_head));
INIT_LIST_HEAD(&(o_ctrl->i2c_postcalib_data.list_head));
INIT_LIST_HEAD(&(o_ctrl->i2c_mode_data.list_head));
INIT_LIST_HEAD(&(o_ctrl->i2c_gyro_data.list_head));
mutex_init(&(o_ctrl->ois_mutex));
rc = cam_ois_driver_soc_init(o_ctrl);
if (rc) {

View file

@ -148,6 +148,7 @@ struct cam_ois_ctrl_t {
struct i2c_settings_array i2c_calib_data;
struct i2c_settings_array i2c_postcalib_data;
struct i2c_settings_array i2c_mode_data;
struct i2c_settings_array i2c_gyro_data;
struct i2c_settings_array i2c_time_data;
enum msm_camera_device_type_t ois_device_type;
enum cam_ois_state cam_ois_state;

View file

@ -177,7 +177,8 @@ enum cam_ois_packet_opcodes {
CAM_OIS_PACKET_OPCODE_WRITE_TIME,
CAM_OIS_PACKET_OPCODE_ACTIVE_OIS_ROHM,
CAM_OIS_PACKET_OPCODE_ACTIVE_OIS_DONGWOON,
CAM_OIS_PACKET_OPCODE_ACTIVE_OIS_DONGWOON_QTIMER
CAM_OIS_PACKET_OPCODE_ACTIVE_OIS_DONGWOON_QTIMER,
CAM_OIS_PACKET_OPCODE_OIS_GYRO_OFFSET
};
enum msm_bus_perf_setting {