diff options
author | Alexandre Courbot <acourbot@nvidia.com> | 2012-01-23 12:02:16 +0900 |
---|---|---|
committer | Varun Colbert <vcolbert@nvidia.com> | 2012-01-30 12:02:43 -0800 |
commit | 15877d0f0f7c4059e020d80a413661b1771aaa5c (patch) | |
tree | e0abd273a166477f1773080d394d745b04e1ec68 /arch/arm/mach-tegra/board-enterprise-power.c | |
parent | 4080b1c6a61ccc5b8074ab22fff660faad93a904 (diff) |
enterprise: fix gpio regulators initialization
Move gpio regulators into their own table to avoid incorrect cast in
fixed regulator initialization function.
Reviewed-on: http://git-master/r/76761
Change-Id: If98790dc843d7e1d7201a62f4977e15ae18502ca
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Reviewed-on: http://git-master/r/77735
Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'arch/arm/mach-tegra/board-enterprise-power.c')
-rw-r--r-- | arch/arm/mach-tegra/board-enterprise-power.c | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/arch/arm/mach-tegra/board-enterprise-power.c b/arch/arm/mach-tegra/board-enterprise-power.c index fbdfa5b37961..be37f490393c 100644 --- a/arch/arm/mach-tegra/board-enterprise-power.c +++ b/arch/arm/mach-tegra/board-enterprise-power.c @@ -459,11 +459,14 @@ static struct platform_device *fixed_regs_devices[] = { ADD_FIXED_REG(cam_ldo_1v8_en), }; +#define ADD_GPIO_REG(_name) (&gpio_reg_##_name##_dev) +static struct platform_device *gpio_regs_devices[] = { + ADD_GPIO_REG(sdmmc3_vdd_sel), +}; + static int __init enterprise_fixed_regulator_init(void) { int i; - if (!is_enterprise_machine) - return 0; for (i = 0; i < ARRAY_SIZE(fixed_regs_devices); ++i) { struct fixed_voltage_config *fixed_reg_pdata = @@ -474,7 +477,38 @@ static int __init enterprise_fixed_regulator_init(void) return platform_add_devices(fixed_regs_devices, ARRAY_SIZE(fixed_regs_devices)); } -subsys_initcall_sync(enterprise_fixed_regulator_init); + +static int __init enterprise_gpio_regulator_init(void) +{ + int i, j; + + for (i = 0; i < ARRAY_SIZE(gpio_regs_devices); ++i) { + struct gpio_regulator_config *gpio_reg_pdata = + gpio_regs_devices[i]->dev.platform_data; + for (j = 0; j < gpio_reg_pdata->nr_gpios; ++j) { + if (gpio_reg_pdata->gpios[j].gpio < TEGRA_NR_GPIOS) + tegra_gpio_enable(gpio_reg_pdata->gpios[j].gpio); + } + } + return platform_add_devices(gpio_regs_devices, + ARRAY_SIZE(gpio_regs_devices)); +} + +static int __init enterprise_regulators_fixed_gpio_init(void) +{ + int ret; + + if (!is_enterprise_machine) + return 0; + + ret = enterprise_fixed_regulator_init(); + if (ret) + return ret; + + ret = enterprise_gpio_regulator_init(); + return ret; +} +subsys_initcall_sync(enterprise_regulators_fixed_gpio_init); static void enterprise_power_off(void) { |