int32_t s5k5ca_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;

	printk("\n s5k5ca_sensor_setting() update_type:%d res:%d\n",update_type,res);

	if (update_type == MSM_SENSOR_REG_INIT) {
		//printk("PERIODIC : %d\n", res);
		s_ctrl->curr_csic_params = s_ctrl->csic_params[res];
		//printk("CSI config in progress\n");
		v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
			NOTIFY_CSIC_CFG,
			s_ctrl->curr_csic_params);
		//printk("CSI config is done\n");
		mb();

		//printk("Register INIT\n");
		s_ctrl->curr_csi_params = NULL;
		rc=msm_sensor_enable_debugfs(s_ctrl);
		if( rc!=0 )
			printk("s5k5ca_sensor_setting()rc:%d",rc);
		rc=msm_sensor_write_init_settings(s_ctrl);
		if( rc!=0 )
			printk("s5k5ca_sensor_setting()rc:%d",rc);
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		//CDBG("PERIODIC : %d\n", res);
		if((res==0) &&(night_mode_flag==msm_v4l2_best_shot_night))
			{
		rc=msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			&s5k5ca_confs_night_mode[0], res);	
		if( rc!=0 )
			printk("s5k5ca_sensor_setting()rc:%d",rc);
			}
		else
		rc=msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			s_ctrl->msm_sensor_reg->mode_settings, res);
		if( rc!=0 )
			printk("s5k5ca_sensor_setting()rc:%d",rc);
		if (res == MSM_SENSOR_RES_4)
			v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
					NOTIFY_PCLK_CHANGE,
					&vfe_clk);
	}
	return rc;
}
int32_t msm_sensor_setting1(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;
	static int csi_config;

	s_ctrl->func_tbl->sensor_stop_stream(s_ctrl);
	msleep(30);
	if (update_type == MSM_SENSOR_REG_INIT) {
		printk("Register INIT\n");
		s_ctrl->curr_csi_params = NULL;
		msm_sensor_enable_debugfs(s_ctrl);
		msm_sensor_write_init_settings(s_ctrl);
		
		
		if (NULL != s_ctrl->func_tbl->sensor_download_af_firmware)
			{
	 
 	               pr_err("+++++download af firmware+++++++++++ %s \n",__func__);

		      rc=s_ctrl->func_tbl->sensor_download_af_firmware(s_ctrl);
        		if(!rc)
        		{
        		  printk("%s:ov5640 AF FW download success\n",__func__);
			#ifdef CONFIG_OV5640	
        		  download_flag=1;   //download success is 1
        		 #endif
        		}
		}
		

		csi_config = 0;
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		printk("PERIODIC : %d\n", res);
		 printk("%s:sensor_name = %s, res = %d\n",__func__, s_ctrl->sensordata->sensor_name, res);

		msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			s_ctrl->msm_sensor_reg->mode_settings, res);
		msleep(30);
		if (!csi_config) {
			s_ctrl->curr_csic_params = s_ctrl->csic_params[res];
			printk("CSI config in progress\n");
			v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
				NOTIFY_CSIC_CFG,
				s_ctrl->curr_csic_params);
			printk("CSI config is done\n");
			mb();
			msleep(30);
			csi_config = 1;
		}
		v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
			NOTIFY_PCLK_CHANGE,
			&s_ctrl->sensordata->pdata->ioclk.vfe_clk_rate);

		s_ctrl->func_tbl->sensor_start_stream(s_ctrl);
		msleep(50);
	}
	return rc;
}
/* msm_sensor_write_res_settings */
int32_t yacd5c1sbdbc_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl,
	uint16_t res)
{
	int32_t rc = 0;
//CDBG("[F_PANTECH_CAMERA]%s: res=%d / check_zsl_flag=%d\n", __func__,res,check_zsl_flag);

    if((check_zsl_flag == 0) && (res == 0)) {
SKYCDBG("%s:[F_PANTECH_CAMERA] Write reg [AE, AWB Off SET]\n", __func__);        
        rc = msm_camera_i2c_write_tbl(
            s_ctrl->sensor_i2c_client,
            s_ctrl->msm_sensor_reg->checkzsl_cfg_settings[0],//[AE, AWB Off SET]
            s_ctrl->msm_sensor_reg->checkzsl_cfg_settings_size,
            s_ctrl->msm_sensor_reg->default_data_type);
    }

	rc = msm_sensor_write_conf_array(
		s_ctrl->sensor_i2c_client,
		s_ctrl->msm_sensor_reg->mode_settings, res);
	if (rc < 0)
		return rc;
#ifndef CONFIG_PANTECH_CAMERA_YACD5C1SBDBC
	rc = msm_sensor_write_output_settings(s_ctrl, res);
#endif
	return rc;
}
static int32_t ov10820_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;

	if (update_type == MSM_SENSOR_REG_INIT) {
		s_ctrl->func_tbl->sensor_stop_stream(s_ctrl);
		msm_sensor_write_init_settings(s_ctrl);
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		if (ov660_exists) {
			rc = ov660_set_sensor_mode(res, revision);
			if (rc < 0)
				return rc;
		}
		rc = msm_sensor_write_conf_array(
				s_ctrl->sensor_i2c_client,
				s_ctrl->msm_sensor_reg->mode_settings, res);
		if (rc < 0)
			return rc;
		v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
			NOTIFY_PCLK_CHANGE, &s_ctrl->msm_sensor_reg->
			output_settings[res].op_pixel_clk);
	}
	return rc;
}
int32_t mt9p017_write_init_settings(struct msm_sensor_ctrl_t *s_ctrl)
{
	int32_t rc=0, i;

	printk("%s is called !\n", __func__);
	
	for (i = 0; i < s_ctrl->msm_sensor_reg->init_size; i++) 
	{
		rc = msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client, 
			s_ctrl->msm_sensor_reg->init_settings, i);
		if (rc < 0)
			break;
	}
#ifndef MT9P017_OTP_SUPPORT
	rc = msm_camera_i2c_write_tbl(
		s_ctrl->sensor_i2c_client,
		&mt9p017_recommend_settings_5[0],
		ARRAY_SIZE(mt9p017_recommend_settings_5), 
		MSM_CAMERA_I2C_WORD_DATA);
#else
	mt9p017_set_lc(s_ctrl);
#endif

	return rc;
}
Example #6
0
int32_t msm_sensor_ov9740_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl,
        uint16_t res)
{
    int32_t rc;
    rc = msm_sensor_write_conf_array(
             s_ctrl->sensor_i2c_client,
             s_ctrl->msm_sensor_reg->mode_settings, res);
    return rc;
}
int32_t hi542_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;
	static int csi_config;

	if (update_type == MSM_SENSOR_REG_INIT) {
		CDBG("Register INIT\n");
		printk("##### %s line%d: Register INIT\n",__func__,__LINE__);
		s_ctrl->func_tbl->sensor_stop_stream(s_ctrl);
		msleep(66);
		s_ctrl->curr_csi_params = NULL;
		msm_sensor_enable_debugfs(s_ctrl);
		printk("##### %s line%d: begin to write init setting !\n",__func__,__LINE__);
		msm_sensor_write_init_settings(s_ctrl);
		printk("##### %s line%d: init setting end !\n",__func__,__LINE__);
		csi_config = 0;
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		CDBG("PERIODIC : %d\n", res);
		s_ctrl->func_tbl->sensor_stop_stream(s_ctrl);
		msleep(66);
		msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			s_ctrl->msm_sensor_reg->mode_settings, res);
		msleep(100);
		if (!csi_config) {
			s_ctrl->curr_csic_params = s_ctrl->csic_params[res];
			CDBG("CSI config in progress\n");
			v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
				NOTIFY_CSIC_CFG,
				s_ctrl->curr_csic_params);
			CDBG("CSI config is done\n");
			mb();
			msleep(30);
			csi_config = 1;
		}

		//zxj ++
		#ifdef ORIGINAL_VERSION
		v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
			NOTIFY_PCLK_CHANGE,
			&s_ctrl->sensordata->pdata->ioclk.vfe_clk_rate);
		#else
		printk("##### %s line%d: vfe_clk_rate = %d\n",__func__,__LINE__,vfe_clk_rate);
		v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
			NOTIFY_PCLK_CHANGE, &vfe_clk_rate);	
		#endif
		//zxj --
		
		s_ctrl->func_tbl->sensor_start_stream(s_ctrl);
		msleep(100);
	}
	return rc;
}
Example #8
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;
}
Example #9
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;
}
Example #10
0
//Sharpness: -3 ~ +4
static int32_t ov9740_set_sharpness(struct msm_sensor_ctrl_t *s_ctrl, uint32_t value)
{
	int32_t rc = 0;
	CDBG("ov9740_set_sharpness: value= %d\n", value);
	//default  when sharpness=0 :value = 3
	if(value >= 0 && value <= 7) {
		s_ctrl->func_tbl->sensor_group_hold_on(s_ctrl);
		rc = msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			&ov9740_sharpness_conf[0],
			value);
		s_ctrl->func_tbl->sensor_group_hold_off(s_ctrl);
	} else {
		pr_err("ov9740_set_sharpness: value= %d not support\n", value);
	}
	return rc;
}
Example #11
0
int32_t bf3905_write_init_settings(struct msm_sensor_ctrl_t *s_ctrl)
{
	int32_t rc=0, i;

	printk("%s is called !\n", __func__);
	
	for (i = 0; i < s_ctrl->msm_sensor_reg->init_size; i++) 
	{
		rc = msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client, 
			s_ctrl->msm_sensor_reg->init_settings, i);
		if (rc < 0)
			break;
	}

	return rc;
}
int32_t msm_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl,
	uint16_t res)
{
	int32_t rc = 0;
#ifdef CONFIG_MACH_MSM8960_STARQ
	SKYCDBG("%s res=%d\n", __func__, res);

	switch (res) {
	case 0:
			if(s_ctrl->sensor_id_info->sensor_id == S5K4ECGX_ID) {
				rc = s5k4ecgx_snapshot_config();	
			}
			else if(s_ctrl->sensor_id_info->sensor_id == MT9V113_ID) {
				rc = mt9v113_snapshot_config();	
			}	

		break;
		
	case 1:
			if(s_ctrl->sensor_id_info->sensor_id == S5K4ECGX_ID) {
				rc = s5k4ecgx_video_config();	
			}
			else if(s_ctrl->sensor_id_info->sensor_id == MT9V113_ID) {
				rc = mt9v113_video_config();
			}
			
		break;

	default:
			SKYCDBG("%s fail res=%d\n", __func__, res);
		break;
	}

	SKYCDBG("%s X (%d)\n", __func__, rc);
#else
	rc = msm_sensor_write_conf_array(
		s_ctrl->sensor_i2c_client,
		s_ctrl->msm_sensor_reg->mode_settings, res);
	if (rc < 0)
		return rc;

	rc = msm_sensor_write_output_settings(s_ctrl, res);
#endif
	return rc;
}
Example #13
0
int32_t msm_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl,
	uint16_t res)
{
	int32_t rc;
	CDBG("+++\n");
	rc = msm_sensor_write_conf_array(
		s_ctrl->sensor_i2c_client,
		s_ctrl->msm_sensor_reg->mode_settings, res);
	if (rc < 0)
		return rc;

/* BEGIN Dom_Lin@pegatron [2012/05/04] [Reduce the time of opening back camera] */
	if (s_ctrl->sensordata->sensor_name == NULL || !(0 == strcmp(s_ctrl->sensordata->sensor_name, "ov5640"))) {
		rc = msm_sensor_write_output_settings(s_ctrl, res);
	}
/* END Dom_Lin@pegatron [2012/05/04] [Reduce the time of opening back camera] */
	return rc;
}
Example #14
0
int32_t msm_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl,
	uint16_t res)
{
	int32_t rc;
	rc = msm_sensor_write_conf_array(
		s_ctrl->sensor_i2c_client,
		s_ctrl->msm_sensor_reg->mode_settings, res);
	if (rc < 0)
		return rc;

	rc = msm_sensor_write_output_settings(s_ctrl, res);
	if (rc < 0)
		return rc;

	if (s_ctrl->func_tbl->sensor_adjust_frame_lines)
		rc = s_ctrl->func_tbl->sensor_adjust_frame_lines(s_ctrl, res);

	return rc;
}
int32_t msm_sensor_setting1(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;
	static int csi_config;

	printk("%s : E\n", __func__); // [email protected]
	s_ctrl->func_tbl->sensor_stop_stream(s_ctrl);
	msleep(30);
	if (update_type == MSM_SENSOR_REG_INIT) {
		CDBG("Register INIT\n");
		s_ctrl->curr_csi_params = NULL;
		msm_sensor_enable_debugfs(s_ctrl);
		msm_sensor_write_init_settings(s_ctrl);
		csi_config = 0;
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		CDBG("PERIODIC : %d\n", res);
		msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			s_ctrl->msm_sensor_reg->mode_settings, res);
		msleep(30);
		if (!csi_config) {
			s_ctrl->curr_csic_params = s_ctrl->csic_params[res];
			CDBG("CSI config in progress\n");
			v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
				NOTIFY_CSIC_CFG,
				s_ctrl->curr_csic_params);
			CDBG("CSI config is done\n");
			mb();
			msleep(30);
			csi_config = 1;
		}
		v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
			NOTIFY_PCLK_CHANGE,
			&s_ctrl->sensordata->pdata->ioclk.vfe_clk_rate);

		s_ctrl->func_tbl->sensor_start_stream(s_ctrl);
		msleep(50);
	}
	printk("%s : X\n", __func__); // [email protected]
	return rc;
}
int32_t msm_sensor_write_res_settings(struct msm_sensor_ctrl_t *s_ctrl,
	uint16_t res)
{
	int32_t rc;
	rc = msm_sensor_write_conf_array(
		s_ctrl->sensor_i2c_client,
		s_ctrl->msm_sensor_reg->mode_settings, res);
	if (rc < 0)
		return rc;

	rc = msm_sensor_write_output_settings(s_ctrl, res);
	if (rc < 0)
		return rc;

#if 0 /*20130110, wisungho, color point기능 동작시 preview화면과 snapshot사진 색감 차이 문제로 인해 막음. */
	if (s_ctrl->func_tbl->sensor_adjust_frame_lines)
		rc = s_ctrl->func_tbl->sensor_adjust_frame_lines(s_ctrl, res);
#endif

	return rc;
}
Example #17
0
int32_t msm_sensor_setting3(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;
	static int csi_config;
	if (update_type == MSM_SENSOR_REG_INIT) {
		CDBG("Register INIT\n");
		s_ctrl->curr_csi_params = NULL;
		csi_config = 0;
		msm_camera_i2c_write(
			s_ctrl->sensor_i2c_client,
			0x0e, 0x08,
			MSM_CAMERA_I2C_BYTE_DATA);
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		CDBG("PERIODIC : %d\n", res);
		if (res == 0)
			return 0;
		if (!csi_config) {
			msm_sensor_write_conf_array(
				s_ctrl->sensor_i2c_client,
				s_ctrl->msm_sensor_reg->mode_settings, res);
			msleep(30);
			s_ctrl->curr_csic_params = s_ctrl->csic_params[res];
			CDBG("CSI config in progress\n");
			v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
				NOTIFY_CSIC_CFG,
				s_ctrl->curr_csic_params);
			CDBG("CSI config is done\n");
			mb();
			msleep(30);
			msm_camera_i2c_write(
					s_ctrl->sensor_i2c_client,
					0x0e, 0x00,
					MSM_CAMERA_I2C_BYTE_DATA);
			csi_config = 1;
		}
		msleep(50);
	}
	return rc;
}
Example #18
0
int ov7692_effect_msm_sensor_s_ctrl_by_enum(struct msm_sensor_ctrl_t *s_ctrl,
		struct msm_sensor_v4l2_ctrl_info_t *ctrl_info, int value)
{
	int rc = 0;
	effect_value = value;
	if (effect_value == CAMERA_EFFECT_OFF) {
		rc = msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			s_ctrl->msm_sensor_reg->no_effect_settings, 0);
		if (rc < 0) {
			CDBG("write faield\n");
			return rc;
		}
		msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0xda, SAT_U,
			MSM_CAMERA_I2C_BYTE_DATA);
		msm_camera_i2c_write(s_ctrl->sensor_i2c_client, 0xdb, SAT_V,
			MSM_CAMERA_I2C_BYTE_DATA);
	} else {
		rc = msm_sensor_write_enum_conf_array(
			s_ctrl->sensor_i2c_client,
			ctrl_info->enum_cfg_settings, value);
	}
	return rc;
}
int32_t s5k5ca_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;

	printk("\n s5k5ca_sensor_setting() update_type:%d res:%d\n",update_type,res);

	if (update_type == MSM_SENSOR_REG_INIT) {
		//printk("PERIODIC : %d\n", res);
		s_ctrl->curr_csic_params = s_ctrl->csic_params[res];
		//printk("CSI config in progress\n");
		v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
			NOTIFY_CSIC_CFG,
			s_ctrl->curr_csic_params);
		//printk("CSI config is done\n");
		mb();

		//printk("Register INIT\n");
		s_ctrl->curr_csi_params = NULL;
		rc=msm_sensor_enable_debugfs(s_ctrl);
		if( rc!=0 )
			printk("s5k5ca_sensor_setting()rc:%d",rc);
		rc=msm_sensor_write_init_settings(s_ctrl);
		if( rc!=0 )
			printk("s5k5ca_sensor_setting()rc:%d",rc);
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		//CDBG("PERIODIC : %d\n", res);
//++ petershih -20130225 - tmp add ++
		if(res == 0)
		{
		   	rc=msm_camera_i2c_write_tbl(
				s5k5ca_s_ctrl.sensor_i2c_client,
				s5k5ca_pre_capture_settings,
				ARRAY_SIZE(s5k5ca_pre_capture_settings),
				s5k5ca_s_ctrl.msm_sensor_reg->default_data_type);   
			if( rc!=0 )
				printk("s5k5ca_sensor_setting()s5k5ca_pre_capture_settings rc:%d",rc);
			msleep(140);
		}
#if 0
		else
		{
		   	rc=msm_camera_i2c_write_tbl(
				s5k5ca_s_ctrl.sensor_i2c_client,
				s5k5ca_pre_preview_settings,
				ARRAY_SIZE(s5k5ca_pre_preview_settings),
				s5k5ca_s_ctrl.msm_sensor_reg->default_data_type);   
			if( rc!=0 )
				printk("s5k5ca_sensor_setting()s5k5ca_pre_preview_settings rc:%d",rc);
			msleep(140);
		}
#endif
//-- petershih -20130225 - tmp add --
		if((res==0) &&(night_mode_flag==msm_v4l2_best_shot_night))
			{
		rc=msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			&s5k5ca_confs_night_mode[0], res);	
		if( rc!=0 )
			printk("s5k5ca_sensor_setting()rc:%d",rc);
			}
		else
		rc=msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			s_ctrl->msm_sensor_reg->mode_settings, res);
		if( rc!=0 )
			printk("s5k5ca_sensor_setting()rc:%d",rc);
		if (res == MSM_SENSOR_RES_4)
			v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
					NOTIFY_PCLK_CHANGE,
					&vfe_clk);
	}
	return rc;
}
int32_t mt9p017_sensor_setting(struct msm_sensor_ctrl_t *s_ctrl,
			int update_type, int res)
{
	int32_t rc = 0;
	static int csi_config;

	struct msm_cam_media_controller *pmctl = NULL;
	struct msm_actuator_ctrl_t *a_ctrl = NULL;
	int16_t stored_step_pos=-1;
	extern uint32_t my_mctl_handle;

	msleep(30);
	if (update_type == MSM_SENSOR_REG_INIT) {
		s_ctrl->func_tbl->sensor_stop_stream(s_ctrl);
		printk("Register INIT\n");
		s_ctrl->curr_csi_params = NULL;
		msm_sensor_enable_debugfs(s_ctrl);
		if(s_ctrl->func_tbl->sensor_write_init_settings)
		{
			s_ctrl->func_tbl->sensor_write_init_settings(s_ctrl);
		}
		else
		{
			msm_sensor_write_init_settings(s_ctrl);
		}
		csi_config = 0;
		s_ctrl->func_tbl->sensor_start_stream(s_ctrl);
	} else if (update_type == MSM_SENSOR_UPDATE_PERIODIC) {
		printk("PERIODIC : %d\n", res);

		/* here we need to get the actuator ctrl to do something to actuator
		 * before writing registers of preview or snapshot, move the actuator
		 * to init position 0, after sensor switched mode successfully, move 
		 * to original position to get clear image
		 */
		pmctl = msm_camera_get_mctl(my_mctl_handle);
		a_ctrl = get_actrl(pmctl->act_sdev);
		stored_step_pos= a_ctrl->curr_step_pos;
		printk("nowt the pos is %d\n", stored_step_pos);
		msm_camera_i2c_write(s_ctrl->sensor_i2c_client,
			0x30F2, 0,
			MSM_CAMERA_I2C_WORD_DATA);

		s_ctrl->func_tbl->sensor_stop_stream(s_ctrl);
		msm_sensor_write_conf_array(
			s_ctrl->sensor_i2c_client,
			s_ctrl->msm_sensor_reg->mode_settings, res);
		msleep(30);
		if (!csi_config) {
			s_ctrl->curr_csic_params = s_ctrl->csic_params[res];
			CDBG("CSI config in progress\n");
			v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
				NOTIFY_CSIC_CFG,
				s_ctrl->curr_csic_params);
			CDBG("CSI config is done\n");
			mb();
			msleep(30);
			csi_config = 1;
		}
		v4l2_subdev_notify(&s_ctrl->sensor_v4l2_subdev,
			NOTIFY_PCLK_CHANGE,
			&s_ctrl->sensordata->pdata->ioclk.vfe_clk_rate);
		
		msm_camera_i2c_write(s_ctrl->sensor_i2c_client,
			0x30F2, a_ctrl->step_position_table[stored_step_pos],
			MSM_CAMERA_I2C_WORD_DATA);
		
		s_ctrl->func_tbl->sensor_start_stream(s_ctrl);
		msleep(50);
	}
	return rc;
}
int32_t pip_ov7695_ctrl(int cmd, struct msm_camera_pip_ctl *pip_ctl)
{
	int rc = 0;
	struct msm_camera_i2c_client sensor_i2c_client;
	struct i2c_client client;
	CDBG("%s IN, cmd:%d\r\n", __func__, cmd);
	switch(cmd)
	{
		case PIP_CRL_WRITE_SETTINGS:
			if(NULL == pip_ctl){
				CDBG("%s parameters check error, exit\r\n", __func__);
				return rc;
			}
			memcpy(&sensor_i2c_client, pip_ctl->sensor_i2c_client, sizeof(struct msm_camera_i2c_client));
			memcpy(&client, pip_ctl->sensor_i2c_client->client, sizeof(struct i2c_client));
			client.addr = ov7695_i2c_address;
			sensor_i2c_client.client = &client;
			CDBG("write_ctl:%d\r\n", pip_ctl->write_ctl);
			if(PIP_REG_SETTINGS_INIT == pip_ctl->write_ctl)
			{
				rc = msm_sensor_write_all_conf_array(
					&sensor_i2c_client, &ov7695_raw_pip_init_conf_slave[0],
					ARRAY_SIZE(ov7695_raw_pip_init_conf_slave));
			}
			else
			{
				rc = msm_sensor_write_conf_array(
				&sensor_i2c_client,
				&ov7695_raw_pip_confs_slave[0], pip_ctl->write_ctl);
			}
			break;
		case PIP_CRL_POWERUP:
			if(0 != ov7695_pwdn_pin)
			{
				CDBG("PIP ctrl, set the gpio:%d to 1\r\n", ov7695_pwdn_pin);
				gpio_direction_output(ov7695_pwdn_pin, 1);
			}
			break;
		case PIP_CRL_POWERDOWN:
			if(0 != ov7695_pwdn_pin)
			{
				CDBG("PIP ctrl, set the gpio:%d to 0\r\n", ov7695_pwdn_pin);
				gpio_direction_output(ov7695_pwdn_pin, 0);
			}
			break;
		case PIP_CTL_RESET_HW_PULSE:
			break;
		case PIP_CTL_RESET_SW:
			if(NULL == pip_ctl){
				CDBG("%s parameters check error, exit\r\n", __func__);
				return rc;
			}
			memcpy(&sensor_i2c_client, pip_ctl->sensor_i2c_client, sizeof(struct msm_camera_i2c_client));
			memcpy(&client, pip_ctl->sensor_i2c_client->client, sizeof(struct i2c_client));
			client.addr = ov7695_i2c_address;
			sensor_i2c_client.client = &client;
			msm_camera_i2c_write(&sensor_i2c_client, 0x103, 0x1,
				MSM_CAMERA_I2C_BYTE_DATA);
			break;
		default:
			break;
	}

	return rc;
}