int32_t msm_camera_cci_i2c_poll_table( struct msm_camera_i2c_client *client, struct msm_camera_i2c_reg_setting *poll_setting) { int i; int32_t rc = -EFAULT; struct msm_camera_i2c_reg_array *reg_setting; uint16_t client_addr_type; if (!client || !poll_setting) { pr_err("%s:%d failed\n", __func__, __LINE__); return rc; } reg_setting = poll_setting->reg_setting; client_addr_type = client->addr_type; client->addr_type = poll_setting->addr_type; for (i = 0; i < poll_setting->size; i++) { rc = msm_camera_cci_i2c_poll(client, reg_setting->reg_addr, reg_setting->reg_data, poll_setting->data_type); if (rc < 0) { pr_err("%s:%d failed, i = %d, rc = %d\n", __func__, __LINE__, i, rc); return rc; } reg_setting++; } client->addr_type = client_addr_type; return rc; }
int32_t msm_camera_cci_i2c_write_conf_tbl( struct msm_camera_i2c_client *client, struct msm_camera_i2c_reg_conf *reg_conf_tbl, uint16_t size, enum msm_camera_i2c_data_type data_type) { int i; int32_t rc = -EFAULT; for (i = 0; i < size; i++) { enum msm_camera_i2c_data_type dt; if (reg_conf_tbl->cmd_type == MSM_CAMERA_I2C_CMD_POLL) { rc = msm_camera_cci_i2c_poll(client, reg_conf_tbl->reg_addr, reg_conf_tbl->reg_data, reg_conf_tbl->dt); } else { if (reg_conf_tbl->dt == 0) dt = data_type; else dt = reg_conf_tbl->dt; switch (dt) { case MSM_CAMERA_I2C_BYTE_DATA: case MSM_CAMERA_I2C_WORD_DATA: rc = msm_camera_cci_i2c_write( client, reg_conf_tbl->reg_addr, reg_conf_tbl->reg_data, dt); break; case MSM_CAMERA_I2C_SET_BYTE_MASK: rc = msm_camera_cci_i2c_set_mask(client, reg_conf_tbl->reg_addr, reg_conf_tbl->reg_data, MSM_CAMERA_I2C_BYTE_DATA, 1); break; case MSM_CAMERA_I2C_UNSET_BYTE_MASK: rc = msm_camera_cci_i2c_set_mask(client, reg_conf_tbl->reg_addr, reg_conf_tbl->reg_data, MSM_CAMERA_I2C_BYTE_DATA, 0); break; case MSM_CAMERA_I2C_SET_WORD_MASK: rc = msm_camera_cci_i2c_set_mask(client, reg_conf_tbl->reg_addr, reg_conf_tbl->reg_data, MSM_CAMERA_I2C_WORD_DATA, 1); break; case MSM_CAMERA_I2C_UNSET_WORD_MASK: rc = msm_camera_cci_i2c_set_mask(client, reg_conf_tbl->reg_addr, reg_conf_tbl->reg_data, MSM_CAMERA_I2C_WORD_DATA, 0); break; case MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA: rc = msm_camera_cci_i2c_set_write_mask_data( client, reg_conf_tbl->reg_addr, reg_conf_tbl->reg_data, reg_conf_tbl->mask, MSM_CAMERA_I2C_BYTE_DATA); break; default: pr_err("%s: Unsupport data type: %d\n", __func__, dt); break; } } if (rc < 0) break; reg_conf_tbl++; } return rc; }