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;
	}
}
Пример #2
0
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, &reg_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;
}