int camera_power_off (void) { int rc; struct device *dev = su370_backlight_dev(); camera_power_mutex_lock(); if (lcd_bl_power_state == BL_POWER_SUSPEND) { u370_pwrsink_resume(); mdelay(50); } /*Nstandby low*/ gpio_set_value(GPIO_CAM_PWDN, 0); mdelay(5); /*reset low*/ gpio_set_value(GPIO_CAM_RESET, 0); { struct vreg *vreg_mmc = vreg_get(0, "mmc"); vreg_set_level(vreg_mmc, 0); vreg_disable(vreg_mmc); } /*AVDD power 2.7V*/ rc = aat28xx_ldo_set_level(dev, LDO_CAM_AVDD_NO, 0); if (rc < 0) { printk(KERN_ERR "%s: ldo %d set level error\n", __func__, LDO_CAM_AVDD_NO); goto power_off_fail; } rc = aat28xx_ldo_enable(dev, LDO_CAM_AVDD_NO, 0); if (rc < 0) { printk(KERN_ERR "%s: ldo %d control error\n", __func__, LDO_CAM_AVDD_NO); goto power_off_fail; } /*IOVDD power 2.6V*/ rc = aat28xx_ldo_set_level(dev, LDO_CAM_IOVDD_NO, 0); if (rc < 0) { printk(KERN_ERR "%s: ldo %d set level error\n", __func__, LDO_CAM_IOVDD_NO); goto power_off_fail; } rc = aat28xx_ldo_enable(dev, LDO_CAM_IOVDD_NO, 0); if (rc < 0) { printk(KERN_ERR "%s: ldo %d control error\n", __func__, LDO_CAM_IOVDD_NO); goto power_off_fail; } /* DVDD power 1.2V*/ rc = aat28xx_ldo_set_level(dev, LDO_CAM_DVDD_NO, 0); if (rc < 0) { printk(KERN_ERR "%s: ldo %d set level error\n", __func__, LDO_CAM_DVDD_NO); goto power_off_fail; } rc = aat28xx_ldo_enable(dev, LDO_CAM_DVDD_NO, 0); if (rc < 0) { printk(KERN_ERR "%s: ldo %d control error\n", __func__, LDO_CAM_DVDD_NO); goto power_off_fail; } camera_power_state = CAM_POWER_OFF; power_off_fail: camera_power_mutex_unlock(); return rc; }
int camera_power_on (void) { int rc; struct device *dev = su370_backlight_dev(); camera_power_mutex_lock(); if(lcd_bl_power_state == BL_POWER_SUSPEND) { u370_pwrsink_resume(); mdelay(50); } /* clear RESET, PWDN to Low*/ gpio_set_value(GPIO_CAM_RESET, 0); gpio_set_value(GPIO_CAM_PWDN, 0); /*AVDD power 2.8V*/ { /* it is for rev.c and default */ struct vreg *vreg_mmc = vreg_get(0, "mmc"); vreg_set_level(vreg_mmc, 2800); vreg_enable(vreg_mmc); } /* DVDD power 1.2V */ rc = aat28xx_ldo_set_level(dev, LDO_CAM_DVDD_NO, 1200); if (rc < 0) { printk(KERN_ERR "%s: ldo %d set level error\n", __func__, LDO_CAM_DVDD_NO); goto power_on_fail; } rc = aat28xx_ldo_enable(dev, LDO_CAM_DVDD_NO, 1); if (rc < 0) { printk(KERN_ERR "%s: ldo %d control error\n", __func__, LDO_CAM_DVDD_NO); goto power_on_fail; } /*IOVDD power 2.6V*/ rc = aat28xx_ldo_set_level(dev, LDO_CAM_IOVDD_NO, 2600); if (rc < 0) { printk(KERN_ERR "%s: ldo %d set level error\n", __func__, LDO_CAM_IOVDD_NO); goto power_on_fail; } rc = aat28xx_ldo_enable(dev, LDO_CAM_IOVDD_NO, 1); if (rc < 0) { printk(KERN_ERR "%s: ldo %d control error\n", __func__, LDO_CAM_IOVDD_NO); goto power_on_fail; } rc = aat28xx_ldo_set_level(dev, LDO_CAM_AVDD_NO, 2800); if (rc < 0) { printk(KERN_ERR "%s: ldo %d set level error\n", __func__, LDO_CAM_AVDD_NO); goto power_on_fail; } rc = aat28xx_ldo_enable(dev, LDO_CAM_AVDD_NO, 1); if (rc < 0) { printk(KERN_ERR "%s: ldo %d control error\n", __func__, LDO_CAM_AVDD_NO); goto power_on_fail; } mdelay(5); /*M Clock -24Mhz*/ msm_camio_clk_rate_set(mclk_rate); mdelay(5); msm_camio_camif_pad_reg_reset(); mdelay(5); /*reset high*/ gpio_set_value(GPIO_CAM_RESET, 1); mdelay(5); /*Nstandby high*/ gpio_set_value(GPIO_CAM_PWDN, 1); mdelay(8); // T2 camera_power_state = CAM_POWER_ON; power_on_fail: camera_power_mutex_unlock(); return rc; }
int camera_power_on (void) { int rc; struct device *dev = su370_backlight_dev(); camera_power_mutex_lock(); if(lcd_bl_power_state == BL_POWER_SUSPEND) { u370_pwrsink_resume(); mdelay(50); } gpio_set_value(GPIO_CAM_RESET, 0); gpio_set_value(GPIO_CAM_PWDN, 0); { struct vreg *vreg_mmc = vreg_get(0, "mmc"); vreg_set_level(vreg_mmc, 2800); vreg_enable(vreg_mmc); } rc = aat28xx_ldo_set_level(dev, LDO_CAM_DVDD_NO, 1200); if (rc < 0) { printk(KERN_ERR "%s: ldo %d set level error\n", __func__, LDO_CAM_DVDD_NO); goto power_on_fail; } rc = aat28xx_ldo_enable(dev, LDO_CAM_DVDD_NO, 1); if (rc < 0) { printk(KERN_ERR "%s: ldo %d control error\n", __func__, LDO_CAM_DVDD_NO); goto power_on_fail; } rc = aat28xx_ldo_set_level(dev, LDO_CAM_IOVDD_NO, 2600); if (rc < 0) { printk(KERN_ERR "%s: ldo %d set level error\n", __func__, LDO_CAM_IOVDD_NO); goto power_on_fail; } rc = aat28xx_ldo_enable(dev, LDO_CAM_IOVDD_NO, 1); if (rc < 0) { printk(KERN_ERR "%s: ldo %d control error\n", __func__, LDO_CAM_IOVDD_NO); goto power_on_fail; } rc = aat28xx_ldo_set_level(dev, LDO_CAM_AVDD_NO, 2800); if (rc < 0) { printk(KERN_ERR "%s: ldo %d set level error\n", __func__, LDO_CAM_AVDD_NO); goto power_on_fail; } rc = aat28xx_ldo_enable(dev, LDO_CAM_AVDD_NO, 1); if (rc < 0) { printk(KERN_ERR "%s: ldo %d control error\n", __func__, LDO_CAM_AVDD_NO); goto power_on_fail; } mdelay(5); msm_camio_clk_rate_set(mclk_rate); mdelay(5); msm_camio_camif_pad_reg_reset(); mdelay(5); gpio_set_value(GPIO_CAM_RESET, 1); mdelay(5); gpio_set_value(GPIO_CAM_PWDN, 1); mdelay(8); camera_power_state = CAM_POWER_ON; power_on_fail: camera_power_mutex_unlock(); return rc; }