int32_t ov5693_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); // Software reset msm_camera_i2c_write( s_ctrl->sensor_i2c_client, 0x103, 0x1, MSM_CAMERA_I2C_BYTE_DATA); msm_sensor_write_init_settings(s_ctrl); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0x100, 0x1, MSM_CAMERA_I2C_BYTE_DATA); #if 0 // from QCT Reference driver ov5693_read_opt(s_ctrl); msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0x100, 0x0, MSM_CAMERA_I2C_BYTE_DATA); #endif } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { msm_sensor_write_res_settings(s_ctrl, res); 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 imx111_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; pr_err("[rafal47] %s: update: %d, res : %d : Change camera mode\n", __func__, update_type, res); // s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); // msleep(30); if (update_type == MSM_SENSOR_REG_INIT) { msm_sensor_enable_debugfs(s_ctrl); msm_sensor_write_init_settings(s_ctrl); } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { if (res == 0) { msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, (struct msm_camera_i2c_reg_conf *) imx111_comm_confs[0].conf, imx111_comm_confs[0].size, imx111_comm_confs[0].data_type); printk("[tykim] %s: csi_lane_assign not setting\n", __func__); /* */ } else { msm_sensor_write_res_settings(s_ctrl, res); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->msm_sensor_reg-> output_settings[res].op_pixel_clk); } } printk("%s: X", __func__); return rc; }
int32_t msm_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM( PIX_0, ISPIF_OFF_IMMEDIATELY)); printk("%s:[F_PANTECH_CAMERA] %d, %d res=%d\n", __func__, __LINE__,update_type,res); if (s_ctrl->func_tbl->sensor_stop_stream) 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); msm_sensor_write_init_settings(s_ctrl); } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { msm_sensor_write_res_settings(s_ctrl, res); if (s_ctrl->curr_csi_params != s_ctrl->csi_params[res]) { printk("%s:[F_PANTECH_CAMERA] ==> MIPI setting E %d\n", __func__, update_type); s_ctrl->curr_csi_params = s_ctrl->csi_params[res]; v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSID_CFG, &s_ctrl->curr_csi_params->csid_params); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CID_CHANGE, NULL); mb(); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIPHY_CFG, &s_ctrl->curr_csi_params->csiphy_params); mb(); msleep(20); printk("%s:[F_PANTECH_CAMERA] ==> MIPI setting X %d\n", __func__, update_type); } v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->msm_sensor_reg-> output_settings[res].op_pixel_clk); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM( PIX_0, ISPIF_ON_FRAME_BOUNDARY)); if (s_ctrl->func_tbl->sensor_start_stream) { //printk("%s:kernal delay start %d x\n", __func__, __LINE__); msleep(30); // 02.03 bsy pink ¡þO?oA¡þO?? //printk("%s: kernal delay end%d x\n", __func__, __LINE__); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); } msleep(30); } return rc; }
int32_t imx111_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; printk("%s: E: update_type=%d, res=%d\n", __func__, update_type, res); 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); msm_sensor_write_init_settings(s_ctrl); } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { if (res == 0) { msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, (struct msm_camera_i2c_reg_conf *) imx111_comm_confs[0].conf, imx111_comm_confs[0].size, imx111_comm_confs[0].data_type); } else { msm_sensor_write_res_settings(s_ctrl, res); 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); } 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); } } printk("%s: X", __func__); return rc; }
int32_t msm_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM( PIX_0, ISPIF_OFF_IMMEDIATELY)); 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); #if !defined(DVE005_CAMERA_DRV) msm_sensor_write_init_settings(s_ctrl); #endif } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { #if defined(DVE005_CAMERA_DRV) rc = s_ctrl->func_tbl->sensor_write_res_settings(s_ctrl, res); #else msm_sensor_write_res_settings(s_ctrl, res); #endif if (s_ctrl->curr_csi_params != s_ctrl->csi_params[res]) { s_ctrl->curr_csi_params = s_ctrl->csi_params[res]; v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSID_CFG, &s_ctrl->curr_csi_params->csid_params); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CID_CHANGE, NULL); mb(); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIPHY_CFG, &s_ctrl->curr_csi_params->csiphy_params); mb(); msleep(20); } v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->msm_sensor_reg-> output_settings[res].op_pixel_clk); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM( PIX_0, ISPIF_ON_FRAME_BOUNDARY)); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(30); } return rc; }
int32_t msm_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; 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); msm_sensor_write_init_settings(s_ctrl); } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { msm_sensor_write_res_settings(s_ctrl, res); 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); } 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); } return rc; }
int32_t iu091_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; int linecount; int frame_time,exposure_time; struct msm_sensor_output_info_t curr_info,new_info; IU091_LOG_INF("START\n"); curr_info = iu091_dimensions[s_ctrl->curr_res]; new_info = iu091_dimensions[res]; if( res != 0) { s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); } if (update_type == MSM_SENSOR_REG_INIT) { curr_frame_length_lines = 0; rc = msm_sensor_enable_debugfs(s_ctrl); if(rc < 0){ IU091_LOG_DBG("msm_sensor_enable_debugfs (rc:%d)\n",rc); } rc = msm_sensor_write_init_settings(s_ctrl); if(rc < 0){ IU091_LOG_ERR("%s: msm_sensor_write_init_settings (rc:%d)\n", __func__,rc); return rc; } } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { if( s_ctrl->curr_res != MSM_SENSOR_INVALID_RES) { IU091_LOG_DBG("setting change %d -> %d\n",s_ctrl->curr_res,res); if (curr_info.frame_length_lines > curr_frame_length_lines ) { linecount = curr_info.frame_length_lines; }else{ linecount = curr_frame_length_lines; } frame_time = 1000/(curr_info.vt_pixel_clk/(curr_info.line_length_pclk*linecount)); if( res != 0 ) { IU091_LOG_DBG("current frame_out_time = %d line_length_pclk =%d linecount = %d vt_pixel_clk = %d\n", frame_time,curr_info.line_length_pclk,linecount,curr_info.vt_pixel_clk); msleep(frame_time); } } curr_frame_length_lines = new_info.frame_length_lines; exposure_time = 1000/(new_info.vt_pixel_clk/(new_info.line_length_pclk*new_info.frame_length_lines)); if( ((s_ctrl->curr_res == MSM_SENSOR_RES_QTR) && (res == MSM_SENSOR_RES_FULL)) || ((s_ctrl->curr_res == MSM_SENSOR_RES_2 ) && (res == MSM_SENSOR_RES_FULL)) ) { rc = msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, (struct msm_camera_i2c_reg_conf *) iu091_comm_confs[0].conf, iu091_comm_confs[0].size, iu091_comm_confs[0].data_type); 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); rc = msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, (struct msm_camera_i2c_reg_conf *) iu091_comm_confs[1].conf, iu091_comm_confs[1].size, iu091_comm_confs[1].data_type); if(rc < 0){ return rc; } rc = msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, (struct msm_camera_i2c_reg_conf *) iu091_comm_confs[2].conf, iu091_comm_confs[2].size, iu091_comm_confs[2].data_type); if(rc < 0){ return rc; } s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(10); rc = msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, (struct msm_camera_i2c_reg_conf *) iu091_comm_confs[3].conf, iu091_comm_confs[3].size, iu091_comm_confs[3].data_type); if(rc < 0){ return rc; } } else { rc = msm_sensor_write_res_settings(s_ctrl, 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); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(exposure_time); } } IU091_LOG_INF("END\n"); return rc; }
int32_t msm_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; #ifdef CONFIG_RAWCHIP struct rawchip_sensor_data rawchip_data; struct timespec ts_start, ts_end; #endif pr_info("%s update_type:%d\n", __func__,update_type); v4l2_subdev_notify(s_ctrl->sensor_v4l2_subdev, NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM( PIX0, ISPIF_OFF_IMMEDIATELY)); s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); if (update_type == MSM_SENSOR_REG_INIT) { s_ctrl->curr_csi_params = NULL; msm_sensor_enable_debugfs(s_ctrl); msm_sensor_write_init_settings(s_ctrl); first_init = 1; } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { /*TODO : pointer to each sensor driver to get correct delay time*/ if(!first_init) mdelay(50); msm_sensor_write_res_settings(s_ctrl, res); if (s_ctrl->curr_csi_params != s_ctrl->csi_params[res]) { s_ctrl->curr_csi_params = s_ctrl->csi_params[res]; v4l2_subdev_notify(s_ctrl->sensor_v4l2_subdev, NOTIFY_CSID_CFG, &s_ctrl->curr_csi_params->csid_params); v4l2_subdev_notify(s_ctrl->sensor_v4l2_subdev, NOTIFY_CID_CHANGE, NULL); mb(); v4l2_subdev_notify(s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIPHY_CFG, &s_ctrl->curr_csi_params->csiphy_params); mb(); } #ifdef CONFIG_RAWCHIP if (s_ctrl->sensordata->use_rawchip) { rawchip_data.sensor_name = s_ctrl->sensordata->sensor_name; rawchip_data.datatype = s_ctrl->curr_csi_params->csid_params.lut_params.vc_cfg->dt; rawchip_data.lane_cnt = s_ctrl->curr_csi_params->csid_params.lane_cnt; rawchip_data.pixel_clk = s_ctrl->msm_sensor_reg->output_settings[res].op_pixel_clk; rawchip_data.mirror_flip = s_ctrl->mirror_flip; rawchip_data.width = s_ctrl->msm_sensor_reg->output_settings[res].x_output; rawchip_data.height = s_ctrl->msm_sensor_reg->output_settings[res].y_output; rawchip_data.line_length_pclk = s_ctrl->msm_sensor_reg->output_settings[res].line_length_pclk; rawchip_data.frame_length_lines = s_ctrl->msm_sensor_reg->output_settings[res].frame_length_lines; rawchip_data.x_addr_start = s_ctrl->msm_sensor_reg->output_settings[res].x_addr_start; rawchip_data.y_addr_start = s_ctrl->msm_sensor_reg->output_settings[res].y_addr_start; rawchip_data.x_addr_end = s_ctrl->msm_sensor_reg->output_settings[res].x_addr_end; rawchip_data.y_addr_end = s_ctrl->msm_sensor_reg->output_settings[res].y_addr_end; rawchip_data.x_even_inc = s_ctrl->msm_sensor_reg->output_settings[res].x_even_inc; rawchip_data.x_odd_inc = s_ctrl->msm_sensor_reg->output_settings[res].x_odd_inc; rawchip_data.y_even_inc = s_ctrl->msm_sensor_reg->output_settings[res].y_even_inc; rawchip_data.y_odd_inc = s_ctrl->msm_sensor_reg->output_settings[res].y_odd_inc; rawchip_data.binning_rawchip = s_ctrl->msm_sensor_reg->output_settings[res].binning_rawchip; rawchip_data.fullsize_width = s_ctrl->msm_sensor_reg->output_settings[MSM_SENSOR_RES_FULL].x_output; rawchip_data.fullsize_height = s_ctrl->msm_sensor_reg->output_settings[MSM_SENSOR_RES_FULL].y_output; rawchip_data.fullsize_line_length_pclk = s_ctrl->msm_sensor_reg->output_settings[MSM_SENSOR_RES_FULL].line_length_pclk; rawchip_data.fullsize_frame_length_lines = s_ctrl->msm_sensor_reg->output_settings[MSM_SENSOR_RES_FULL].frame_length_lines; ktime_get_ts(&ts_start); rawchip_set_size(rawchip_data); ktime_get_ts(&ts_end); pr_info("%s: %ld ms\n", __func__, (ts_end.tv_sec-ts_start.tv_sec)*1000+(ts_end.tv_nsec-ts_start.tv_nsec)/1000000); } #endif v4l2_subdev_notify(s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->msm_sensor_reg-> output_settings[res].op_pixel_clk); v4l2_subdev_notify(s_ctrl->sensor_v4l2_subdev, NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM( PIX0, ISPIF_ON_FRAME_BOUNDARY)); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); first_init = 0; } return rc; }
int32_t imx111_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl, int update_type, int res) { int32_t rc = 0; int linecount; int frame_time,exposure_time; struct msm_sensor_output_info_t curr_info,new_info; curr_info = imx111_dimensions[s_ctrl->curr_res]; new_info = imx111_dimensions[res]; if( res != 0) { v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM( PIX_0, ISPIF_OFF_IMMEDIATELY)); s_ctrl->func_tbl->sensor_stop_stream(s_ctrl); } if (update_type == MSM_SENSOR_REG_INIT) { curr_frame_length_lines = 0; s_ctrl->curr_csi_params = NULL; rc = msm_sensor_enable_debugfs(s_ctrl); if(rc < 0){ CDBG("%s: msm_sensor_enable_debugfs (rc:%d)\n", __func__,rc); } rc = msm_sensor_write_init_settings(s_ctrl); if (rc < 0) { return rc; } } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) { if( s_ctrl->curr_res != MSM_SENSOR_INVALID_RES) { CDBG("imx111.c %s: setting change %d -> %d\n", __func__, s_ctrl->curr_res,res); if (curr_info.frame_length_lines > curr_frame_length_lines ) { linecount = curr_info.frame_length_lines; } else { linecount = curr_frame_length_lines; } frame_time = 1000/(curr_info.vt_pixel_clk/(curr_info.line_length_pclk*linecount)); if ( res != 0 ) { CDBG("imx111.c %s: current frame_out_time = %d line_length_pclk =%d linecount = %d vt_pixel_clk = %d\n", __func__,frame_time,curr_info.line_length_pclk,linecount,curr_info.vt_pixel_clk); msleep(frame_time); } } curr_frame_length_lines = new_info.frame_length_lines; exposure_time = 1000/(new_info.vt_pixel_clk/(new_info.line_length_pclk*new_info.frame_length_lines)); if( s_ctrl->curr_res != 0 && res == 0) { rc = msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, (struct msm_camera_i2c_reg_conf *) imx111_comm_confs[0].conf, imx111_comm_confs[0].size, imx111_comm_confs[0].data_type); if (rc < 0){ return rc; } rc = msm_sensor_write_res_settings(s_ctrl, res); if (rc < 0){ return rc; } if (s_ctrl->curr_csi_params != s_ctrl->csi_params[res]) { s_ctrl->curr_csi_params = s_ctrl->csi_params[res]; v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSID_CFG, &s_ctrl->curr_csi_params->csid_params); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CID_CHANGE, NULL); mb(); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIPHY_CFG, &s_ctrl->curr_csi_params->csiphy_params); mb(); msleep(20); } v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->msm_sensor_reg-> output_settings[res].op_pixel_clk); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM( PIX_0, ISPIF_ON_FRAME_BOUNDARY)); rc = msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, (struct msm_camera_i2c_reg_conf *) imx111_comm_confs[1].conf, imx111_comm_confs[1].size, imx111_comm_confs[1].data_type); if (rc < 0){ return rc; } s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(10); rc = msm_camera_i2c_write_tbl(s_ctrl->sensor_i2c_client, (struct msm_camera_i2c_reg_conf *) imx111_comm_confs[2].conf, imx111_comm_confs[2].size, imx111_comm_confs[2].data_type); if (rc < 0){ return rc; } } else { rc = msm_sensor_write_res_settings(s_ctrl, res); if(rc < 0){ return rc; } if (s_ctrl->curr_csi_params != s_ctrl->csi_params[res]) { s_ctrl->curr_csi_params = s_ctrl->csi_params[res]; v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSID_CFG, &s_ctrl->curr_csi_params->csid_params); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CID_CHANGE, NULL); mb(); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_CSIPHY_CFG, &s_ctrl->curr_csi_params->csiphy_params); mb(); msleep(20); } v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_PCLK_CHANGE, &s_ctrl->msm_sensor_reg-> output_settings[res].op_pixel_clk); v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev, NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM( PIX_0, ISPIF_ON_FRAME_BOUNDARY)); s_ctrl->func_tbl->sensor_start_stream(s_ctrl); msleep(exposure_time); } } return rc; }