int32_t s5k5ca_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; printk("\n s5k5ca_sensor_setting() update_type:%d res:%d\n",update_type,res); if (update_type == MSM_SENSOR_REG_INIT) { //printk("PERIODIC : %d\n", res); s_ctrl->curr_csic_params = s_ctrl->csic_params[res]; //printk("CSI config in progress\n"); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIC_CFG, s_ctrl->curr_csic_params); //printk("CSI config is done\n"); mb(); //printk("Register INIT\n"); s_ctrl->curr_csi_params = NULL; rc=msm_sensor_enable_debugfs(s_ctrl); if( rc!=0 ) printk("s5k5ca_sensor_setting()rc:%d",rc); rc=msm_sensor_write_init_settings(s_ctrl); if( rc!=0 ) printk("s5k5ca_sensor_setting()rc:%d",rc); } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { //CDBG("PERIODIC : %d\n", res); if((res==0) &&(night_mode_flag==msm_v4l2_best_shot_night)) { rc=msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, &s5k5ca_confs_night_mode[0], res); if( rc!=0 ) printk("s5k5ca_sensor_setting()rc:%d",rc); } else rc=msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); if( rc!=0 ) printk("s5k5ca_sensor_setting()rc:%d",rc); if (res == MSM_SENSOR_RES_4) v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &vfe_clk); } return rc; }
int32_t msm_sensor_setting1(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; static int csi_config; s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); msleep(30); if (update_type == MSM_SENSOR_REG_INIT) { printk("Register INIT\n"); s_ctrl->curr_csi_params = NULL; msm_sensor_enable_debugfs(s_ctrl); msm_sensor_write_init_settings(s_ctrl); if (NULL != s_ctrl->func_tbl->sensor_download_af_firmware) { pr_err("+++++download af firmware+++++++++++ %s \n",__func__); rc=s_ctrl->func_tbl->sensor_download_af_firmware(s_ctrl); if(!rc) { printk("%s:ov5640 AF FW download success\n",__func__); #ifdef CONFIG_OV5640 download_flag=1; //download success is 1 #endif } } csi_config = 0; } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { printk("PERIODIC : %d\n", res); printk("%s:sensor_name = %s, res = %d\n",__func__, s_ctrl->sensordata->sensor_name, res); msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); msleep(30); if (!csi_config) { s_ctrl->curr_csic_params = s_ctrl->csic_params[res]; printk("CSI config in progress\n"); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIC_CFG, s_ctrl->curr_csic_params); printk("CSI config is done\n"); mb(); msleep(30); csi_config = 1; } v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->sensordata->pdata->ioclk.vfe_clk_rate); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(50); } return rc; }
/* msm_sensor_write_res_settings */ int32_t yacd5c1sbdbc_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl, uint16_t res) { int32_t rc = 0; //CDBG("[F_PANTECH_CAMERA]%s: res=%d / check_zsl_flag=%d\n", __func__,res,check_zsl_flag); if((check_zsl_flag == 0) && (res == 0)) { SKYCDBG("%s:[F_PANTECH_CAMERA] Write reg [AE, AWB Off SET]\n", __func__); rc = msm_camera_i2c_write_tbl( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->checkzsl_cfg_settings[0],//[AE, AWB Off SET] s_ctrl->msm_sensor_reg->checkzsl_cfg_settings_size, s_ctrl->msm_sensor_reg->default_data_type); } rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); if (rc < 0) return rc; #ifndef CONFIG_PANTECH_CAMERA_YACD5C1SBDBC rc = msm_sensor_write_output_settings(s_ctrl, res); #endif return rc; }
static int32_t ov10820_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; if (update_type == MSM_SENSOR_REG_INIT) { s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); msm_sensor_write_init_settings(s_ctrl); } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { if (ov660_exists) { rc = ov660_set_sensor_mode(res, revision); if (rc < 0) return rc; } rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); if (rc < 0) return rc; v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->msm_sensor_reg-> output_settings[res].op_pixel_clk); } return rc; }
int32_t mt9p017_write_init_settings(struct msm_sensor_ctrl_t *s_ctrl) { int32_t rc=0, i; printk("%s is called !\n", __func__); for (i = 0; i < s_ctrl->msm_sensor_reg->init_size; i++) { rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->init_settings, i); if (rc < 0) break; } #ifndef MT9P017_OTP_SUPPORT rc = msm_camera_i2c_write_tbl( s_ctrl->sensor_i2c_client, &mt9p017_recommend_settings_5[0], ARRAY_SIZE(mt9p017_recommend_settings_5), MSM_CAMERA_I2C_WORD_DATA); #else mt9p017_set_lc(s_ctrl); #endif return rc; }
int32_t msm_sensor_ov9740_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl, uint16_t res) { int32_t rc; rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); return rc; }
int32_t hi542_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; static int csi_config; if (update_type == MSM_SENSOR_REG_INIT) { CDBG("Register INIT\n"); printk("##### %s line%d: Register INIT\n",__func__,__LINE__); s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); msleep(66); s_ctrl->curr_csi_params = NULL; msm_sensor_enable_debugfs(s_ctrl); printk("##### %s line%d: begin to write init setting !\n",__func__,__LINE__); msm_sensor_write_init_settings(s_ctrl); printk("##### %s line%d: init setting end !\n",__func__,__LINE__); csi_config = 0; } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { CDBG("PERIODIC : %d\n", res); s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); msleep(66); msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); msleep(100); if (!csi_config) { s_ctrl->curr_csic_params = s_ctrl->csic_params[res]; CDBG("CSI config in progress\n"); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIC_CFG, s_ctrl->curr_csic_params); CDBG("CSI config is done\n"); mb(); msleep(30); csi_config = 1; } //zxj ++ #ifdef ORIGINAL_VERSION v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->sensordata->pdata->ioclk.vfe_clk_rate); #else printk("##### %s line%d: vfe_clk_rate = %d\n",__func__,__LINE__,vfe_clk_rate); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &vfe_clk_rate); #endif //zxj -- s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(100); } return rc; }
int32_t mt9t113_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; pr_err("%s %d\n", __func__,update_type); s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); msleep(30); if (update_type == MSM_SENSOR_REG_INIT) { //s_ctrl->curr_csi_params = NULL; msm_sensor_enable_debugfs(s_ctrl); /*uesd to write special initialization arrays of some sensors*/ if(s_ctrl->func_tbl->sensor_write_init_settings) { s_ctrl->func_tbl->sensor_write_init_settings(s_ctrl); } else { msm_sensor_write_init_settings(s_ctrl); } } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); #if 0 if (s_ctrl->curr_csi_params != s_ctrl->csi_params[res]) { s_ctrl->curr_csi_params = s_ctrl->csi_params[res]; s_ctrl->curr_csi_params->csid_params.lane_assign = s_ctrl->sensordata->sensor_platform_info-> csi_lane_params->csi_lane_assign; s_ctrl->curr_csi_params->csiphy_params.lane_mask = s_ctrl->sensordata->sensor_platform_info-> csi_lane_params->csi_lane_mask; v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSID_CFG, &s_ctrl->curr_csi_params->csid_params); mb(); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIPHY_CFG, &s_ctrl->curr_csi_params->csiphy_params); mb(); msleep(20); } #endif v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->msm_sensor_reg-> output_settings[res].op_pixel_clk); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(30); } pr_err("%s rc = %d\n", __func__,rc); return rc; }
int32_t msm_sensor_setting2(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; static int csi_config; s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); if (csi_config == 0 || res == 0) msleep(66); else msleep(266); if (update_type == MSM_SENSOR_REG_INIT) { CDBG("Register INIT\n"); s_ctrl->curr_csi_params = NULL; msm_camera_i2c_write( s_ctrl->sensor_i2c_client, 0x103, 0x1, MSM_CAMERA_I2C_BYTE_DATA); msm_sensor_enable_debugfs(s_ctrl); msm_sensor_write_init_settings(s_ctrl); csi_config = 0; } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { CDBG("PERIODIC : %d\n", res); msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); msleep(30); if (!csi_config) { s_ctrl->curr_csic_params = s_ctrl->csic_params[res]; CDBG("CSI config in progress\n"); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIC_CFG, s_ctrl->curr_csic_params); CDBG("CSI config is done\n"); mb(); msleep(30); csi_config = 1; msm_camera_i2c_write( s_ctrl->sensor_i2c_client, 0x100, 0x1, MSM_CAMERA_I2C_BYTE_DATA); } msm_camera_i2c_write( s_ctrl->sensor_i2c_client, 0x4800, 0x4, MSM_CAMERA_I2C_BYTE_DATA); msleep(266); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(50); } return rc; }
//Sharpness: -3 ~ +4 static int32_t ov9740_set_sharpness(struct msm_sensor_ctrl_t *s_ctrl, uint32_t value) { int32_t rc = 0; CDBG("ov9740_set_sharpness: value= %d\n", value); //default when sharpness=0 :value = 3 if(value >= 0 && value <= 7) { s_ctrl->func_tbl->sensor_group_hold_on(s_ctrl); rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, &ov9740_sharpness_conf[0], value); s_ctrl->func_tbl->sensor_group_hold_off(s_ctrl); } else { pr_err("ov9740_set_sharpness: value= %d not support\n", value); } return rc; }
int32_t bf3905_write_init_settings(struct msm_sensor_ctrl_t *s_ctrl) { int32_t rc=0, i; printk("%s is called !\n", __func__); for (i = 0; i < s_ctrl->msm_sensor_reg->init_size; i++) { rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->init_settings, i); if (rc < 0) break; } return rc; }
int32_t msm_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl, uint16_t res) { int32_t rc = 0; #ifdef CONFIG_MACH_MSM8960_STARQ SKYCDBG("%s res=%d\n", __func__, res); switch (res) { case 0: if(s_ctrl->sensor_id_info->sensor_id == S5K4ECGX_ID) { rc = s5k4ecgx_snapshot_config(); } else if(s_ctrl->sensor_id_info->sensor_id == MT9V113_ID) { rc = mt9v113_snapshot_config(); } break; case 1: if(s_ctrl->sensor_id_info->sensor_id == S5K4ECGX_ID) { rc = s5k4ecgx_video_config(); } else if(s_ctrl->sensor_id_info->sensor_id == MT9V113_ID) { rc = mt9v113_video_config(); } break; default: SKYCDBG("%s fail res=%d\n", __func__, res); break; } SKYCDBG("%s X (%d)\n", __func__, rc); #else rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); if (rc < 0) return rc; rc = msm_sensor_write_output_settings(s_ctrl, res); #endif return rc; }
int32_t msm_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl, uint16_t res) { int32_t rc; CDBG("+++\n"); rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); if (rc < 0) return rc; /* BEGIN Dom_Lin@pegatron [2012/05/04] [Reduce the time of opening back camera] */ if (s_ctrl->sensordata->sensor_name == NULL || !(0 == strcmp(s_ctrl->sensordata->sensor_name, "ov5640"))) { rc = msm_sensor_write_output_settings(s_ctrl, res); } /* END Dom_Lin@pegatron [2012/05/04] [Reduce the time of opening back camera] */ return rc; }
int32_t msm_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl, uint16_t res) { int32_t rc; rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); if (rc < 0) return rc; rc = msm_sensor_write_output_settings(s_ctrl, res); if (rc < 0) return rc; if (s_ctrl->func_tbl->sensor_adjust_frame_lines) rc = s_ctrl->func_tbl->sensor_adjust_frame_lines(s_ctrl, res); return rc; }
int32_t msm_sensor_setting1(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; static int csi_config; printk("%s : E\n", __func__); // [email protected] s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); msleep(30); if (update_type == MSM_SENSOR_REG_INIT) { CDBG("Register INIT\n"); s_ctrl->curr_csi_params = NULL; msm_sensor_enable_debugfs(s_ctrl); msm_sensor_write_init_settings(s_ctrl); csi_config = 0; } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { CDBG("PERIODIC : %d\n", res); msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); msleep(30); if (!csi_config) { s_ctrl->curr_csic_params = s_ctrl->csic_params[res]; CDBG("CSI config in progress\n"); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIC_CFG, s_ctrl->curr_csic_params); CDBG("CSI config is done\n"); mb(); msleep(30); csi_config = 1; } v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->sensordata->pdata->ioclk.vfe_clk_rate); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(50); } printk("%s : X\n", __func__); // [email protected] return rc; }
int32_t msm_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl, uint16_t res) { int32_t rc; rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); if (rc < 0) return rc; rc = msm_sensor_write_output_settings(s_ctrl, res); if (rc < 0) return rc; #if 0 /*20130110, wisungho, color point기능 동작시 preview화면과 snapshot사진 색감 차이 문제로 인해 막음. */ if (s_ctrl->func_tbl->sensor_adjust_frame_lines) rc = s_ctrl->func_tbl->sensor_adjust_frame_lines(s_ctrl, res); #endif return rc; }
int32_t msm_sensor_setting3(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; static int csi_config; if (update_type == MSM_SENSOR_REG_INIT) { CDBG("Register INIT\n"); s_ctrl->curr_csi_params = NULL; csi_config = 0; msm_camera_i2c_write( s_ctrl->sensor_i2c_client, 0x0e, 0x08, MSM_CAMERA_I2C_BYTE_DATA); } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { CDBG("PERIODIC : %d\n", res); if (res == 0) return 0; if (!csi_config) { msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); msleep(30); s_ctrl->curr_csic_params = s_ctrl->csic_params[res]; CDBG("CSI config in progress\n"); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIC_CFG, s_ctrl->curr_csic_params); CDBG("CSI config is done\n"); mb(); msleep(30); msm_camera_i2c_write( s_ctrl->sensor_i2c_client, 0x0e, 0x00, MSM_CAMERA_I2C_BYTE_DATA); csi_config = 1; } msleep(50); } return rc; }
int ov7692_effect_msm_sensor_s_ctrl_by_enum(struct msm_sensor_ctrl_t *s_ctrl, struct msm_sensor_v4l2_ctrl_info_t *ctrl_info, int value) { int rc = 0; effect_value = value; if (effect_value == CAMERA_EFFECT_OFF) { rc = msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->no_effect_settings, 0); if (rc < 0) { CDBG("write faield\n"); return rc; } msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0xda, SAT_U, MSM_CAMERA_I2C_BYTE_DATA); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0xdb, SAT_V, MSM_CAMERA_I2C_BYTE_DATA); } else { rc = msm_sensor_write_enum_conf_array( s_ctrl->sensor_i2c_client, ctrl_info->enum_cfg_settings, value); } return rc; }
int32_t s5k5ca_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; printk("\n s5k5ca_sensor_setting() update_type:%d res:%d\n",update_type,res); if (update_type == MSM_SENSOR_REG_INIT) { //printk("PERIODIC : %d\n", res); s_ctrl->curr_csic_params = s_ctrl->csic_params[res]; //printk("CSI config in progress\n"); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIC_CFG, s_ctrl->curr_csic_params); //printk("CSI config is done\n"); mb(); //printk("Register INIT\n"); s_ctrl->curr_csi_params = NULL; rc=msm_sensor_enable_debugfs(s_ctrl); if( rc!=0 ) printk("s5k5ca_sensor_setting()rc:%d",rc); rc=msm_sensor_write_init_settings(s_ctrl); if( rc!=0 ) printk("s5k5ca_sensor_setting()rc:%d",rc); } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { //CDBG("PERIODIC : %d\n", res); //++ petershih -20130225 - tmp add ++ if(res == 0) { rc=msm_camera_i2c_write_tbl( s5k5ca_s_ctrl.sensor_i2c_client, s5k5ca_pre_capture_settings, ARRAY_SIZE(s5k5ca_pre_capture_settings), s5k5ca_s_ctrl.msm_sensor_reg->default_data_type); if( rc!=0 ) printk("s5k5ca_sensor_setting()s5k5ca_pre_capture_settings rc:%d",rc); msleep(140); } #if 0 else { rc=msm_camera_i2c_write_tbl( s5k5ca_s_ctrl.sensor_i2c_client, s5k5ca_pre_preview_settings, ARRAY_SIZE(s5k5ca_pre_preview_settings), s5k5ca_s_ctrl.msm_sensor_reg->default_data_type); if( rc!=0 ) printk("s5k5ca_sensor_setting()s5k5ca_pre_preview_settings rc:%d",rc); msleep(140); } #endif //-- petershih -20130225 - tmp add -- if((res==0) &&(night_mode_flag==msm_v4l2_best_shot_night)) { rc=msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, &s5k5ca_confs_night_mode[0], res); if( rc!=0 ) printk("s5k5ca_sensor_setting()rc:%d",rc); } else rc=msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); if( rc!=0 ) printk("s5k5ca_sensor_setting()rc:%d",rc); if (res == MSM_SENSOR_RES_4) v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &vfe_clk); } return rc; }
int32_t mt9p017_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; static int csi_config; struct msm_cam_media_controller *pmctl = NULL; struct msm_actuator_ctrl_t *a_ctrl = NULL; int16_t stored_step_pos=-1; extern uint32_t my_mctl_handle; msleep(30); if (update_type == MSM_SENSOR_REG_INIT) { s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); printk("Register INIT\n"); s_ctrl->curr_csi_params = NULL; msm_sensor_enable_debugfs(s_ctrl); if(s_ctrl->func_tbl->sensor_write_init_settings) { s_ctrl->func_tbl->sensor_write_init_settings(s_ctrl); } else { msm_sensor_write_init_settings(s_ctrl); } csi_config = 0; s_ctrl->func_tbl->sensor_start_stream(s_ctrl); } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { printk("PERIODIC : %d\n", res); /* here we need to get the actuator ctrl to do something to actuator * before writing registers of preview or snapshot, move the actuator * to init position 0, after sensor switched mode successfully, move * to original position to get clear image */ pmctl = msm_camera_get_mctl(my_mctl_handle); a_ctrl = get_actrl(pmctl->act_sdev); stored_step_pos= a_ctrl->curr_step_pos; printk("nowt the pos is %d\n", stored_step_pos); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0x30F2, 0, MSM_CAMERA_I2C_WORD_DATA); s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); msm_sensor_write_conf_array( s_ctrl->sensor_i2c_client, s_ctrl->msm_sensor_reg->mode_settings, res); msleep(30); if (!csi_config) { s_ctrl->curr_csic_params = s_ctrl->csic_params[res]; CDBG("CSI config in progress\n"); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIC_CFG, s_ctrl->curr_csic_params); CDBG("CSI config is done\n"); mb(); msleep(30); csi_config = 1; } v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->sensordata->pdata->ioclk.vfe_clk_rate); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0x30F2, a_ctrl->step_position_table[stored_step_pos], MSM_CAMERA_I2C_WORD_DATA); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(50); } return rc; }
int32_t pip_ov7695_ctrl(int cmd, struct msm_camera_pip_ctl *pip_ctl) { int rc = 0; struct msm_camera_i2c_client sensor_i2c_client; struct i2c_client client; CDBG("%s IN, cmd:%d\r\n", __func__, cmd); switch(cmd) { case PIP_CRL_WRITE_SETTINGS: if(NULL == pip_ctl){ CDBG("%s parameters check error, exit\r\n", __func__); return rc; } memcpy(&sensor_i2c_client, pip_ctl->sensor_i2c_client, sizeof(struct msm_camera_i2c_client)); memcpy(&client, pip_ctl->sensor_i2c_client->client, sizeof(struct i2c_client)); client.addr = ov7695_i2c_address; sensor_i2c_client.client = &client; CDBG("write_ctl:%d\r\n", pip_ctl->write_ctl); if(PIP_REG_SETTINGS_INIT == pip_ctl->write_ctl) { rc = msm_sensor_write_all_conf_array( &sensor_i2c_client, &ov7695_raw_pip_init_conf_slave[0], ARRAY_SIZE(ov7695_raw_pip_init_conf_slave)); } else { rc = msm_sensor_write_conf_array( &sensor_i2c_client, &ov7695_raw_pip_confs_slave[0], pip_ctl->write_ctl); } break; case PIP_CRL_POWERUP: if(0 != ov7695_pwdn_pin) { CDBG("PIP ctrl, set the gpio:%d to 1\r\n", ov7695_pwdn_pin); gpio_direction_output(ov7695_pwdn_pin, 1); } break; case PIP_CRL_POWERDOWN: if(0 != ov7695_pwdn_pin) { CDBG("PIP ctrl, set the gpio:%d to 0\r\n", ov7695_pwdn_pin); gpio_direction_output(ov7695_pwdn_pin, 0); } break; case PIP_CTL_RESET_HW_PULSE: break; case PIP_CTL_RESET_SW: if(NULL == pip_ctl){ CDBG("%s parameters check error, exit\r\n", __func__); return rc; } memcpy(&sensor_i2c_client, pip_ctl->sensor_i2c_client, sizeof(struct msm_camera_i2c_client)); memcpy(&client, pip_ctl->sensor_i2c_client->client, sizeof(struct i2c_client)); client.addr = ov7695_i2c_address; sensor_i2c_client.client = &client; msm_camera_i2c_write(&sensor_i2c_client, 0x103, 0x1, MSM_CAMERA_I2C_BYTE_DATA); break; default: break; } return rc; }