Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_actuator/cam_actuator_core.c +7 −2 Original line number Diff line number Diff line Loading @@ -488,6 +488,7 @@ int32_t cam_actuator_i2c_pkt_parse(struct cam_actuator_ctrl_t *a_ctrl, i2c_reg_settings->request_id = 0; i2c_reg_settings->is_settings_valid = 1; rc = cam_sensor_i2c_command_parser( &a_ctrl->io_master_info, i2c_reg_settings, &cmd_desc[i], 1); if (rc < 0) { Loading Loading @@ -544,7 +545,9 @@ int32_t cam_actuator_i2c_pkt_parse(struct cam_actuator_ctrl_t *a_ctrl, offset = (uint32_t *)&csl_packet->payload; offset += csl_packet->cmd_buf_offset / sizeof(uint32_t); cmd_desc = (struct cam_cmd_buf_desc *)(offset); rc = cam_sensor_i2c_command_parser(i2c_reg_settings, rc = cam_sensor_i2c_command_parser( &a_ctrl->io_master_info, i2c_reg_settings, cmd_desc, 1); if (rc < 0) { CAM_ERR(CAM_ACTUATOR, Loading @@ -570,7 +573,9 @@ int32_t cam_actuator_i2c_pkt_parse(struct cam_actuator_ctrl_t *a_ctrl, offset = (uint32_t *)&csl_packet->payload; offset += csl_packet->cmd_buf_offset / sizeof(uint32_t); cmd_desc = (struct cam_cmd_buf_desc *)(offset); rc = cam_sensor_i2c_command_parser(i2c_reg_settings, rc = cam_sensor_i2c_command_parser( &a_ctrl->io_master_info, i2c_reg_settings, cmd_desc, 1); if (rc < 0) { CAM_ERR(CAM_ACTUATOR, Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_ois/cam_ois_core.c +4 −1 Original line number Diff line number Diff line Loading @@ -517,6 +517,7 @@ static int cam_ois_pkt_parse(struct cam_ois_ctrl_t *o_ctrl, void *arg) 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[i], 1); if (rc < 0) { Loading @@ -533,6 +534,7 @@ static int cam_ois_pkt_parse(struct cam_ois_ctrl_t *o_ctrl, void *arg) 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[i], 1); if (rc < 0) { Loading Loading @@ -604,7 +606,8 @@ static int cam_ois_pkt_parse(struct cam_ois_ctrl_t *o_ctrl, void *arg) i2c_reg_settings = &(o_ctrl->i2c_mode_data); i2c_reg_settings->is_settings_valid = 1; i2c_reg_settings->request_id = 0; rc = cam_sensor_i2c_command_parser(i2c_reg_settings, rc = cam_sensor_i2c_command_parser(&o_ctrl->io_master_info, i2c_reg_settings, cmd_desc, 1); if (rc < 0) { CAM_ERR(CAM_OIS, "OIS pkt parsing failed: %d", rc); Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_core.c +2 −2 Original line number Diff line number Diff line Loading @@ -230,7 +230,8 @@ static int32_t cam_sensor_i2c_pkt_parse(struct cam_sensor_ctrl_t *s_ctrl, offset += csl_packet->cmd_buf_offset / 4; cmd_desc = (struct cam_cmd_buf_desc *)(offset); rc = cam_sensor_i2c_command_parser(i2c_reg_settings, cmd_desc, 1); rc = cam_sensor_i2c_command_parser(&s_ctrl->io_master_info, i2c_reg_settings, cmd_desc, 1); if (rc < 0) { CAM_ERR(CAM_SENSOR, "Fail parsing I2C Pkt: %d", rc); return rc; Loading Loading @@ -562,7 +563,6 @@ int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl, struct cam_sensor_power_setting *pd = NULL; struct cam_sensor_power_ctrl_t *power_info = &s_ctrl->sensordata->power_info; if (!s_ctrl || !arg) { CAM_ERR(CAM_SENSOR, "s_ctrl is NULL"); return -EINVAL; Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -4,5 +4,6 @@ ccflags-y += -Idrivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_io ccflags-y += -Idrivers/media/platform/msm/camera/cam_sensor_module/cam_cci ccflags-y += -Idrivers/media/platform/msm/camera/cam_sensor_module/cam_res_mgr ccflags-y += -Idrivers/media/platform/msm/camera/cam_smmu/ ccflags-y += -Idrivers/media/platform/msm/camera/cam_cpas/include obj-$(CONFIG_SPECTRA_CAMERA) += cam_sensor_util.o drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.c +57 −3 Original line number Diff line number Diff line Loading @@ -242,6 +242,41 @@ static int32_t cam_sensor_handle_continuous_write( return rc; } static int cam_sensor_handle_slave_info( struct camera_io_master *io_master, uint32_t *cmd_buf) { int rc = 0; struct cam_cmd_i2c_info *i2c_info = (struct cam_cmd_i2c_info *)cmd_buf; if (io_master == NULL || cmd_buf == NULL) { CAM_ERR(CAM_SENSOR, "Invalid args"); return -EINVAL; } switch (io_master->master_type) { case CCI_MASTER: io_master->cci_client->sid = (i2c_info->slave_addr >> 1); io_master->cci_client->i2c_freq_mode = i2c_info->i2c_freq_mode; break; case I2C_MASTER: io_master->client->addr = i2c_info->slave_addr; break; case SPI_MASTER: break; default: CAM_ERR(CAM_SENSOR, "Invalid master type: %d", io_master->master_type); rc = -EINVAL; break; } return rc; } /** * Name : cam_sensor_i2c_command_parser * Description : Parse CSL CCI packet and apply register settings Loading @@ -253,12 +288,16 @@ static int32_t cam_sensor_handle_continuous_write( * WAIT + n x RND_WR with num_cmd_buf = 1. Do not exepect RD/WR * with different cmd_type and op_code in one command buffer. */ int cam_sensor_i2c_command_parser(struct i2c_settings_array *i2c_reg_settings, struct cam_cmd_buf_desc *cmd_desc, int32_t num_cmd_buffers) int cam_sensor_i2c_command_parser( struct camera_io_master *io_master, struct i2c_settings_array *i2c_reg_settings, struct cam_cmd_buf_desc *cmd_desc, int32_t num_cmd_buffers) { int16_t rc = 0, i = 0; size_t len_of_buff = 0; uint64_t generic_ptr; uint16_t cmd_length_in_bytes = 0; for (i = 0; i < num_cmd_buffers; i++) { uint32_t *cmd_buf = NULL; Loading @@ -272,7 +311,6 @@ int cam_sensor_i2c_command_parser(struct i2c_settings_array *i2c_reg_settings, * It is not expected the same settings to * be spread across multiple cmd buffers */ CAM_DBG(CAM_SENSOR, "Total cmd Buf in Bytes: %d", cmd_desc[i].length); Loading Loading @@ -373,6 +411,22 @@ int cam_sensor_i2c_command_parser(struct i2c_settings_array *i2c_reg_settings, } break; } case CAMERA_SENSOR_CMD_TYPE_I2C_INFO: { rc = cam_sensor_handle_slave_info( io_master, cmd_buf); if (rc) { CAM_ERR(CAM_SENSOR, "Handle slave info failed with rc: %d", rc); return rc; } cmd_length_in_bytes = sizeof(struct cam_cmd_i2c_info); cmd_buf += cmd_length_in_bytes / sizeof(uint32_t); byte_cnt += cmd_length_in_bytes; break; } default: CAM_ERR(CAM_SENSOR, "Invalid Command Type:%d", cmm_hdr->cmd_type); Loading Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_actuator/cam_actuator_core.c +7 −2 Original line number Diff line number Diff line Loading @@ -488,6 +488,7 @@ int32_t cam_actuator_i2c_pkt_parse(struct cam_actuator_ctrl_t *a_ctrl, i2c_reg_settings->request_id = 0; i2c_reg_settings->is_settings_valid = 1; rc = cam_sensor_i2c_command_parser( &a_ctrl->io_master_info, i2c_reg_settings, &cmd_desc[i], 1); if (rc < 0) { Loading Loading @@ -544,7 +545,9 @@ int32_t cam_actuator_i2c_pkt_parse(struct cam_actuator_ctrl_t *a_ctrl, offset = (uint32_t *)&csl_packet->payload; offset += csl_packet->cmd_buf_offset / sizeof(uint32_t); cmd_desc = (struct cam_cmd_buf_desc *)(offset); rc = cam_sensor_i2c_command_parser(i2c_reg_settings, rc = cam_sensor_i2c_command_parser( &a_ctrl->io_master_info, i2c_reg_settings, cmd_desc, 1); if (rc < 0) { CAM_ERR(CAM_ACTUATOR, Loading @@ -570,7 +573,9 @@ int32_t cam_actuator_i2c_pkt_parse(struct cam_actuator_ctrl_t *a_ctrl, offset = (uint32_t *)&csl_packet->payload; offset += csl_packet->cmd_buf_offset / sizeof(uint32_t); cmd_desc = (struct cam_cmd_buf_desc *)(offset); rc = cam_sensor_i2c_command_parser(i2c_reg_settings, rc = cam_sensor_i2c_command_parser( &a_ctrl->io_master_info, i2c_reg_settings, cmd_desc, 1); if (rc < 0) { CAM_ERR(CAM_ACTUATOR, Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_ois/cam_ois_core.c +4 −1 Original line number Diff line number Diff line Loading @@ -517,6 +517,7 @@ static int cam_ois_pkt_parse(struct cam_ois_ctrl_t *o_ctrl, void *arg) 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[i], 1); if (rc < 0) { Loading @@ -533,6 +534,7 @@ static int cam_ois_pkt_parse(struct cam_ois_ctrl_t *o_ctrl, void *arg) 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[i], 1); if (rc < 0) { Loading Loading @@ -604,7 +606,8 @@ static int cam_ois_pkt_parse(struct cam_ois_ctrl_t *o_ctrl, void *arg) i2c_reg_settings = &(o_ctrl->i2c_mode_data); i2c_reg_settings->is_settings_valid = 1; i2c_reg_settings->request_id = 0; rc = cam_sensor_i2c_command_parser(i2c_reg_settings, rc = cam_sensor_i2c_command_parser(&o_ctrl->io_master_info, i2c_reg_settings, cmd_desc, 1); if (rc < 0) { CAM_ERR(CAM_OIS, "OIS pkt parsing failed: %d", rc); Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_core.c +2 −2 Original line number Diff line number Diff line Loading @@ -230,7 +230,8 @@ static int32_t cam_sensor_i2c_pkt_parse(struct cam_sensor_ctrl_t *s_ctrl, offset += csl_packet->cmd_buf_offset / 4; cmd_desc = (struct cam_cmd_buf_desc *)(offset); rc = cam_sensor_i2c_command_parser(i2c_reg_settings, cmd_desc, 1); rc = cam_sensor_i2c_command_parser(&s_ctrl->io_master_info, i2c_reg_settings, cmd_desc, 1); if (rc < 0) { CAM_ERR(CAM_SENSOR, "Fail parsing I2C Pkt: %d", rc); return rc; Loading Loading @@ -562,7 +563,6 @@ int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl, struct cam_sensor_power_setting *pd = NULL; struct cam_sensor_power_ctrl_t *power_info = &s_ctrl->sensordata->power_info; if (!s_ctrl || !arg) { CAM_ERR(CAM_SENSOR, "s_ctrl is NULL"); return -EINVAL; Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -4,5 +4,6 @@ ccflags-y += -Idrivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_io ccflags-y += -Idrivers/media/platform/msm/camera/cam_sensor_module/cam_cci ccflags-y += -Idrivers/media/platform/msm/camera/cam_sensor_module/cam_res_mgr ccflags-y += -Idrivers/media/platform/msm/camera/cam_smmu/ ccflags-y += -Idrivers/media/platform/msm/camera/cam_cpas/include obj-$(CONFIG_SPECTRA_CAMERA) += cam_sensor_util.o
drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_util.c +57 −3 Original line number Diff line number Diff line Loading @@ -242,6 +242,41 @@ static int32_t cam_sensor_handle_continuous_write( return rc; } static int cam_sensor_handle_slave_info( struct camera_io_master *io_master, uint32_t *cmd_buf) { int rc = 0; struct cam_cmd_i2c_info *i2c_info = (struct cam_cmd_i2c_info *)cmd_buf; if (io_master == NULL || cmd_buf == NULL) { CAM_ERR(CAM_SENSOR, "Invalid args"); return -EINVAL; } switch (io_master->master_type) { case CCI_MASTER: io_master->cci_client->sid = (i2c_info->slave_addr >> 1); io_master->cci_client->i2c_freq_mode = i2c_info->i2c_freq_mode; break; case I2C_MASTER: io_master->client->addr = i2c_info->slave_addr; break; case SPI_MASTER: break; default: CAM_ERR(CAM_SENSOR, "Invalid master type: %d", io_master->master_type); rc = -EINVAL; break; } return rc; } /** * Name : cam_sensor_i2c_command_parser * Description : Parse CSL CCI packet and apply register settings Loading @@ -253,12 +288,16 @@ static int32_t cam_sensor_handle_continuous_write( * WAIT + n x RND_WR with num_cmd_buf = 1. Do not exepect RD/WR * with different cmd_type and op_code in one command buffer. */ int cam_sensor_i2c_command_parser(struct i2c_settings_array *i2c_reg_settings, struct cam_cmd_buf_desc *cmd_desc, int32_t num_cmd_buffers) int cam_sensor_i2c_command_parser( struct camera_io_master *io_master, struct i2c_settings_array *i2c_reg_settings, struct cam_cmd_buf_desc *cmd_desc, int32_t num_cmd_buffers) { int16_t rc = 0, i = 0; size_t len_of_buff = 0; uint64_t generic_ptr; uint16_t cmd_length_in_bytes = 0; for (i = 0; i < num_cmd_buffers; i++) { uint32_t *cmd_buf = NULL; Loading @@ -272,7 +311,6 @@ int cam_sensor_i2c_command_parser(struct i2c_settings_array *i2c_reg_settings, * It is not expected the same settings to * be spread across multiple cmd buffers */ CAM_DBG(CAM_SENSOR, "Total cmd Buf in Bytes: %d", cmd_desc[i].length); Loading Loading @@ -373,6 +411,22 @@ int cam_sensor_i2c_command_parser(struct i2c_settings_array *i2c_reg_settings, } break; } case CAMERA_SENSOR_CMD_TYPE_I2C_INFO: { rc = cam_sensor_handle_slave_info( io_master, cmd_buf); if (rc) { CAM_ERR(CAM_SENSOR, "Handle slave info failed with rc: %d", rc); return rc; } cmd_length_in_bytes = sizeof(struct cam_cmd_i2c_info); cmd_buf += cmd_length_in_bytes / sizeof(uint32_t); byte_cnt += cmd_length_in_bytes; break; } default: CAM_ERR(CAM_SENSOR, "Invalid Command Type:%d", cmm_hdr->cmd_type); Loading