コード例 #1
0
static u32 mt9v113_sensor_set_xclk(struct v4l2_int_device *s, u32 xclkfreq)
{
  struct omap34xxcam_videodev *vdev = s->u.slave->master->priv;
  struct isp_device *isp = dev_get_drvdata(vdev->cam->isp);

  /* Enable/Disable sensor xclk */
  if (xclkfreq)
      isp_enable_mclk(isp->dev);
  else
      isp_disable_mclk(isp);

  return isp_set_xclk(vdev->cam->isp, xclkfreq, USE_XCLKB); // XCLK B 
}
コード例 #2
0
static int ov7675_sensor_power_set(struct v4l2_int_device *s, enum v4l2_power power)
{
    struct omap34xxcam_videodev *vdev = s->u.slave->master->priv;
    struct isp_device *isp = dev_get_drvdata(vdev->cam->isp);
    static enum v4l2_power previous_power = V4L2_POWER_OFF;

    switch (power) {
    case V4L2_POWER_OFF:
        printk("ov7675_sensor_power_set : Power OFF...\n");
        /* Power Down Sequence */
        /* PWDN is active HIGH */
        gpio_set_value(pwdn_gpio, 1);
        if (previous_power != V4L2_POWER_OFF)
            isp_disable_mclk(isp);
        break;

    case V4L2_POWER_STANDBY:
    case V4L2_POWER_ON:
        printk("ov7675_sensor_power_set : Power ON...\n");
        if (previous_power == V4L2_POWER_OFF) {

            /* Power Up Sequence */
            isp_configure_interface(vdev->cam->isp, &ov7675_if_config);

            // fyi, regulator_enable takes +/-8ms

            /* Give sensor sometime to get out of the reset.
             * Datasheet says >=5 ms.
             */
            msleep(10);

            /* PWDN is active HIGH. Set LOW to release
             * PWDN at the end of the power up sequence.
             */
            gpio_set_value(pwdn_gpio, 0);

            /* We need to wait a little before any I2C access.
             * Datasheet says >= 20 ms.
             */
            msleep(40);
        }
        break;
    }

    /* Save powerstate to know what was before calling POWER_ON. */
    previous_power = power;
    return 0;
}
コード例 #3
0
static int imx072_sensor_power_set(struct v4l2_int_device *s, enum v4l2_power power)
{
	struct omap34xxcam_videodev *vdev = s->u.slave->master->priv;
	struct isp_device *isp = dev_get_drvdata(vdev->cam->isp);
	struct isp_csi2_lanes_cfg lanecfg;
	struct isp_csi2_phy_cfg phyconfig;
	static enum v4l2_power previous_power = V4L2_POWER_OFF;
// 20110426 [email protected] Update omap_pm_set_max_mpu_wakeup_lat()  for 2.6.35 kernel [START]
	static struct pm_qos_request_list *qos_request;
// 20110426 [email protected] Update omap_pm_set_max_mpu_wakeup_lat()  for 2.6.35 kernel [END]
	int err = 0;
	switch (power) {
	case V4L2_POWER_ON:		
		/* Power Up Sequence */
		printk(KERN_DEBUG "imx072_sensor_power_set(ON)\n");

// [email protected] [TBD]Temporarily block the following code because PM APIs have been changed [START]
#if 1
		/*
		 * Through-put requirement:
		 * Set max OCP freq for 3630 is 200 MHz through-put
		 * is in KByte/s so 200000 KHz * 4 = 800000 KByte/s
		 */
		omap_pm_set_min_bus_tput(vdev->cam->isp,
					 OCP_INITIATOR_AGENT, 800000);

		/* Hold a constraint to keep MPU in C1 */
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, 12);
#endif
// [email protected] [TBD]Temporarily block the following code because PM APIs have been changed [END]

		isp_csi2_reset(&isp->isp_csi2);

		lanecfg.clk.pol = IMX072_CSI2_CLOCK_POLARITY;
		lanecfg.clk.pos = IMX072_CSI2_CLOCK_LANE;
		lanecfg.data[0].pol = IMX072_CSI2_DATA0_POLARITY;
		lanecfg.data[0].pos = IMX072_CSI2_DATA0_LANE;
		lanecfg.data[1].pol = IMX072_CSI2_DATA1_POLARITY;
		lanecfg.data[1].pos = IMX072_CSI2_DATA1_LANE;
		lanecfg.data[2].pol = 0;
		lanecfg.data[2].pos = 0;
		lanecfg.data[3].pol = 0;
		lanecfg.data[3].pos = 0;
		isp_csi2_complexio_lanes_config(&isp->isp_csi2, &lanecfg);
		isp_csi2_complexio_lanes_update(&isp->isp_csi2, true);

		isp_csi2_ctrl_config_ecc_enable(&isp->isp_csi2, true);

		phyconfig.ths_term = IMX072_CSI2_PHY_THS_TERM;
		phyconfig.ths_settle = IMX072_CSI2_PHY_THS_SETTLE;
		phyconfig.tclk_term = IMX072_CSI2_PHY_TCLK_TERM;
		phyconfig.tclk_miss = IMX072_CSI2_PHY_TCLK_MISS;
		phyconfig.tclk_settle = IMX072_CSI2_PHY_TCLK_SETTLE;
		isp_csi2_phy_config(&isp->isp_csi2, &phyconfig);
		isp_csi2_phy_update(&isp->isp_csi2, true);

		isp_configure_interface(vdev->cam->isp, &imx072_if_config);

//--[[ LGE_UBIQUIX_MODIFIED_START : [email protected] [2011.09.19] - CAM
        gpio_direction_output(SUBPM_ENABLE, 1);
//--]] LGE_UBIQUIX_MODIFIED_END : [email protected] [2011.09.19] - CAM

		/* Request and configure gpio pins */
		if (gpio_request(IMX072_RESET_GPIO, "imx072_rst") != 0)
			return -EIO;

		subpm_set_output(SWREG,1);
		subpm_output_enable();
		subpm_set_output(LDO4,1);
		subpm_output_enable();
		subpm_set_output(LDO3,1);
		subpm_output_enable();

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
					VAUX_1_8_V, TWL4030_VAUX4_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
					VAUX_DEV_GRP_P1, TWL4030_VAUX4_DEV_GRP);
	
		udelay(100);
		
		/* have to put sensor to reset to guarantee detection */
		gpio_direction_output(IMX072_RESET_GPIO, 1);
//		gpio_set_value(IMX072_RESET_GPIO, 1);
		udelay(100);
			
//		gpio_direction_output(IMX072_RESET_GPIO, 0);
		gpio_set_value(IMX072_RESET_GPIO, 0);

		udelay(1500);

		/* nRESET is active LOW. set HIGH to release reset */
//		gpio_direction_output(IMX072_RESET_GPIO, 1);
		gpio_set_value(IMX072_RESET_GPIO, 1);
		udelay(300);

		break;
	case V4L2_POWER_OFF:
		subpm_set_output(LDO5,0);
		subpm_output_enable();
        gpio_set_value(DW9716_VCM_ENABLE, 0);

        isp_disable_mclk(isp);
        isp_csi2_complexio_power(&isp->isp_csi2, ISP_CSI2_POWER_OFF);
        isp_csi2_reset(&isp->isp_csi2);
        isp_csi2_ctrl_config_ecc_enable(&isp->isp_csi2, true);
        isp_csi2_complexio_power(&isp->isp_csi2, ISP_CSI2_POWER_OFF);
        isp_disable_mclk(isp);
//--[[ LGE_UBIQUIX_MODIFIED_START : [email protected] [2011.09.19] - CAM
		gpio_direction_output(SUBPM_ENABLE, 0);
//--]] LGE_UBIQUIX_MODIFIED_END : [email protected] [2011.09.19] - CAM
		break;	
		
	case V4L2_POWER_STANDBY:
		printk(KERN_DEBUG "imx072_sensor_power_set(%s)\n",
			(power == V4L2_POWER_OFF) ? "OFF" : "STANDBY");
		/* Power Down Sequence */
		isp_csi2_complexio_power(&isp->isp_csi2, ISP_CSI2_POWER_OFF);

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				VAUX_DEV_GRP_NONE, TWL4030_VAUX4_DEV_GRP);
		gpio_set_value(IMX072_RESET_GPIO, 0);
		udelay(5);
		subpm_set_output(LDO3,0);
		subpm_output_enable();
		subpm_set_output(LDO4,0);
		subpm_output_enable();
		subpm_set_output(SWREG,0);
		subpm_output_enable();
		gpio_free(IMX072_RESET_GPIO);

// [email protected] [TBD]Temporarily block the following code because PM APIs have been changed [START]
#if 1
		/* Remove pm constraints */
		omap_pm_set_min_bus_tput(vdev->cam->isp, OCP_INITIATOR_AGENT, 0);
		//omap_pm_set_max_mpu_wakeup_lat(vdev->cam->isp, -1);
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, -1);
#endif
// [email protected] [TBD]Temporarily block the following code because PM APIs have been changed [END]

		/* Make sure not to disable the MCLK twice in a row */
		if (previous_power == V4L2_POWER_ON)
			isp_disable_mclk(isp);

//--[[ LGE_UBIQUIX_MODIFIED_START : [email protected] [2011.09.19] - CAM
		isp_disable_mclk(isp);
//--]] LGE_UBIQUIX_MODIFIED_END : [email protected] [2011.09.19] - CAM

		break;
	}

	/* Save powerstate to know what was before calling POWER_ON. */
	previous_power = power;
	return err;
}
コード例 #4
0
static int yacd5b1s_sensor_power_set(struct v4l2_int_device *dev, enum v4l2_power power)
{
	struct omap34xxcam_videodev *vdev = dev->u.slave->master->priv;
	struct isp_device *isp = dev_get_drvdata(vdev->cam->isp);
	static enum v4l2_power previous_power = V4L2_POWER_OFF;
//--[[ LGE_UBIQUIX_MODIFIED_START : [email protected] [2011.07.26] - CAM
// 20110426 [email protected] Update omap_pm_set_max_mpu_wakeup_lat()  for 2.6.35 kernel [START]
	static struct pm_qos_request_list *qos_request;
// 20110426 [email protected] Update omap_pm_set_max_mpu_wakeup_lat()  for 2.6.35 kernel [END]
//--]] LGE_UBIQUIX_MODIFIED_END : [email protected] [2011.07.26] - CAM  
	int err = 0;

	switch (power) {
	case V4L2_POWER_ON:
		/* Power Up Sequence */
		printk(KERN_DEBUG "yacd5b1s_sensor_power_set(ON)\n");


		omap_pm_set_min_bus_tput(vdev->cam->isp, OCP_INITIATOR_AGENT, 800000);

		/* Hold a constraint to keep MPU in C1 */
//--[[ LGE_UBIQUIX_MODIFIED_START : [email protected] [2011.07.26] - CAM
 	   // 20110426 [email protected] Update omap_pm_set_max_mpu_wakeup_lat()  for 2.6.35 kernel [START]
    	//omap_pm_set_max_mpu_wakeup_lat(vdev->cam->isp, 12);
    	omap_pm_set_max_mpu_wakeup_lat(&qos_request, 12);
		// 20110426 [email protected] Update omap_pm_set_max_mpu_wakeup_lat()  for 2.6.35 kernel [END]
//--]] LGE_UBIQUIX_MODIFIED_END : [email protected] [2011.07.26] - CAM  	

		isp_configure_interface(vdev->cam->isp,&yacd5b1s_if_config);


		if (gpio_request(YACD5B1S_RESET_GPIO, "yacd5b1s_rst") != 0)
			printk("\n\n\n>>>>>>>>>>>>YACD5B1S_RESET_GPIO_gpio_request_error\n\n\n");//return -EIO;
	
		if (gpio_request(YACD5B1S_STANDBY_GPIO, "yacd5b1s_PWD") != 0)
			printk("\n\n\n>>>>>>>>>>>>YACD5B1S_STANDBY_GPIO_gpio_request_error\n\n\n");//return -EIO;return -EIO;

#if 1
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 
					SET_VMMC1_V2_8,VMMC1_DEDICATED );
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 
					VMMC1_DEV_GRP_P1,VMMC1_DEV_GRP );
#endif

		udelay(20);

#if 1
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
					VAUX3_1_8_V, TWL4030_VAUX3_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
					VAUX_DEV_GRP_P1, TWL4030_VAUX3_DEV_GRP);
#endif

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
					VAUX_1_8_V, TWL4030_VAUX4_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
					VAUX_DEV_GRP_P1, TWL4030_VAUX4_DEV_GRP);
	
		//wait typical 500ms for xclk to settle
        //mdelay(500);
		
		gpio_direction_output(YACD5B1S_STANDBY_GPIO, true);
		udelay(100);
		gpio_set_value(YACD5B1S_STANDBY_GPIO, 0);
		udelay(1500);

		gpio_set_value(YACD5B1S_STANDBY_GPIO, 1);
		mdelay(100);

		udelay(50);

		gpio_direction_output(YACD5B1S_RESET_GPIO, true);
		udelay(100);
		gpio_set_value(YACD5B1S_RESET_GPIO, 0);
		
		/* set to output mode */


		udelay(1500);

		gpio_set_value(YACD5B1S_RESET_GPIO, 1);

		udelay(300);

		break;
		
	case V4L2_POWER_OFF:
		printk(KERN_DEBUG "yacd5b1s_sensor_power_set(OFF)\n");
		/* Power Down Sequence */

		gpio_set_value(YACD5B1S_RESET_GPIO, 0);
		udelay(50);
		gpio_set_value(YACD5B1S_STANDBY_GPIO, 0);

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				VAUX_DEV_GRP_NONE, TWL4030_VAUX4_DEV_GRP);

#if 1
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 
					VAUX_DEV_GRP_NONE,VMMC1_DEV_GRP );
#endif
#if 1
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
					VAUX_DEV_GRP_NONE, TWL4030_VAUX3_DEV_GRP);
#endif

		
		gpio_free(YACD5B1S_STANDBY_GPIO);
		gpio_free(YACD5B1S_RESET_GPIO);
		
		
		omap_pm_set_min_bus_tput(vdev->cam->isp, OCP_INITIATOR_AGENT, -1);
//--[[ LGE_UBIQUIX_MODIFIED_START : [email protected] [2011.07.26] - CAM    
		// 20110426 [email protected] Update omap_pm_set_max_mpu_wakeup_lat()  for 2.6.35 kernel [START]
		//omap_pm_set_max_mpu_wakeup_lat(vdev->cam->isp, -1);    
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, -1);
		// 20110426 [email protected] Update omap_pm_set_max_mpu_wakeup_lat()  for 2.6.35 kernel [END]
//--]] LGE_UBIQUIX_MODIFIED_END : [email protected] [2011.07.26] - CAM  
		if (previous_power == V4L2_POWER_ON){
			isp_disable_mclk(isp);
			udelay(5);
        }

		break;
		
	case V4L2_POWER_STANDBY:
		printk(KERN_DEBUG "yacd5b1s_sensor_power_set(STANDBY)\n");

		gpio_set_value(YACD5B1S_RESET_GPIO, 0);
		udelay(50);
		gpio_set_value(YACD5B1S_STANDBY_GPIO, 0);
		udelay(50);
		gpio_free(YACD5B1S_STANDBY_GPIO);
		gpio_free(YACD5B1S_RESET_GPIO);

		if (previous_power == V4L2_POWER_ON){
			isp_disable_mclk(isp);
			udelay(5);
        }

		break;
	}

	/* Save powerstate to know what was before calling POWER_ON. */
	previous_power = power;

	return err;
}
コード例 #5
0
static int S5K5CA_sensor_power_set(struct v4l2_int_device *s, enum v4l2_power power)
{
	struct omap34xxcam_videodev *vdev = s->u.slave->master->priv;
	struct isp_device *isp = dev_get_drvdata(vdev->cam->isp);

	static enum v4l2_power previous_power = V4L2_POWER_OFF;
	static struct pm_qos_request_list *qos_request;
	int err = 0;

	printk(KERN_INFO "previous_power = %d,S5K5CA_sensor_power_set(%d)\n",previous_power,power);

	switch (power) {
	case V4L2_POWER_ON:
		/* Through-put requirement:
		 * 3280 x 2464 x 2Bpp x 7.5fps x 3 memory ops = 355163 KByte/s
		 */
		omap_pm_set_min_bus_tput(vdev->cam->isp,
		OCP_INITIATOR_AGENT, 664000); // 276480);

		/* Hold a constraint to keep MPU in C1 */
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, 12);

		isp_configure_interface(vdev->cam->isp,&S5K5CA_if_config);

		/* turn on analog power */
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX2_1_5_V, TWL4030_VAUX2_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_P1, TWL4030_VAUX2_DEV_GRP);
		   udelay(600);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_2_8_V, TWL4030_VAUX4_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_P1, TWL4030_VAUX4_DEV_GRP);
		udelay(100);
		printk(KERN_INFO "VAUX4 = 2.8V\n");

		gpio_direction_output(S5K5CA_RESET_GPIO, 0);
		printk(KERN_INFO "reset camera\n");
		udelay(20);

		gpio_direction_output(S5K5CA_STANDBY_GPIO, 1);
		udelay(20);

		gpio_direction_output(S5K5CA_RESET_GPIO, 1);
		//udelay(20);
		break;
	case V4L2_POWER_OFF:
		printk(KERN_INFO "S5K5CA_sensor_power_set(OFF)\n");
		break;
	case V4L2_POWER_STANDBY:
		printk(KERN_INFO "S5K5CA_sensor_power_set(STANDBY)\n");
		/* Remove pm constraints */

		gpio_direction_output(S5K5CA_STANDBY_GPIO, 0);
		mdelay(50);

		omap_pm_set_min_bus_tput(vdev->cam->isp, OCP_INITIATOR_AGENT, 0);
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, -1);

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_NONE, TWL4030_VAUX4_DEV_GRP);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_NONE, TWL4030_VAUX2_DEV_GRP);

		/* Make sure not to disable the MCLK twice in a row */
		if (previous_power == V4L2_POWER_ON)
			isp_disable_mclk(isp);
		break;
	}

	/* Save powerstate to know what was before calling POWER_ON. */
	previous_power = power;
	return err;
}
コード例 #6
0
static int ov2659_sensor_power_set(struct v4l2_int_device *s, enum v4l2_power power)
{
	struct omap34xxcam_videodev *vdev = s->u.slave->master->priv;
	struct isp_device *isp = dev_get_drvdata(vdev->cam->isp);

	static enum v4l2_power previous_power = V4L2_POWER_OFF;
	static struct pm_qos_request_list *qos_request;
	int err = 0;

	printk(KERN_INFO "previous_power = %d,ov2659_sensor_power_set(%d)\n",previous_power,power);

	switch (power) {
	case V4L2_POWER_ON:
		/* Through-put requirement:
		 * 3280 x 2464 x 2Bpp x 7.5fps x 3 memory ops = 355163 KByte/s
		 */
		omap_pm_set_min_bus_tput(vdev->cam->isp,
			 OCP_INITIATOR_AGENT, 664000);

		/* Hold a constraint to keep MPU in C1 */
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, 12);

		isp_configure_interface(vdev->cam->isp,&ov2659_if_config);
		udelay(20);

#if OV2659_USE_STANDBY  //add standby mode for cam open speed up  jhy  2011.09.09

		if (previous_power == V4L2_POWER_OFF)
		{
			gpio_direction_output(OV2659_STANDBY_GPIO, 0); //standby
			gpio_direction_output(OV2659_RESET_GPIO, 1);

			/* turn on analog & IO power jhy add VAUX3 Ctrl 2011.6.30*/

			twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				VAUX3_1_8_V, TWL4030_VAUX3_DEDICATED);
			twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				VAUX_DEV_GRP_P1, TWL4030_VAUX3_DEV_GRP);
			twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				TWL4030_VAUX_REMAP_VALUE, TWL4030_VAUX3_REMAP);

			twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				VAUX2_1_5_V, TWL4030_VAUX2_DEDICATED);
			twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				VAUX_DEV_GRP_P1, TWL4030_VAUX2_DEV_GRP);
			twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				TWL4030_VAUX_REMAP_VALUE, TWL4030_VAUX2_REMAP);

			twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				VAUX_2_8_V, TWL4030_VAUX4_DEDICATED);
			twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				VAUX_DEV_GRP_P1, TWL4030_VAUX4_DEV_GRP);
			twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
				TWL4030_VAUX_REMAP_VALUE, TWL4030_VAUX4_REMAP);
			udelay(100);

			//printk(KERN_INFO "VAUX4 = 2.8V\n");

			/* have to put sensor to reset to guarantee detection */
			gpio_direction_output(OV2659_RESET_GPIO, 0);
			udelay(1500);
			/* nRESET is active LOW. set HIGH to release reset */
			gpio_direction_output(OV2659_RESET_GPIO, 1);
		}
		else
		{
			gpio_direction_output(OV2659_STANDBY_GPIO, 0);
			printk(KERN_INFO "camera(OV2659) exit standby\n");
		}
#else
		gpio_direction_output(OV2659_STANDBY_GPIO, 0); //standby
		gpio_direction_output(OV2659_RESET_GPIO, 1);

		/* turn on analog & IO power jhy add VAUX3 Ctrl 2011.6.30*/

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX3_1_8_V, TWL4030_VAUX3_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_P1, TWL4030_VAUX3_DEV_GRP);

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX2_1_5_V, TWL4030_VAUX2_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_P1, TWL4030_VAUX2_DEV_GRP);

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_2_8_V, TWL4030_VAUX4_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_P1, TWL4030_VAUX4_DEV_GRP);
		udelay(100);

		//printk(KERN_INFO "VAUX4 = 2.8V\n");

		/* have to put sensor to reset to guarantee detection */
		gpio_direction_output(OV2659_RESET_GPIO, 0);
		udelay(1500);
		/* nRESET is active LOW. set HIGH to release reset */
		gpio_direction_output(OV2659_RESET_GPIO, 1);
#endif
		//printk(KERN_INFO "reset camera\n");
		break;

	case V4L2_POWER_OFF:
		printk(KERN_INFO "OV2659_sensor_power_set(OFF)\n");
	case V4L2_POWER_STANDBY:
		/* Remove pm constraints */
		omap_pm_set_min_bus_tput(vdev->cam->isp, OCP_INITIATOR_AGENT, 0);
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, -1);

#if OV2659_USE_STANDBY  // standby mode for cam  jhy 2011.09.09
		gpio_direction_output(OV2659_STANDBY_GPIO, 1);
#else
		gpio_direction_output(OV2659_STANDBY_GPIO, 0);
		gpio_direction_output(OV2659_RESET_GPIO, 0);

#if 1 /*definded CONFIG_CAM_GPIO_I2C */
		gpio_direction_output(CAM_SCL_GPIO, 0);
		gpio_direction_output(CAM_SDA_GPIO, 0);
	   #endif

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_NONE, TWL4030_VAUX4_DEV_GRP);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_NONE, TWL4030_VAUX2_DEV_GRP);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_NONE, TWL4030_VAUX3_DEV_GRP);  //jhy add for Cam IOVDD ctrl  2011.6.30
#endif
		/* Make sure not to disable the MCLK twice in a row */
		if (previous_power == V4L2_POWER_ON)
			isp_disable_mclk(isp);
		break;
	}
#if !OV2659_USE_STANDBY

	/* Save powerstate to know what was before calling POWER_ON. */
	previous_power = power;
#endif

	return err;
}
コード例 #7
0
static int gc2015_sensor_power_set(struct v4l2_int_device *s, enum v4l2_power power)
{
	struct omap34xxcam_videodev *vdev = s->u.slave->master->priv;
	struct isp_device *isp = dev_get_drvdata(vdev->cam->isp);

	static enum v4l2_power previous_power = V4L2_POWER_OFF;
	static struct pm_qos_request_list *qos_request;
	int err = 0;

	printk(KERN_INFO "previous_power = %d,gc2015_sensor_power_set(%d)\n",previous_power,power);

	switch (power) {
	case V4L2_POWER_ON:
		/* Through-put requirement:
		 * 3280 x 2464 x 2Bpp x 7.5fps x 3 memory ops = 355163 KByte/s
		 */
		omap_pm_set_min_bus_tput(vdev->cam->isp,
			 OCP_INITIATOR_AGENT, 664000);

		/* Hold a constraint to keep MPU in C1 */
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, 12);

		isp_configure_interface(vdev->cam->isp,&gc2015_if_config);
		udelay(20);
//#ifndef KUNLUN_P0 jhy close according to cam poweron timing
		//gpio_direction_output(GC2015_STANDBY_GPIO, 0);
		//udelay(10);
//#endif
		// gpio_direction_output(GC2015_RESET_GPIO, 0);

		/* turn on analog & IO power jhy add VAUX3 Ctrl 2011.6.30*/

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX3_1_8_V, TWL4030_VAUX3_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_P1, TWL4030_VAUX3_DEV_GRP);

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX2_1_5_V, TWL4030_VAUX2_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_P1, TWL4030_VAUX2_DEV_GRP);

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_2_8_V, TWL4030_VAUX4_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_P1, TWL4030_VAUX4_DEV_GRP);
		udelay(100);

		printk(KERN_INFO "VAUX4 = 2.8V\n");
/*jhy add according to cam poweron timing beg 2011.6.30*/
#if 1 /*defined CONFIG_CAM_GPIO_I2C*/
		gpio_direction_output(CAM_SCL_GPIO, 1);
		gpio_direction_output(CAM_SDA_GPIO, 1);
#endif

		gpio_direction_output(GC2015_STANDBY_GPIO, 0); //standby
/*jhy add according to cam poweron timing end 2011.6.30*/
		/* have to put sensor to reset to guarantee detection */
		gpio_direction_output(GC2015_RESET_GPIO, 0);
		udelay(1500);
		/* nRESET is active LOW. set HIGH to release reset */
		gpio_direction_output(GC2015_RESET_GPIO, 1);

		printk(KERN_INFO "reset camera\n");
		break;
	case V4L2_POWER_OFF:
		printk(KERN_INFO "GC2015_sensor_power_set(OFF)\n");
	case V4L2_POWER_STANDBY:
		printk(KERN_INFO "GC2015_sensor_power_set(STANDBY)\n");
#ifndef KUNLUN_P0
		/*kunlun P0 can't use GC2015_STANDBY_GPIO*/
		gpio_direction_output(GC2015_STANDBY_GPIO, 0);  //1 change by jhy for IOVDD has been close so standby no use 2011.6.30
		udelay(20);
		gpio_direction_output(GC2015_RESET_GPIO, 0);
		udelay(20);
		//printk(KERN_DEBUG "GC2015_sensor_power_set(STANDBY)\n");
#endif
		/* Remove pm constraints */
		omap_pm_set_min_bus_tput(vdev->cam->isp, OCP_INITIATOR_AGENT, 0);
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, -1);

/*jhy add according to cam poweron timing beg 2011.6.30*/
#if 1 /*definded CONFIG_CAM_GPIO_I2C*/
		gpio_direction_output(CAM_SCL_GPIO, 0);
		gpio_direction_output(CAM_SDA_GPIO, 0);
#endif
/*jhy add according to cam poweron timing end 2011.6.30*/
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_NONE, TWL4030_VAUX4_DEV_GRP);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_NONE, TWL4030_VAUX2_DEV_GRP);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_NONE, TWL4030_VAUX3_DEV_GRP);  //jhy add for Cam IOVDD ctrl  2011.6.30

		/* Make sure not to disable the MCLK twice in a row */
		if (previous_power == V4L2_POWER_ON)
			isp_disable_mclk(isp);
		break;
	}

	/* Save powerstate to know what was before calling POWER_ON. */
	previous_power = power;
	return err;
}
コード例 #8
0
static int hi253_power_set(struct v4l2_int_device *s, enum v4l2_power power,u8 type)
{
	struct omap34xxcam_videodev *vdev = s->u.slave->master->priv;
	struct isp_device *isp = dev_get_drvdata(vdev->cam->isp);

	static enum v4l2_power previous_power = V4L2_POWER_OFF;
	static struct pm_qos_request_list *qos_request;
	int err = 0;

	printk(KERN_ERR "previous_power = %d,Hi253_sensor_power_set(%d)\n",previous_power,power);

	switch (power) {
	case V4L2_POWER_ON:
		/*
		 * Through-put requirement:
		 * Set max OCP freq for 3630 is 200 MHz through-put
		 * is in KByte/s so 200000 KHz * 4 = 800000 KByte/s
		 */
		omap_pm_set_min_bus_tput(vdev->cam->isp,
			OCP_INITIATOR_AGENT, 800000);

		/* Hold a constraint to keep MPU in C1 */
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, 12);

		isp_configure_interface(vdev->cam->isp,&Hi253_if_config);

		gpio_direction_output(BF3703_STANDBY_GPIO,1);

		gpio_direction_output(HI253_STANDBY_GPIO, 0);
		udelay(10);

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_2_8_V, TWL4030_VAUX4_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VAUX_DEV_GRP_P1, TWL4030_VAUX4_DEV_GRP);
		udelay(100);
		printk(KERN_ERR "VAUX4 = 2.8V\n");

		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VMMC2_1_5_V, TWL4030_VMMC2_DEDICATED);
		twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
			VMMC2_DEV_GRP_P1, TWL4030_VMMC2_DEV_GRP);
		udelay(100);

		printk(KERN_ERR "VMMC2 = 1.5V\n");


		gpio_direction_output(HI253_RESET_GPIO, 1);
		mdelay(1);
		/* have to put sensor to reset to guarantee detection */
		gpio_direction_output(HI253_RESET_GPIO, 0);
		udelay(1500);
		/* nRESET is active LOW. set HIGH to release reset */
		gpio_direction_output(HI253_RESET_GPIO, 1);

		printk(KERN_ERR "reset camera(HI253)\n");
		break;

	case V4L2_POWER_OFF:
	case V4L2_POWER_STANDBY:
		printk(KERN_ERR "_sensor_power_set(OFF )\n");

		gpio_direction_output(HI253_STANDBY_GPIO, 1);
		printk(KERN_DEBUG "hi253_sensor_power_set(STANDBY)\n");

		/* Remove pm constraints */
		omap_pm_set_min_bus_tput(vdev->cam->isp, OCP_INITIATOR_AGENT, 0);
		omap_pm_set_max_mpu_wakeup_lat(&qos_request, -1);

		/*
		   twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
		   VAUX_DEV_GRP_NONE, TWL4030_VAUX4_DEV_GRP);
		   twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
		   VAUX_DEV_GRP_NONE, TWL4030_VMMC2_DEV_GRP);
		   */


		/* Make sure not to disable the MCLK twice in a row */
		if (previous_power == V4L2_POWER_ON){
			isp_disable_mclk(isp);
		}
		break;

		//    printk(KERN_ERR "_sensor_power_set(STANDBY)\n");
		break;
	}

	/* Save powerstate to know what was before calling POWER_ON. */
	previous_power = power;
	return err;
}