static int32_t ov2720_write_exp_gain(struct msm_sensor_ctrl_t *s_ctrl, uint16_t gain, uint32_t line) { uint32_t fl_lines, offset; uint8_t int_time[3]; fl_lines = (s_ctrl->curr_frame_length_lines * s_ctrl->fps_divider) / Q10; offset = s_ctrl->sensor_exp_gain_info->vert_offset; if (line > (fl_lines - offset)) fl_lines = line + offset; s_ctrl->func_tbl->sensor_group_hold_on(s_ctrl); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, s_ctrl->sensor_output_reg_addr->frame_length_lines, fl_lines, MSM_CAMERA_I2C_WORD_DATA); int_time[0] = line >> 12; int_time[1] = line >> 4; int_time[2] = line << 4; msm_camera_i2c_write_seq(s_ctrl->sensor_i2c_client, s_ctrl->sensor_exp_gain_info->coarse_int_time_addr-1, &int_time[0], 3); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, s_ctrl->sensor_exp_gain_info->global_gain_addr, gain, MSM_CAMERA_I2C_WORD_DATA); s_ctrl->func_tbl->sensor_group_hold_off(s_ctrl); return 0; }
void RamWrite32A_lc898111(uint16_t addr, uint32_t data) { int32_t rc = 0; uint8_t *data_ptr; uint8_t dummy[4]; if (binder_i2c_client == NULL) return; data_ptr = (uint8_t *)(&data); dummy[0] = *(data_ptr+3); dummy[1] = *(data_ptr+2); dummy[2] = *(data_ptr+1); dummy[3] = *(data_ptr); *(data_ptr) = dummy[0]; *(data_ptr+1) = dummy[1]; *(data_ptr+2) = dummy[2]; *(data_ptr+3) = dummy[3]; rc = msm_camera_i2c_write_seq(binder_i2c_client, addr, (uint8_t *)&data, 4); if (rc < 0) { pr_err("%s i2c write failed (%d)\n", __func__, rc); return; } }
void RegWriteA_lc898111(uint16_t addr, uint8_t data) { int32_t rc = 0; if (binder_i2c_client == NULL) return; rc = msm_camera_i2c_write_seq(binder_i2c_client, addr, (uint8_t *)&data, 1); if (rc < 0) { pr_err("%s i2c write failed (%d)\n", __func__, rc); return; } }
/* TBD: Need to revisit*/ static int32_t ov10820_write_exp_gain(struct msm_sensor_ctrl_t *s_ctrl, uint16_t gain, uint32_t line, int32_t luma_avg, uint16_t fgain) { uint32_t fl_lines, offset; uint8_t int_time[3]; fl_lines = (s_ctrl->curr_frame_length_lines * s_ctrl->fps_divider) / Q10; offset = s_ctrl->sensor_exp_gain_info->vert_offset; if (line > (fl_lines - offset)) fl_lines = line + offset; fl_lines += (fl_lines & 0x1); int_time[0] = line >> 12; int_time[1] = line >> 4; int_time[2] = line << 4; if (allow_asic_control) { msm_camera_i2c_write(s_ctrl->sensor_i2c_client, s_ctrl->sensor_output_reg_addr-> frame_length_lines, fl_lines, MSM_CAMERA_I2C_WORD_DATA); ov660_set_i2c_bypass(0); ov660_set_exposure_gain(gain, line); ov660_set_i2c_bypass(1); } else { s_ctrl->func_tbl->sensor_group_hold_on(s_ctrl); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, s_ctrl->sensor_output_reg_addr-> frame_length_lines, fl_lines, MSM_CAMERA_I2C_WORD_DATA); msm_camera_i2c_write_seq(s_ctrl->sensor_i2c_client, s_ctrl->sensor_exp_gain_info-> coarse_int_time_addr, &int_time[0], 3); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, s_ctrl->sensor_exp_gain_info-> global_gain_addr, gain, MSM_CAMERA_I2C_BYTE_DATA); s_ctrl->func_tbl->sensor_group_hold_off(s_ctrl); if (update_ov660_gain) ov660_set_exposure_gain2(gain, line); } return 0; }
static int32_t ov5693_write_exp_gain(struct msm_sensor_ctrl_t *s_ctrl, uint16_t gain, uint32_t line, int32_t x, uint16_t y) { uint32_t fl_lines, offset; uint8_t int_time[3]; s_ctrl->func_tbl->sensor_group_hold_on(s_ctrl); /* adjust the frame rate */ fl_lines = (s_ctrl->curr_frame_length_lines * s_ctrl->fps_divider) / Q10; offset = s_ctrl->sensor_exp_gain_info->vert_offset; if (line > (fl_lines - offset)) fl_lines = line + offset; fl_lines += (fl_lines & 0x1); CDBG("gain:%d line:%d fl_line:%d\n", gain, line, fl_lines); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, s_ctrl->sensor_output_reg_addr->frame_length_lines, fl_lines, MSM_CAMERA_I2C_WORD_DATA); /* exposure control */ line = line << 4; int_time[0] = (uint8_t)(line >> 16); int_time[1] = (uint8_t)((line & 0xFFFF) >> 8); int_time[2] = (uint8_t)(line & 0xFF); msm_camera_i2c_write_seq(s_ctrl->sensor_i2c_client, s_ctrl->sensor_exp_gain_info->coarse_int_time_addr, &int_time[0], 3); /* gain control */ msm_camera_i2c_write(s_ctrl->sensor_i2c_client, s_ctrl->sensor_exp_gain_info->global_gain_addr, gain, MSM_CAMERA_I2C_WORD_DATA); s_ctrl->func_tbl->sensor_group_hold_off(s_ctrl); return 0; }