Beispiel #1
0
int32_t msm_camera_eeprom_read_tbl(struct msm_camera_eeprom_client *ectrl,
	struct msm_camera_eeprom_read_t *read_tbl, uint16_t tbl_size)
{
	int i, rc = 0;
	CDBG("%s: open", __func__);
	if (read_tbl == NULL)
		return rc;

	for (i = 0; i < tbl_size; i++) {
		rc = msm_camera_eeprom_read
			(ectrl, read_tbl[i].reg_addr,
			read_tbl[i].dest_ptr, read_tbl[i].num_byte,
			read_tbl[i].convert_endian);
		if (rc < 0)	{
			CDBG("%s: read failed\n", __func__);
			return rc;
		}
	}
	CDBG("%s: done", __func__);
	return rc;
}
int32_t msm_camera_eeprom_read_tbl_hi542(struct msm_eeprom_ctrl_t *ectrl,
	struct msm_camera_eeprom_read_t *read_tbl, uint16_t tbl_size)
{
	int i, rc = 0;
	uint16_t read_flag;
	pr_err("%s: open\n", __func__);
	if (read_tbl == NULL)
		return rc;
	//otp_cfg1 timing setting
	msm_camera_i2c_write(&ectrl->i2c_client,0x0740,0x1A,MSM_CAMERA_I2C_BYTE_DATA);
	//otp_cfg8
	msm_camera_i2c_write(&ectrl->i2c_client,0x0747,0x06,MSM_CAMERA_I2C_BYTE_DATA);
	//otp_cf12 control register setting
	msm_camera_i2c_write(&ectrl->i2c_client,0x0711,0x81,MSM_CAMERA_I2C_BYTE_DATA);
	
	//opt_addr_h address setting 0x0381
	//msm_camera_i2c_write(&ectrl->i2c_client,0x0720,0x03,MSM_CAMERA_I2C_BYTE_DATA);
	//opt_addr_l
	//msm_camera_i2c_write(&ectrl->i2c_client,0x0721,0x81,MSM_CAMERA_I2C_BYTE_DATA);

	for (i = 0; i < 1; i++) {
			//opt_addr_h address setting 0x0381
	msm_camera_i2c_write(&ectrl->i2c_client,0x0720,0x03,MSM_CAMERA_I2C_BYTE_DATA);
	//opt_addr_l
	msm_camera_i2c_write(&ectrl->i2c_client,0x0721,0x81,MSM_CAMERA_I2C_BYTE_DATA);
	rc = msm_camera_eeprom_read
			(ectrl, read_tbl[i].reg_addr,
			read_tbl[i].dest_ptr, read_tbl[i].num_byte,
			read_tbl[i].convert_endian);
	    if (rc < 0) {
			pr_err("%s: read failed\n", __func__);
			return rc;
		}
	}
	for (i = 1; i < 2; i++) {

	//opt_addr_h address setting 0x0381
	msm_camera_i2c_write(&ectrl->i2c_client,0x0720,0x03,MSM_CAMERA_I2C_BYTE_DATA);
	//opt_addr_l
	msm_camera_i2c_write(&ectrl->i2c_client,0x0721,0x8f,MSM_CAMERA_I2C_BYTE_DATA);
							msm_camera_i2c_read(&ectrl->i2c_client,
			           0x0722, 
				    &read_flag, 
				    MSM_CAMERA_I2C_BYTE_DATA);
	pr_err("msm_camera_eeprom_read00 %s  read_flag0 =0x%x  ",__func__,read_flag);
	if(read_flag==1)
	{
								//opt_addr_h address setting 0x0381
	msm_camera_i2c_write(&ectrl->i2c_client,0x0720,0x03,MSM_CAMERA_I2C_BYTE_DATA);
	//opt_addr_l
	msm_camera_i2c_write(&ectrl->i2c_client,0x0721,0x90,MSM_CAMERA_I2C_BYTE_DATA);
	rc = msm_camera_eeprom_read
			(ectrl, read_tbl[i].reg_addr,
			read_tbl[i].dest_ptr, read_tbl[i].num_byte,
			read_tbl[i].convert_endian);
	    if (rc < 0) {
			pr_err("%s: read failed\n", __func__);
			return rc;
			}
	}
	else if(read_flag==3)
	{
				//opt_addr_h address setting 0x0381
	msm_camera_i2c_write(&ectrl->i2c_client,0x0720,0x03,MSM_CAMERA_I2C_BYTE_DATA);
	//opt_addr_l
	msm_camera_i2c_write(&ectrl->i2c_client,0x0721,0x92,MSM_CAMERA_I2C_BYTE_DATA);
	rc = msm_camera_eeprom_read
			(ectrl, read_tbl[i].reg_addr,
			read_tbl[i].dest_ptr, read_tbl[i].num_byte,
			read_tbl[i].convert_endian);
	    if (rc < 0) {
			pr_err("%s: read failed\n", __func__);
			return rc;
			}
	}
	else if(read_flag==7){
				//opt_addr_h address setting 0x0381
	msm_camera_i2c_write(&ectrl->i2c_client,0x0720,0x03,MSM_CAMERA_I2C_BYTE_DATA);
	//opt_addr_l
	msm_camera_i2c_write(&ectrl->i2c_client,0x0721,0x94,MSM_CAMERA_I2C_BYTE_DATA);
		rc = msm_camera_eeprom_read
			(ectrl, read_tbl[i].reg_addr,
			read_tbl[i].dest_ptr, read_tbl[i].num_byte,
			read_tbl[i].convert_endian);
		  if (rc < 0) {
			pr_err("%s: read failed\n", __func__);
			return rc;
			}
		}
	}
	msm_camera_i2c_write(&ectrl->i2c_client, 0x0711,0x00,MSM_CAMERA_I2C_BYTE_DATA);//opt_ctl2
	pr_err("%s: done\n", __func__);
	return rc;
}
int32_t msm_camera_eeprom_read_tbl_ar0542(struct msm_eeprom_ctrl_t *ectrl,
	struct msm_camera_eeprom_read_t *read_tbl, uint16_t tbl_size)
{
  uint16_t temp = 0;
  int i, rc = 0;
	pr_err("%s: open\n", __func__);
	if (read_tbl == NULL)
		return rc;
		  if(ar0542_check_EEPROM_status(ectrl,0x30))
  {
	for (i = 0; i < 1; i++) {
		
		  msm_camera_i2c_read(&ectrl->i2c_client,0x3800,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3800   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3801,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3801   = 0x%x\n",__func__,temp);
  	msm_camera_i2c_read(&ectrl->i2c_client,0x3802,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3802   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3803,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3803   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3804,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3804   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3805,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3805   = 0x%x\n",__func__,temp);
  	msm_camera_i2c_read(&ectrl->i2c_client,0x3806,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3806   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3807,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3807   = 0x%x\n",__func__,temp);
  	msm_camera_i2c_read(&ectrl->i2c_client,0x3808,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3808   = 0x%x\n",__func__,temp);
		rc = msm_camera_eeprom_read
			(ectrl, read_tbl[i].reg_addr,
			read_tbl[i].dest_ptr, read_tbl[i].num_byte,
			read_tbl[i].convert_endian);

		if (rc < 0) {
			pr_err("%s: read failed\n", __func__);



			return rc;
		}
	}
}
	if(ar0542_check_EEPROM_status(ectrl,0x31))
  {
	for (i = 0; i < 1; i++) {
		
		  msm_camera_i2c_read(&ectrl->i2c_client,0x3800,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3800   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3801,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3801   = 0x%x\n",__func__,temp);
  	msm_camera_i2c_read(&ectrl->i2c_client,0x3802,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3802   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3803,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3803   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3804,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3804   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3805,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3805   = 0x%x\n",__func__,temp);
  	msm_camera_i2c_read(&ectrl->i2c_client,0x3806,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3806   = 0x%x\n",__func__,temp);
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x3807,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3807   = 0x%x\n",__func__,temp);
  	msm_camera_i2c_read(&ectrl->i2c_client,0x3808,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x3808   = 0x%x\n",__func__,temp);
		rc = msm_camera_eeprom_read
			(ectrl, read_tbl[i].reg_addr,
			read_tbl[i].dest_ptr, read_tbl[i].num_byte,
			read_tbl[i].convert_endian);

		if (rc < 0) {
			pr_err("%s: read failed\n", __func__);
			return rc;
		}
	}
}	
		
  if(ar0542_check_EEPROM_status(ectrl,0x32))
  {
		for (i = 1; i < 2; i++) {
		msm_camera_i2c_read(&ectrl->i2c_client,0x38d5,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38d5   = 0x%x\n",__func__,temp);
		msm_camera_i2c_read(&ectrl->i2c_client,0x38d6,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38d6   = 0x%x\n",__func__,temp);
 		msm_camera_i2c_read(&ectrl->i2c_client,0x38d7,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38d7   = 0x%x\n",__func__,temp);
  	msm_camera_i2c_read(&ectrl->i2c_client,0x38d8,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38d8   = 0x%x\n",__func__,temp);
 
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x38da,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38da   = 0x%x\n",__func__,temp);
 
  	msm_camera_i2c_read(&ectrl->i2c_client,0x38dc,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38dc   = 0x%x\n",__func__,temp);
		rc = msm_camera_eeprom_read
		(ectrl, read_tbl[i].reg_addr,
			read_tbl[i].dest_ptr, read_tbl[i].num_byte,
			read_tbl[i].convert_endian);
		if (rc < 0) {
			pr_err("%s: read failed\n", __func__);			

		}
	}
}
  if(ar0542_check_EEPROM_status(ectrl,0x33))
  {
	for (i = 1; i < 2; i++) {
				  msm_camera_i2c_read(&ectrl->i2c_client,0x38d5,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38d5   = 0x%x\n",__func__,temp);
		msm_camera_i2c_read(&ectrl->i2c_client,0x38d6,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38d6   = 0x%x\n",__func__,temp);
 		msm_camera_i2c_read(&ectrl->i2c_client,0x38d7,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38d7   = 0x%x\n",__func__,temp);
  	msm_camera_i2c_read(&ectrl->i2c_client,0x38d8,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38d8   = 0x%x\n",__func__,temp);
 
 	  msm_camera_i2c_read(&ectrl->i2c_client,0x38da,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38da   = 0x%x\n",__func__,temp);
 
  	msm_camera_i2c_read(&ectrl->i2c_client,0x38dc,&temp,
    MSM_CAMERA_I2C_WORD_DATA);
 		pr_err("%s: 0x38dc   = 0x%x\n",__func__,temp);
		rc = msm_camera_eeprom_read
		(ectrl, read_tbl[i].reg_addr,
			read_tbl[i].dest_ptr, read_tbl[i].num_byte,
			read_tbl[i].convert_endian);

		if (rc < 0) {
			pr_err("%s: read failed\n", __func__);			
			}
	}
}
	CDBG("%s: done\n", __func__);
	return rc;
  
}