static int pluto_imx091_power_on(struct nvc_regulator *vreg) { int err; if (unlikely(WARN_ON(!vreg))) return -EFAULT; if (pluto_get_extra_regulators()) goto imx091_poweron_fail; gpio_set_value(CAM1_POWER_DWN_GPIO, 0); usleep_range(10, 20); err = regulator_enable(vreg[IMX091_VREG_AVDD].vreg); if (unlikely(err)) goto imx091_avdd_fail; err = regulator_enable(vreg[IMX091_VREG_DVDD].vreg); if (unlikely(err)) goto imx091_dvdd_fail; err = regulator_enable(vreg[IMX091_VREG_IOVDD].vreg); if (unlikely(err)) goto imx091_iovdd_fail; usleep_range(1, 2); gpio_set_value(CAM1_POWER_DWN_GPIO, 1); tegra_pinmux_config_table(&mclk_enable, 1); err = regulator_enable(pluto_i2cvdd); if (unlikely(err)) goto imx091_i2c_fail; err = regulator_enable(pluto_vcmvdd); if (unlikely(err)) goto imx091_vcm_fail; usleep_range(300, 310); return 1; imx091_vcm_fail: regulator_disable(pluto_i2cvdd); imx091_i2c_fail: tegra_pinmux_config_table(&mclk_disable, 1); gpio_set_value(CAM1_POWER_DWN_GPIO, 0); regulator_disable(vreg[IMX091_VREG_IOVDD].vreg); imx091_iovdd_fail: regulator_disable(vreg[IMX091_VREG_DVDD].vreg); imx091_dvdd_fail: regulator_disable(vreg[IMX091_VREG_AVDD].vreg); imx091_avdd_fail: imx091_poweron_fail: pr_err("%s FAILED\n", __func__); return -ENODEV; }
static int pluto_imx132_power_on(struct imx132_power_rail *pw) { int err; if (unlikely(WARN_ON(!pw || !pw->avdd || !pw->iovdd || !pw->dvdd))) return -EFAULT; if (pluto_get_extra_regulators()) goto pluto_imx132_poweron_fail; gpio_set_value(CAM2_POWER_DWN_GPIO, 0); tegra_pinmux_config_table(&pbb0_enable, 1); err = regulator_enable(pluto_i2cvdd); if (unlikely(err)) goto imx132_i2c_fail; err = regulator_enable(pluto_vcmvdd); if (unlikely(err)) goto imx132_vcm_fail; err = regulator_enable(pw->avdd); if (unlikely(err)) goto imx132_avdd_fail; err = regulator_enable(pw->dvdd); if (unlikely(err)) goto imx132_dvdd_fail; err = regulator_enable(pw->iovdd); if (unlikely(err)) goto imx132_iovdd_fail; usleep_range(1, 2); gpio_set_value(CAM2_POWER_DWN_GPIO, 1); return 0; imx132_iovdd_fail: regulator_disable(pw->dvdd); imx132_dvdd_fail: regulator_disable(pw->avdd); imx132_avdd_fail: regulator_disable(pluto_vcmvdd); imx132_vcm_fail: regulator_disable(pluto_i2cvdd); imx132_i2c_fail: tegra_pinmux_config_table(&pbb0_disable, 1); pluto_imx132_poweron_fail: pr_err("%s failed.\n", __func__); return -ENODEV; }
static int pluto_imx135_power_on(struct imx135_power_rail *pw) { int err; if (unlikely(WARN_ON(!pw || !pw->dvdd || !pw->iovdd || !pw->avdd))) return -EFAULT; if (pluto_get_extra_regulators()) goto imx135_poweron_fail; gpio_set_value(CAM_RSTN, 0); gpio_set_value(CAM_AF_PWDN, 1); gpio_set_value(CAM1_POWER_DWN_GPIO, 0); usleep_range(10, 20); err = regulator_enable(pw->avdd); if (unlikely(err)) goto imx135_avdd_fail; err = regulator_enable(pw->dvdd); if (unlikely(err)) goto imx135_dvdd_fail; err = regulator_enable(pw->iovdd); if (unlikely(err)) goto imx135_iovdd_fail; udelay(2); gpio_set_value(CAM_RSTN, 1); gpio_set_value(CAM1_POWER_DWN_GPIO, 1); tegra_pinmux_config_table(&mclk_enable, 1); err = regulator_enable(pluto_i2cvdd); if (unlikely(err)) goto imx135_i2c_fail; err = regulator_enable(pluto_vcmvdd); if (unlikely(err)) goto imx135_vcm_fail; usleep_range(300, 310); return 0; imx135_vcm_fail: regulator_disable(pluto_i2cvdd); imx135_i2c_fail: tegra_pinmux_config_table(&mclk_disable, 1); gpio_set_value(CAM1_POWER_DWN_GPIO, 0); regulator_disable(pw->iovdd); imx135_iovdd_fail: regulator_disable(pw->dvdd); imx135_dvdd_fail: regulator_disable(pw->avdd); imx135_avdd_fail: imx135_poweron_fail: pr_err("%s FAILED\n", __func__); return -ENODEV; }