summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/board-enterprise-power.c
diff options
context:
space:
mode:
authorAlexandre Courbot <acourbot@nvidia.com>2012-01-23 12:02:16 +0900
committerVarun Colbert <vcolbert@nvidia.com>2012-01-30 12:02:43 -0800
commit15877d0f0f7c4059e020d80a413661b1771aaa5c (patch)
treee0abd273a166477f1773080d394d745b04e1ec68 /arch/arm/mach-tegra/board-enterprise-power.c
parent4080b1c6a61ccc5b8074ab22fff660faad93a904 (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.c40
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)
{