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;
}
Exemplo n.º 2
0
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 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;
}
Exemplo n.º 4
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;
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
}
Exemplo n.º 8
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;
}
Exemplo n.º 9
0
int32_t hi351_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) {
#if defined (LGE_CAMERA_ANTIBAND_50HZ)	//Flicker 50Hz
		pr_err("Register INIT with Flicker 50Hz Mode\n");
#else
		pr_err("Register INIT with Flicker 60Hz Mode\n");
#endif
		s_ctrl->curr_csi_params = NULL;
		msm_sensor_enable_debugfs(s_ctrl);
		PREV_EFFECT = -1;
		PREV_ISO = -1;
		PREV_WB = -1;
		PREV_FPS = -1;
		PREV_BESTSHOT = -1;
		DELAY_START = 0;
		hi351_reg_init(s_ctrl);
		csi_config = 0;
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		pr_err("PERIODIC : %d\n", res);
		if (!csi_config) {
			s_ctrl->func_tbl->sensor_stop_stream(s_ctrl);
			msleep(20);
			s_ctrl->curr_csic_params = s_ctrl->csic_params[res];
			pr_err("CSI config in progress\n");
			v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
				NOTIFY_CSIC_CFG,
				s_ctrl->curr_csic_params);
			pr_err("CSI config is done\n");
			mb();
			msleep(50);
			csi_config = 1;
			s_ctrl->func_tbl->sensor_start_stream(s_ctrl);
		}
		hi351_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			s_ctrl->msm_sensor_reg->mode_settings, res);

		v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
			NOTIFY_PCLK_CHANGE,
			&s_ctrl->sensordata->pdata->ioclk.vfe_clk_rate);

	}
	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);
		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;
}
Exemplo n.º 11
0
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;
}
Exemplo n.º 12
0
static int32_t ov2720_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl,
				int update_type, int rt)
{
	struct msm_camera_csid_params ov2720_csid_params;
	struct msm_camera_csiphy_params ov2720_csiphy_params;
	int32_t rc = 0;
	s_ctrl->func_tbl.sensor_stop_stream(s_ctrl);
	msleep(30);
	if (update_type == MSM_SENSOR_REG_INIT) {
		s_ctrl->config_csi_flag = 1;
		msm_sensor_enable_debugfs(s_ctrl);
		msm_sensor_write_b_init_settings(s_ctrl);
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		msm_sensor_write_b_res_settings(s_ctrl, rt);
		if (s_ctrl->config_csi_flag) {
			struct msm_camera_csid_vc_cfg ov2720_vccfg[] = {
				{0, CSI_RAW10, CSI_DECODE_10BIT},
				{1, CSI_EMBED_DATA, CSI_DECODE_8BIT},
			};
			ov2720_csid_params.lane_cnt = 2;
			ov2720_csid_params.lane_assign = 0xe4;
			ov2720_csid_params.lut_params.num_cid =
				ARRAY_SIZE(ov2720_vccfg);
			ov2720_csid_params.lut_params.vc_cfg =
				&ov2720_vccfg[0];
			ov2720_csiphy_params.lane_cnt = 2;
			ov2720_csiphy_params.settle_cnt = 0x1B;
			rc = msm_camio_csid_config(&ov2720_csid_params);
			v4l2_subdev_notify(s_ctrl->sensor_v4l2_subdev,
						NOTIFY_CID_CHANGE, NULL);
			mb();
			rc = msm_camio_csiphy_config(&ov2720_csiphy_params);
			mb();
			msleep(20);
			s_ctrl->config_csi_flag = 0;
		}
		s_ctrl->func_tbl.sensor_start_stream(s_ctrl);
		msleep(30);
	}
	return rc;
}
Exemplo n.º 13
0
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;
}
Exemplo n.º 14
0
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 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 mt9d113_sensor_setting1(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;
	static int csi_config;
    SKYCDBG("%s: update_type = %d, res=%d E\n", __func__, update_type, res);

	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);
//needtocheck//        
		mt9d113_sensor_init(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) {
            SKYCDBG("%s: ==> MIPI setting  E %d\n", __func__, update_type);
			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;
            SKYCDBG("%s: ==> MIPI setting  X %d\n", __func__, update_type);	
		}
		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);
#if 1//needtocheck		
        switch (res) {
            case 0:
//              rc = ce1612_snapshot_config(s_ctrl);  
                rc = si2c_write_param(SI2C_SA, SI2C_SNAPSHOT, mt9d113_params);
                if (rc < 0) {
                    SKYCDBG("%s snapshot config err(%d)\n", __func__, rc);
                    return rc;
                }

                SKYCDBG("Sensor setting : Case 0 snapshot config"); 

                break;

            case 1:
//              rc = ce1612_video_config(s_ctrl);
                rc = si2c_write_param(SI2C_SA, SI2C_PREVIEW, mt9d113_params);
                if (rc < 0) {
                    SKYCDBG("%s video config err(%d)\n", __func__, rc);
                    return rc;
                }
#if 1//for_test
                if(current_fps != 31)
                    mt9d113_sensor_set_preview_fps(s_ctrl ,current_fps);
#else                
                if ((previewFPS > C_PANTECH_CAMERA_MIN_PREVIEW_FPS) && (previewFPS < C_PANTECH_CAMERA_MAX_PREVIEW_FPS)) 
	            {  
			       SKYCDBG("%s: preview_fps=%d\n", __func__, previewFPS);
                   mt9d113_sensor_set_preview_fps(NULL ,previewFPS);
                }
#endif
                SKYCDBG("Sensor setting : Case 1 Video config"); 
                break;

          //case 2: 
            //  rc = ce1612_1080p_config(s_ctrl);   
            //  break;

            case 3: 
//              rc = ce1612_ZSL_config(s_ctrl); 
                SKYCDBG("Sensor setting : Case 3 ZSL config");              
                break;  
                 
            default:
//              rc = ce1612_video_config(s_ctrl);
                SKYCDBG("Sensor setting : Default Video config"); 
                break;
        }
#endif
		sensor_mode = res;
		SKYCDBG("Sensor setting : Res = %d\n", res);

		
		msleep(50);
	}
	return rc;
}
int32_t ov7695_raw_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;
	static int csi_config;
	struct msm_camera_pip_ctl pip_ctl;

//	s_ctrl->func_tbl->sensor_stop_stream(s_ctrl);
	msleep(30);
	if (update_type == MSM_SENSOR_REG_INIT) {
		CDBG("Register INIT\n");
		pip_ctl.sensor_i2c_client = s_ctrl->sensor_i2c_client;
		/*OV7695 powerup and software reset*/
		pip_ov5648_ctrl(PIP_CRL_POWERUP, &pip_ctl);
		usleep_range(2000, 3000);
		pip_ov5648_ctrl(PIP_CTL_RESET_HW_PULSE, &pip_ctl);
		msleep(10);

		msm_camera_i2c_write(
				s_ctrl->sensor_i2c_client,
				0x103, 0x1,
				MSM_CAMERA_I2C_BYTE_DATA);

		usleep_range(2000, 3000);

		s_ctrl->curr_csi_params = NULL;
		msm_sensor_enable_debugfs(s_ctrl);
		msm_sensor_write_init_settings(s_ctrl);

		usleep_range(2000, 3000);
		pip_ov5648_ctrl(PIP_CTL_RESET_SW, &pip_ctl);

		usleep_range(2000, 3000);
		/*OV5648 init settings*/
		/*writing to OV5648, open lanes*/
		pip_ctl.write_ctl = PIP_REG_SETTINGS_INIT;
		pip_ov5648_ctrl(PIP_CRL_WRITE_SETTINGS, &pip_ctl);
		msleep(60);
		csi_config = 0;
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		CDBG("PERIODIC : %d\n", res);

		if (!csi_config) {
			pip_ctl.sensor_i2c_client = s_ctrl->sensor_i2c_client;
			pip_ov5648_ctrl(PIP_CTL_STREAM_OFF, &pip_ctl);
			msleep(70);
			pip_ov5648_ctrl(PIP_CTL_STANDBY_SW, &pip_ctl);
			msleep(10);

			msm_sensor_write_all_conf_array(
				s_ctrl->sensor_i2c_client, &ov7695_raw_confs[0],
				ARRAY_SIZE(ov7695_raw_confs));

//			msm_camera_i2c_write(
//					s_ctrl->sensor_i2c_client,
//					0x100, 0x1,
//					MSM_CAMERA_I2C_BYTE_DATA);
			msleep(60);

			pip_ctl.write_ctl = res;
			pip_ov5648_ctrl(PIP_CRL_WRITE_SETTINGS, &pip_ctl);
			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);
			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);
			pip_ov5648_ctrl(PIP_CTL_STANDBY_EXIT, &pip_ctl);
			msleep(50);
			pip_ov5648_ctrl(PIP_CTL_STREAM_ON, &pip_ctl);
			msleep(50);
		}
	}
	return rc;
}
Exemplo n.º 18
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;
}
Exemplo n.º 19
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;
}
Exemplo n.º 20
0
int32_t mt9m114_msm_sensor_i2c_probe(struct i2c_client *client,
	const struct i2c_device_id *id)
{
	int rc = 0;
	struct msm_sensor_ctrl_t *s_ctrl;
	pr_err("%s %s_i2c_probe \n", __func__, client->name);
	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
		pr_err("%s %s i2c_check_functionality failed\n",
			__func__, client->name);
		rc = -EFAULT;
		return rc;
	}

	s_ctrl = (struct msm_sensor_ctrl_t *)(id->driver_data);
	s_ctrl->sensor_device_type = MSM_SENSOR_I2C_DEVICE;
	if (s_ctrl->sensor_i2c_client != NULL) {
		s_ctrl->sensor_i2c_client->client = client;
		if (s_ctrl->sensor_i2c_addr != 0)
			s_ctrl->sensor_i2c_client->client->addr =
				s_ctrl->sensor_i2c_addr;
	} else {
		pr_err("%s %s sensor_i2c_client NULL\n",
			__func__, client->name);
		rc = -EFAULT;
		return rc;
	}

	s_ctrl->sensordata = client->dev.platform_data;
	if (s_ctrl->sensordata == NULL) {
		pr_err("%s %s NULL sensor data\n", __func__, client->name);
		return -EFAULT;
	}

	rc = s_ctrl->func_tbl->sensor_power_up(s_ctrl);
	if (rc < 0) {
		pr_err("%s %s power up failed\n", __func__, client->name);
		return rc;
	}

	if (s_ctrl->func_tbl->sensor_match_id)
		rc = s_ctrl->func_tbl->sensor_match_id(s_ctrl);
	else
		rc = msm_sensor_match_id(s_ctrl);
	if (rc < 0)
		goto probe_fail;

#ifdef CONFIG_SENSOR_INFO 
    	msm_sensorinfo_set_front_sensor_id(s_ctrl->sensor_id_info->sensor_id);
#else
  //do nothing here
#endif

	if (!s_ctrl->wait_num_frames)
		s_ctrl->wait_num_frames = 1 * Q10;

	pr_err("%s %s probe succeeded\n", __func__, client->name);
	snprintf(s_ctrl->sensor_v4l2_subdev.name,
		sizeof(s_ctrl->sensor_v4l2_subdev.name), "%s", id->name);
	v4l2_i2c_subdev_init(&s_ctrl->sensor_v4l2_subdev, client,
		s_ctrl->sensor_v4l2_subdev_ops);
	s_ctrl->sensor_v4l2_subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
	media_entity_init(&s_ctrl->sensor_v4l2_subdev.entity, 0, NULL, 0);
	s_ctrl->sensor_v4l2_subdev.entity.type = MEDIA_ENT_T_V4L2_SUBDEV;
	s_ctrl->sensor_v4l2_subdev.entity.group_id = SENSOR_DEV;
	s_ctrl->sensor_v4l2_subdev.entity.name =
		s_ctrl->sensor_v4l2_subdev.name;
	msm_sensor_register(&s_ctrl->sensor_v4l2_subdev);
	s_ctrl->sensor_v4l2_subdev.entity.revision =
		s_ctrl->sensor_v4l2_subdev.devnode->num;	
	msm_sensor_enable_debugfs(s_ctrl);
	goto power_down;
probe_fail:
	pr_err("%s %s_i2c_probe failed\n", __func__, client->name);
power_down:
	if (rc > 0)
		rc = 0;
	s_ctrl->func_tbl->sensor_power_down(s_ctrl);
	s_ctrl->sensor_state = MSM_SENSOR_POWER_DOWN;
	return rc;
}
//mt9d113_sensor_setting
int32_t mt9d113_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;

SKYCDBG("%s: update_type = %d, res=%d E\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);
//needtocheck//        
		mt9d113_sensor_init(s_ctrl);//msm_sensor_write_init_settings(s_ctrl);
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
//needtocheck// 	
		//msm_sensor_write_res_settings(s_ctrl, res);
		if (s_ctrl->curr_csi_params != s_ctrl->csi_params[res]) {
            SKYCDBG("%s: ==> MIPI setting  E %d\n", __func__, update_type);
			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);
            SKYCDBG("%s: ==> 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);
		//s_ctrl->func_tbl->sensor_start_stream(s_ctrl);
#if 0//needtocheck		
		switch (res) {
			case 0:
//				rc = ce1612_snapshot_config(s_ctrl);	
				break;

			case 1:
//				rc = ce1612_video_config(s_ctrl);
                si2c_write_param(SI2C_SA, SI2C_INIT, s5k6aafx13_params);

				SKYCDBG("Sensor setting : Case 1 Video config"); 
				break;

	      //case 2: 
			//	rc = ce1612_1080p_config(s_ctrl);	
			//	break;

			case 3: 
//				rc = ce1612_ZSL_config(s_ctrl);	
				SKYCDBG("Sensor setting : Case 3 ZSL config");				
				break;	
				 
			default:
//				rc = ce1612_video_config(s_ctrl);
				SKYCDBG("Sensor setting : Default Video config"); 
				break;
		}
#endif
		sensor_mode = res;
		SKYCDBG("Sensor setting : Res = %d\n", res);
        
		msleep(30);
	}
	SKYCDBG("%s: %d x\n", __func__, __LINE__);
	return rc;
}
Exemplo n.º 22
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;
}
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;
}
/* 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;
}