summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2010-05-05 09:35:15 +0530
committerGary King <gking@nvidia.com>2010-05-07 16:44:45 -0700
commit7213ef2f3c81e1f1d286e75ec63a1483b228e117 (patch)
tree802e5283185ac5a674ef337ec00229953d8917ae /arch
parentc7707ab96e0ed9f7b841635d739ac16633ffd1a7 (diff)
tegra gpio: Removing the redundant table for gpio-vddio rail.
The vddio rail information is part of the pingroup table and there is gpio nr-pingroup table. Using these tables to get the vddio power rail information for the given gpio nr. Tested on whistler e1109+nand. Change-Id: I9c91f8016b91fec8ccd5f0577ba95ac6cf65a267 Reviewed-on: http://git-master/r/1281 Reviewed-by: Gary King <gking@nvidia.com> Tested-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-by: Pavan Kunapuli <pkunapuli@nvidia.com> Tested-by: Pavan Kunapuli <pkunapuli@nvidia.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-tegra/gpio.c313
-rw-r--r--arch/arm/mach-tegra/pinmux.c7
2 files changed, 30 insertions, 290 deletions
diff --git a/arch/arm/mach-tegra/gpio.c b/arch/arm/mach-tegra/gpio.c
index 52e834e681af..daea121ba62d 100644
--- a/arch/arm/mach-tegra/gpio.c
+++ b/arch/arm/mach-tegra/gpio.c
@@ -43,6 +43,9 @@
#define GPIO_BIT(x) ((x) & 0x7)
extern int gpio_get_pinmux_group(int gpio_nr);
+extern int gpio_get_pinmux_group(int gpio_nr);
+extern int tegra_pinmux_get_vddio(tegra_pingroup_t pg);
+
extern unsigned long tegra_get_module_inst_base(const char *name, int inst);
static unsigned long add_gpio_base = 0;
#define GPIO_REG(x) ((add_gpio_base + GPIO_BANK(x)*0x80) + GPIO_PORT(x)*4)
@@ -504,295 +507,15 @@ struct gpio_power_rail_info {
static unsigned int is_gpio_rail_initailized = 0;
static struct gpio_power_rail_info gpio_power_rail_table[] = {
- {.power_rail_guid = NV_VDD_SYS_ODM_ID, .power_rail_address = 0},
- {.power_rail_guid = NV_VDD_BB_ODM_ID, .power_rail_address = 0},
- {.power_rail_guid = NV_VDD_VI_ODM_ID, .power_rail_address = 0},
- {.power_rail_guid = NV_VDD_SDIO_ODM_ID, .power_rail_address = 0},
- {.power_rail_guid = NV_VDD_LCD_ODM_ID, .power_rail_address = 0},
- {.power_rail_guid = NV_VDD_UART_ODM_ID, .power_rail_address = 0},
-};
-
-/* Initialize power rails for different gpios pins */
-static struct gpio_power_rail_info *gpio_power_rail_map[ARCH_NR_GPIOS] = {
- /* Port a */
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
-
- /* Port b */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
-
- /* Port c */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[5],
-
- /* Port d */
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
-
- /* Port e */
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
-
- /* Port f */
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
-
- /* Port g */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port h */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port i */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port j */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port k */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port l */
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
-
- /* Port m */
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
-
- /* Port n */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
-
- /* Port o */
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
-
- /* Port p */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port q */
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
-
- /* Port r */
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
-
- /* Port s */
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
- &gpio_power_rail_table[0],
-
- /* Port t */
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[2],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port u */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port v */
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[1],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[3],
- &gpio_power_rail_table[4],
-
- /* Port w */
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[4],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port x */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port y */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port z */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port AA */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
-
- /* Port BB */
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5],
- &gpio_power_rail_table[5]
+ [TEGRA_VDDIO_BB] = {.power_rail_guid = NV_VDD_BB_ODM_ID,},
+ [TEGRA_VDDIO_LCD] = {.power_rail_guid = NV_VDD_LCD_ODM_ID,},
+ [TEGRA_VDDIO_VI] = {.power_rail_guid = NV_VDD_VI_ODM_ID,},
+ [TEGRA_VDDIO_UART] = {.power_rail_guid = NV_VDD_UART_ODM_ID,},
+ [TEGRA_VDDIO_DDR] = {.power_rail_guid = NV_VDD_DDR_ODM_ID,},
+ [TEGRA_VDDIO_NAND] = {.power_rail_guid = NV_VDD_NAND_ODM_ID,},
+ [TEGRA_VDDIO_SYS] = {.power_rail_guid = NV_VDD_SYS_ODM_ID,},
+ [TEGRA_VDDIO_AUDIO] = {.power_rail_guid = NV_VDD_AUD_ODM_ID,},
+ [TEGRA_VDDIO_SD] = {.power_rail_guid = NV_VDD_SDIO_ODM_ID,},
};
static void discover_gpio_io_power_rail(void)
@@ -809,18 +532,28 @@ static void discover_gpio_io_power_rail(void)
connectivity->AddressList[0].Address;
}
}
+
int tegra_gpio_io_power_config(int gpio_nr, unsigned int enable)
{
NvRmPmuVddRailCapabilities rail_caps;
NvU32 settling_time;
struct gpio_power_rail_info *gpio_io_power;
+ tegra_pingroup_t pg;
+ int vddio_id;
if (!is_gpio_rail_initailized) {
discover_gpio_io_power_rail();
is_gpio_rail_initailized = 1;
}
- gpio_io_power = gpio_power_rail_map[gpio_nr];
+ pg = gpio_get_pinmux_group(gpio_nr);
+ if (pg < 0)
+ return -1;
+ vddio_id = tegra_pinmux_get_vddio(pg);
+ if(vddio_id < 0)
+ return -1;
+
+ gpio_io_power = &gpio_power_rail_table[vddio_id];
/* Nothing to be done if there is no pmu rail
* associated with this port */
diff --git a/arch/arm/mach-tegra/pinmux.c b/arch/arm/mach-tegra/pinmux.c
index 4767f1e97c77..90d4efc6d5aa 100644
--- a/arch/arm/mach-tegra/pinmux.c
+++ b/arch/arm/mach-tegra/pinmux.c
@@ -423,6 +423,13 @@ int tegra_pinmux_set_func(tegra_pingroup_t pg, tegra_mux_func_t func)
return 0;
}
+int tegra_pinmux_get_vddio(tegra_pingroup_t pg)
+{
+ if (pg < 0 || pg >= TEGRA_MAX_PINGROUP)
+ return -1;
+ return pingroups[pg].vddio;
+}
+
int tegra_pinmux_get_tristate(tegra_pingroup_t pg)
{
unsigned long reg;