void RegReadA_lc898111(uint16_t addr, uint8_t* data) { int32_t rc = 0; if (binder_i2c_client == NULL) return; rc = msm_camera_i2c_read_seq(binder_i2c_client, addr, (uint8_t *)data, 1); if (rc < 0) { pr_err("%s i2c read failed (%d)\n", __func__, rc); return; } }
int32_t msm_camera_eeprom_read(struct msm_eeprom_ctrl_t *ectrl, uint32_t reg_addr, void *data, uint32_t num_byte, uint16_t convert_endian) { int rc = 0; if (ectrl->func_tbl.eeprom_set_dev_addr != NULL) ectrl->func_tbl.eeprom_set_dev_addr(ectrl, ®_addr); if (!convert_endian) { rc = msm_camera_i2c_read_seq( &ectrl->i2c_client, reg_addr, data, num_byte); } else { unsigned char buf[num_byte]; uint8_t *data_ptr = (uint8_t *) data; int i; rc = msm_camera_i2c_read_seq( &ectrl->i2c_client, reg_addr, buf, num_byte); for (i = 0; i < num_byte; i += 2) { data_ptr[i] = buf[i+1]; data_ptr[i+1] = buf[i]; } } return rc; }
void RamReadA_lc898111(uint16_t addr, uint16_t* data) { int32_t rc = 0; uint8_t *data_ptr; uint8_t dummy[2]; if (binder_i2c_client == NULL) return; rc = msm_camera_i2c_read_seq(binder_i2c_client, addr, (uint8_t *)data, 2); if (rc < 0) { pr_err("%s i2c read failed (%d)\n", __func__, rc); return; } data_ptr = (uint8_t *)data; dummy[0] = *(data_ptr+1); dummy[1] = *(data_ptr); *(data_ptr) = dummy[0]; *(data_ptr+1) = dummy[1]; }
static int32_t ov10820_read_otp(struct msm_sensor_ctrl_t *s_ctrl) { int32_t rc = 0; if (is_ov10820_otp_read == 1) return rc; /* Send PLL settings and stream on commmand */ rc = msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, ov10820_read_otp_settings, ARRAY_SIZE(ov10820_read_otp_settings), MSM_CAMERA_I2C_BYTE_DATA); if (rc < 0) { pr_err("%s: Unable to setup for otp read.\n", __func__); return rc; } usleep_range(5000, 5500); /* Read the otp */ rc = msm_camera_i2c_read_seq(s_ctrl->sensor_i2c_client, OV10820_OTP_ADDR, (uint8_t *)ov10820_otp, OV10820_OTP_SIZE); if (rc < 0) { pr_err("%s: Unable to read i2c seq!\n", __func__); goto exit; } is_ov10820_otp_read = 1; exit: /* Stop Streaming */ rc = msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0x0100, 0x00, MSM_CAMERA_I2C_BYTE_DATA); if (rc < 0) pr_err("%s: Unable to stop streaming of imager\n", __func__); return rc; }
int32_t msm_sensor_adjust_frame_lines2(struct msm_sensor_ctrl_t *s_ctrl, uint16_t res) { uint16_t cur_line = 0; uint16_t exp_fl_lines = 0; uint8_t int_time[3]; if (s_ctrl->sensor_exp_gain_info) { if (s_ctrl->prev_gain && s_ctrl->prev_line && s_ctrl->func_tbl->sensor_write_exp_gain) s_ctrl->func_tbl->sensor_write_exp_gain( s_ctrl, s_ctrl->prev_gain, s_ctrl->prev_line); msm_camera_i2c_read_seq(s_ctrl->sensor_i2c_client, s_ctrl->sensor_exp_gain_info->coarse_int_time_addr-1, &int_time[0], 3); cur_line |= int_time[0] << 12; cur_line |= int_time[1] << 4; cur_line |= int_time[2] >> 4; exp_fl_lines = cur_line + s_ctrl->sensor_exp_gain_info->vert_offset; if (exp_fl_lines > s_ctrl->msm_sensor_reg-> output_settings[res].frame_length_lines) msm_camera_i2c_write(s_ctrl->sensor_i2c_client, s_ctrl->sensor_output_reg_addr-> frame_length_lines, exp_fl_lines, MSM_CAMERA_I2C_WORD_DATA); CDBG("%s cur_line %x cur_fl_lines %x, exp_fl_lines %x\n", __func__, cur_line, s_ctrl->msm_sensor_reg-> output_settings[res].frame_length_lines, exp_fl_lines); } return 0; }