Example #1
0
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;
}
Example #2
0
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 imx111_sensor_write_exp_gain1(struct msm_sensor_ctrl_t *s_ctrl,
		uint16_t gain, uint32_t line)
{
	uint32_t fl_lines;
	uint8_t offset;
	fl_lines = s_ctrl->curr_frame_length_lines;
	fl_lines = (fl_lines * s_ctrl->fps_divider) / Q10;
	offset = s_ctrl->sensor_exp_gain_info->vert_offset;
	if (line > (fl_lines - offset))
		fl_lines = line + offset;

	CDBG("\n%s:Gain:%d, Linecount:%d\n", __func__, gain, line);
	if (s_ctrl->curr_res == 0) {
		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);

		msm_camera_i2c_write(s_ctrl->sensor_i2c_client,
			s_ctrl->sensor_output_reg_addr->frame_length_lines,
			fl_lines, MSM_CAMERA_I2C_WORD_DATA);
		msm_camera_i2c_write(s_ctrl->sensor_i2c_client,
			s_ctrl->sensor_exp_gain_info->coarse_int_time_addr,
			line, MSM_CAMERA_I2C_WORD_DATA);
		msm_camera_i2c_write(s_ctrl->sensor_i2c_client,
			s_ctrl->sensor_exp_gain_info->global_gain_addr, gain,
			MSM_CAMERA_I2C_WORD_DATA);

		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 (s_ctrl->curr_csi_params != s_ctrl->csi_params[s_ctrl->curr_res]) {
			s_ctrl->curr_csi_params = s_ctrl->csi_params[s_ctrl->curr_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[s_ctrl->curr_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);
	} else {
		s_ctrl->func_tbl->sensor_group_hold_on(s_ctrl);
		msm_camera_i2c_write(s_ctrl->sensor_i2c_client,
			s_ctrl->sensor_output_reg_addr->frame_length_lines,
			fl_lines, MSM_CAMERA_I2C_WORD_DATA);
		msm_camera_i2c_write(s_ctrl->sensor_i2c_client,
			s_ctrl->sensor_exp_gain_info->coarse_int_time_addr,
			line, MSM_CAMERA_I2C_WORD_DATA);
		msm_camera_i2c_write(s_ctrl->sensor_i2c_client,
			s_ctrl->sensor_exp_gain_info->global_gain_addr, gain,
			MSM_CAMERA_I2C_WORD_DATA);
		s_ctrl->func_tbl->sensor_group_hold_off(s_ctrl);
	}

	return 0;
}
Example #4
0
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;
}
Example #5
0
int32_t msm_ov9740_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;
        rc=msm_sensor_enable_debugfs(s_ctrl);

        rc = msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0x0103, 0x01, MSM_CAMERA_I2C_BYTE_DATA);
        if (rc < 0) {
            pr_err("%s: i2c write failed\n", __func__);
            return rc;
        }
        msleep(10);
        rc = msm_camera_i2c_write(s_ctrl->sensor_i2c_client, OV9740_MODE_SELECT, 0x00, MSM_CAMERA_I2C_BYTE_DATA);
        if (rc < 0) {
            pr_err("%s: i2c write failed\n", __func__);
            return rc;
        }

    }
    else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
        rc=gpio_direction_output(53, 1);
        if (rc < 0)
            pr_err("%s  gpio  direction 53 failed\n",__func__);
        rc=gpio_direction_output(76, 0);
        if (rc < 0)
            pr_err("%s  gpio  direction 76 failed\n",__func__);
        msleep(20);
        if (s_ctrl->curr_csi_params != s_ctrl->csi_params[res]) {
            pr_err("%s:mipi begin  res=%d\n", __func__,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);
            pr_err("%s:mipi end    res=%d\n", __func__,res);

        }
        rc=gpio_direction_output(53, 0);
        if (rc < 0)
            pr_err("%s  gpio  direction 53 failed\n",__func__);
        rc=gpio_direction_output(76, 1);
        if (rc < 0)
            pr_err("%s  gpio  direction 76 failed\n",__func__);
        msleep(20);
        pr_err("%s: msm_sensor_write_res_settings res=%d \n", __func__,res);
        rc=msm_sensor_ov9740_write_res_settings(s_ctrl, res);
        if (rc < 0) {
            pr_err("%s: msm_sensor_write_res_settings failed\n", __func__);
            return rc;
        }

        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(s_ctrl->sensor_i2c_client, OV9740_MODE_SELECT, 0x01, MSM_CAMERA_I2C_BYTE_DATA);
        if (rc < 0) {
            pr_err("%s: i2c write failed\n", __func__);
        }

    }

    pr_err("%s:   X    %d\n", __func__, __LINE__);
    return rc;
}
Example #6
0
static int32_t s5k8aay_sensor_setting(int update_type, int rt)
{
	int32_t rc = 0;
	struct msm_camera_csid_params s5k8aay_csid_params;
	struct msm_camera_csiphy_params s5k8aay_csiphy_params;

	CAM_DEBUG(" type = %d", update_type);

	switch (update_type) {
	case REG_INIT:
		if (rt == RES_PREVIEW || rt == RES_CAPTURE)
			/* Add some condition statements */
		break;

	case UPDATE_PERIODIC:
		if (rt == RES_PREVIEW || rt == RES_CAPTURE) {
			struct msm_camera_csid_vc_cfg s5k8aay_vccfg[] = {
				{0, 0x1E, CSI_DECODE_8BIT},
				{1, CSI_EMBED_DATA, CSI_DECODE_8BIT},
			};

			CAM_DEBUG(" UPDATE_PERIODIC");

			v4l2_subdev_notify(s5k8aay_ctrl->sensor_dev,
				NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM(
				PIX_0, ISPIF_OFF_IMMEDIATELY));
			msleep(30);

			s5k8aay_csid_params.lane_cnt = 1;
			s5k8aay_csid_params.lane_assign = 0xe4;
			s5k8aay_csid_params.lut_params.num_cid =
				ARRAY_SIZE(s5k8aay_vccfg);
			s5k8aay_csid_params.lut_params.vc_cfg =
				&s5k8aay_vccfg[0];
			s5k8aay_csiphy_params.lane_cnt = 1;
			s5k8aay_csiphy_params.settle_cnt = 0x14;
			v4l2_subdev_notify(s5k8aay_ctrl->sensor_dev,
				NOTIFY_CSID_CFG, &s5k8aay_csid_params);
			v4l2_subdev_notify(s5k8aay_ctrl->sensor_dev,
				NOTIFY_CID_CHANGE, NULL);
			v4l2_subdev_notify(s5k8aay_ctrl->sensor_dev,
				NOTIFY_CSIPHY_CFG, &s5k8aay_csiphy_params);
			mb();

			msleep(20);

			config_csi2 = 1;

			v4l2_subdev_notify(s5k8aay_ctrl->sensor_dev,
				NOTIFY_ISPIF_STREAM, (void *)ISPIF_STREAM(
				PIX_0, ISPIF_ON_FRAME_BOUNDARY));
			msleep(30);
		}
		break;
	default:
		rc = -EINVAL;
		break;
	}

	return rc;
}
/* msm_sensor_setting */
int32_t yacd5c1sbdbc_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));

SKYCDBG("%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;
		g_preview_fps= 0;
		msm_sensor_enable_debugfs(s_ctrl);
#ifdef CONFIG_PANTECH_CAMERA_TUNER 
        SKYCDBG("[CONFIG_PANTECH_CAMERA_TUNER]%s PASS init_setting\n ",__func__);
        tuner_init_check = 1;
#else
        yacd5c1sbdbc_sensor_write_init_settings(s_ctrl);
#endif

    } else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {

#ifdef CONFIG_PANTECH_CAMERA_TUNER
        if (tuner_init_check == 1) {
            SKYCDBG("[CONFIG_PANTECH_CAMERA_TUNER]%s init_setting\n ",__func__);
            yacd5c1sbdbc_sensor_write_init_settings(s_ctrl);
            tuner_init_check = 0;
        }

        SKYCDBG("[CONFIG_PANTECH_CAMERA_TUNER]%s res=%d res_setting\n ",__func__,res);
        yacd5c1sbdbc_sensor_write_res_settings(s_ctrl, res);
#else
        yacd5c1sbdbc_sensor_write_res_settings(s_ctrl, res);
#endif

#ifdef CONFIG_PANTECH_CAMERA_YACD5C1SBDBC// for VTS
        //if (strcmp(s_ctrl->sensordata->sensor_name, "yacd5c1sbdbc"))
        if((s_ctrl->sensor_id_info->sensor_id == YACD5C1SBDBC_ID) &&
            (preview_24fps_for_motion_detect_check == 1)){

            //printk("[CONFIG_PANTECH_CAMERA for VTS] msleep(133)==>\n");
            //msleep(133);
        
            SKYCDBG("[CONFIG_PANTECH_CAMERA for VTS]preview_24fps_for_motion_detect_cfg_settings\n ");

            rc = msm_camera_i2c_write_tbl(
                s_ctrl->sensor_i2c_client,
                s_ctrl->msm_sensor_reg->preview_24fps_for_motion_detect_cfg_settings[0],
                s_ctrl->msm_sensor_reg->preview_24fps_for_motion_detect_cfg_settings_size,
                s_ctrl->msm_sensor_reg->default_data_type);

            preview_24fps_for_motion_detect_check = 0;
        	if (rc < 0)
        	{
        		SKYCERR("ERR:%s 24fps FAIL!!! rc=%d \n", __func__, rc);
        		return rc;
        	}            
        }
#if 0// for camif err
	 else  {
	 	if(res==1) yacd5c1sbdbc_sensor_set_preview_fps(s_ctrl , g_preview_fps);
	 }
#endif
#endif
		if (s_ctrl->curr_csi_params != s_ctrl->csi_params[res]) {
SKYCDBG("%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);
SKYCDBG("%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)
		s_ctrl->func_tbl->sensor_start_stream(s_ctrl);

#ifdef T_OSCAR
		msleep(300);	//msleep(150); //msleep(30);
#else
		msleep(200);//msleep(150); //msleep(30);
#endif

	}
	SKYCDBG("%s: %d x\n", __func__, __LINE__);
	return rc;
}
Example #8
0
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;
}