ARM: tegra: gpio: Set a gpio to tristate or normal
Chaitanya Bandi [Mon, 19 Sep 2011 11:15:28 +0000 (16:15 +0530)]
Create mapping from gpio to pingroup and set gpio to
normal or tristate

Bug 866633

Reviewed-on: http://git-master/r/56557
(cherry picked from commit 321ded98d41170b9e32d60177c6808492ccdf115)

Change-Id: I3d1b979717f1c6b208af3df0a7dfe603e5272d21
Reviewed-on: http://git-master/r/61120
Tested-by: Bandi Krishna Chaitanya <bandik@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>

Rebase-Id: R5991c2cbc11aa35345fde7f08c0bfeb306e85e1e

arch/arm/mach-tegra/gpio-names.h
arch/arm/mach-tegra/include/mach/gpio-tegra.h
arch/arm/mach-tegra/include/mach/pinmux.h
arch/arm/mach-tegra/pinmux-tegra20-tables.c
arch/arm/mach-tegra/pinmux-tegra30-tables.c
arch/arm/mach-tegra/pinmux.c
drivers/gpio/gpio-tegra.c

index 7ffd3a1..cb3c5ce 100644 (file)
 #define TEGRA_GPIO_PEE1                241
 #define TEGRA_GPIO_PEE2                242
 #define TEGRA_GPIO_PEE3                243
+#define TEGRA_GPIO_INVALID             244
+#define TEGRA_MAX_GPIO         245
 #endif
index cccdcc1..e51e1d7 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <linux/types.h>
 #include <mach/irqs.h>
+#include <mach/pinmux.h>
 
 #define TEGRA_NR_GPIOS         INT_GPIO_NR
 
@@ -44,5 +45,6 @@ void tegra_gpio_config(struct tegra_gpio_table *table, int num);
 void tegra_gpio_enable(int gpio);
 void tegra_gpio_disable(int gpio);
 void tegra_gpio_init_configure(unsigned gpio, bool is_input, int value);
+void tegra_gpio_set_tristate(int gpio, enum tegra_tristate ts);
 
 #endif
index beb4c72..fc7be01 100644 (file)
@@ -309,29 +309,33 @@ struct tegra_pingroup_desc {
        s16 tri_bank;   /* Register bank the tri_reg exists within */
        s16 mux_bank;   /* Register bank the mux_reg exists within */
        s16 pupd_bank;  /* Register bank the pupd_reg exists within */
-       s16 tri_reg;    /* offset into the TRISTATE_REG_* register bank */
+       s16 tri_reg;    /* offset into the TRISTATE_REG_* register bank */
        s16 mux_reg;    /* offset into the PIN_MUX_CTL_* register bank */
        s16 pupd_reg;   /* offset into the PULL_UPDOWN_REG_* register bank */
-       s8 tri_bit;     /* offset into the TRISTATE_REG_* register bit */
+       s8 tri_bit;     /* offset into the TRISTATE_REG_* register bit */
        s8 mux_bit;     /* offset into the PIN_MUX_CTL_* register bit */
        s8 pupd_bit;    /* offset into the PULL_UPDOWN_REG_* register bit */
        s8 lock_bit;    /* offset of the LOCK bit into mux register bit */
        s8 od_bit;      /* offset of the OD bit into mux register bit */
        s8 ioreset_bit; /* offset of the IO_RESET bit into mux register bit */
+       int gpionr;
 };
 
 typedef void (*pinmux_init) (const struct tegra_pingroup_desc **pg,
        int *pg_max, const struct tegra_drive_pingroup_desc **pgdrive,
-       int *pgdrive_max);
+       int *pgdrive_max, const int **gpiomap, int *gpiomap_max);
 
 void tegra20_pinmux_init(const struct tegra_pingroup_desc **pg, int *pg_max,
-       const struct tegra_drive_pingroup_desc **pgdrive, int *pgdrive_max);
+       const struct tegra_drive_pingroup_desc **pgdrive, int *pgdrive_max,
+       const int **gpiomap, int *gpiomap_max);
 
 void tegra30_pinmux_init(const struct tegra_pingroup_desc **pg, int *pg_max,
-       const struct tegra_drive_pingroup_desc **pgdrive, int *pgdrive_max);
+       const struct tegra_drive_pingroup_desc **pgdrive, int *pgdrive_max,
+       const int **gpiomap, int *gpiomap_max);
 
 int tegra_pinmux_get_func(int tegra_pingroup pg);
 int tegra_pinmux_set_tristate(int pg, enum tegra_tristate tristate);
+int tegra_pinmux_get_pingroup(int gpio_nr);
 int tegra_pinmux_set_pullupdown(int pg, enum tegra_pullupdown pupd);
 
 void tegra_pinmux_config_table(const struct tegra_pingroup_config *config,
index c2aed5a..3111c05 100644 (file)
@@ -31,6 +31,8 @@
 #include <mach/pinmux.h>
 #include <mach/pinmux-tegra20.h>
 
+#include "gpio-names.h"
+
 #define TRISTATE_REG_A         0x14
 #define PIN_MUX_CTL_REG_A      0x80
 #define PULLUPDOWN_REG_A       0xa0
@@ -99,7 +101,7 @@ const struct tegra_drive_pingroup_desc tegra_soc_drive_pingroups[TEGRA_MAX_DRIVE
        DEFAULT_DRIVE_PINGROUP(UAD,             0x90c),
 };
 
-#define PINGROUP(pg_name, vdd, f0, f1, f2, f3, f_safe,         \
+#define PINGROUP(pg_name, gpio_nr, vdd, f0, f1, f2, f3, f_safe,                \
                 tri_r, tri_b, mux_r, mux_b, pupd_r, pupd_b)    \
        [TEGRA_PINGROUP_ ## pg_name] = {                        \
                .name = #pg_name,                               \
@@ -109,7 +111,8 @@ const struct tegra_drive_pingroup_desc tegra_soc_drive_pingroups[TEGRA_MAX_DRIVE
                        TEGRA_MUX_ ## f1,                       \
                        TEGRA_MUX_ ## f2,                       \
                        TEGRA_MUX_ ## f3,                       \
-               },                                              \
+               },                                                              \
+               .gpionr =       TEGRA_GPIO_ ## gpio_nr,         \
                .func_safe = TEGRA_MUX_ ## f_safe,              \
                .tri_bank = 0,                                  \
                .tri_reg = ((tri_r) - TRISTATE_REG_A),          \
@@ -126,133 +129,148 @@ const struct tegra_drive_pingroup_desc tegra_soc_drive_pingroups[TEGRA_MAX_DRIVE
                .io_default = -1,                               \
        }
 
+#define PINGROUPS      \
+       PINGROUP(ATA,   PI3,   NAND,  IDE,       NAND,      GMI,       RSVD,          IDE,       0x14, 0,  0x80, 24, 0xA0, 0),\
+       PINGROUP(ATB,   PI2,   NAND,  IDE,       NAND,      GMI,       SDIO4,         IDE,       0x14, 1,  0x80, 16, 0xA0, 2),\
+       PINGROUP(ATC,   PI5,   NAND,  IDE,       NAND,      GMI,       SDIO4,         IDE,       0x14, 2,  0x80, 22, 0xA0, 4),\
+       PINGROUP(ATD,   PH0,   NAND,  IDE,       NAND,      GMI,       SDIO4,         IDE,       0x14, 3,  0x80, 20, 0xA0, 6),\
+       PINGROUP(ATE,   PH4,   NAND,  IDE,       NAND,      GMI,       RSVD,          IDE,       0x18, 25, 0x80, 12, 0xA0, 8),\
+       PINGROUP(CDEV1, PW4, AUDIO, OSC,       PLLA_OUT,  PLLM_OUT1, AUDIO_SYNC,    OSC,       0x14, 4,  0x88, 2,  0xA8, 0),\
+       PINGROUP(CDEV2, PW5, AUDIO, OSC,       AHB_CLK,   APB_CLK,   PLLP_OUT4,     OSC,       0x14, 5,  0x88, 4,  0xA8, 2),\
+       PINGROUP(CRTP,  INVALID,        LCD,    CRT,    RSVD,   RSVD,   RSVD,   RSVD,   0x20,   14, 0x98, 20, 0xA4, 24),\
+       PINGROUP(CSUS,  PT1,  VI,    PLLC_OUT1, PLLP_OUT2, PLLP_OUT3, VI_SENSOR_CLK, PLLC_OUT1, 0x14, 6,  0x88, 6,  0xAC, 24),\
+       PINGROUP(DAP1,  PN0,  AUDIO, DAP1,      RSVD,      GMI,       SDIO2,         DAP1,      0x14, 7,  0x88, 20, 0xA0, 10),\
+       PINGROUP(DAP2,  PA2,  AUDIO, DAP2,      TWC,       RSVD,      GMI,           DAP2,      0x14, 8,  0x88, 22, 0xA0, 12),\
+       PINGROUP(DAP3,  PP0,  BB,    DAP3,      RSVD,      RSVD,      RSVD,          DAP3,      0x14, 9,  0x88, 24, 0xA0, 14),\
+       PINGROUP(DAP4,  PP4,  UART,  DAP4,      RSVD,      GMI,       RSVD,          DAP4,      0x14, 10, 0x88, 26, 0xA0, 16),\
+       PINGROUP(DDC,   INVALID,        LCD,    I2C2,   RSVD,   RSVD,   RSVD,           RSVD4,    0x18, 31, 0x88, 0,  0xB0, 28),\
+       PINGROUP(DTA,   PT4,   VI,    RSVD,      SDIO2,     VI,        RSVD,          RSVD4,     0x14, 11, 0x84, 20, 0xA0, 18),\
+       PINGROUP(DTB,   PT2,   VI,    RSVD,      RSVD,      VI,        SPI1,          RSVD1,     0x14, 12, 0x84, 22, 0xA0, 20),\
+       PINGROUP(DTC,   PD6,   VI,    RSVD,      RSVD,      VI,        RSVD,          RSVD1,     0x14, 13, 0x84, 26, 0xA0, 22),\
+       PINGROUP(DTD,   PT0,   VI,    RSVD,      SDIO2,     VI,        RSVD,          RSVD1,     0x14, 14, 0x84, 28, 0xA0, 24),\
+       PINGROUP(DTE,   PBB1,   VI,    RSVD,      RSVD,      VI,        SPI1,          RSVD1,     0x14, 15, 0x84, 30, 0xA0, 26),\
+       PINGROUP(DTF,   PBB2,   VI,    I2C3,      RSVD,      VI,        RSVD,          RSVD4,     0x20, 12, 0x98, 30, 0xA0, 28),\
+       PINGROUP(GMA,   PAA0,   NAND,  UARTE,     SPI3,      GMI,       SDIO4,         SPI3,      0x14, 28, 0x84, 0,  0xB0, 20),\
+       PINGROUP(GMB,   PC7,   NAND,  IDE,       NAND,      GMI,       GMI_INT,       GMI,       0x18, 29, 0x88, 28, 0xB0, 22),\
+       PINGROUP(GMC,   PJ7,   NAND,  UARTD,     SPI4,      GMI,       SFLASH,        SPI4,      0x14, 29, 0x84, 2,  0xB0, 24),\
+       PINGROUP(GMD,   PJ0,   NAND,  RSVD,      NAND,      GMI,       SFLASH,        GMI,       0x18, 30, 0x88, 30, 0xB0, 26),\
+       PINGROUP(GME,   PAA4,   NAND,  RSVD,      DAP5,      GMI,       SDIO4,         GMI,       0x18, 0,  0x8C, 0,  0xA8, 24),\
+       PINGROUP(GPU,   PU0,   UART,  PWM,       UARTA,     GMI,       RSVD,          RSVD4,     0x14, 16, 0x8C, 4,  0xA4, 20),\
+       PINGROUP(GPU7,  PU7,  SYS,   RTCK,      RSVD,      RSVD,      RSVD,          RTCK,      0x20, 11, 0x98, 28, 0xA4, 6),\
+       PINGROUP(GPV,   PV4,   SD,    PCIE,      RSVD,      RSVD,      RSVD,          PCIE,      0x14, 17, 0x8C, 2,  0xA0, 30),\
+       PINGROUP(HDINT, PN7, LCD,   HDMI,      RSVD,      RSVD,      RSVD,          HDMI,      0x1C, 23, 0x84, 4,  0xAC, 22),\
+       PINGROUP(I2CP,  PZ6,  SYS,   I2C,       RSVD,      RSVD,      RSVD,          RSVD4,     0x14, 18, 0x88, 8,  0xA4, 2),\
+       PINGROUP(IRRX,  PJ6,  UART,  UARTA,     UARTB,     GMI,       SPI4,          UARTB,     0x14, 20, 0x88, 18, 0xA8, 22),\
+       PINGROUP(IRTX,  PJ5,  UART,  UARTA,     UARTB,     GMI,       SPI4,          UARTB,     0x14, 19, 0x88, 16, 0xA8, 20),\
+       PINGROUP(KBCA,  PR0,  SYS,   KBC,       NAND,      SDIO2,     EMC_TEST0_DLL, KBC,       0x14, 22, 0x88, 10, 0xA4, 8),\
+       PINGROUP(KBCB,  PR7,  SYS,   KBC,       NAND,      SDIO2,     MIO,           KBC,       0x14, 21, 0x88, 12, 0xA4, 10),\
+       PINGROUP(KBCC,  PQ0,  SYS,   KBC,       NAND,      TRACE,     EMC_TEST1_DLL, KBC,       0x18, 26, 0x88, 14, 0xA4, 12),\
+       PINGROUP(KBCD,  PR3,  SYS,   KBC,       NAND,      SDIO2,     MIO,           KBC,       0x20, 10, 0x98, 26, 0xA4, 14),\
+       PINGROUP(KBCE,  PQ7,  SYS,   KBC,       NAND,      OWR,       RSVD,          KBC,       0x14, 26, 0x80, 28, 0xB0, 2),\
+       PINGROUP(KBCF,  PQ2,  SYS,   KBC,       NAND,      TRACE,     MIO,           KBC,       0x14, 27, 0x80, 26, 0xB0, 0),\
+       PINGROUP(LCSN,  PN4,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      RSVD,          RSVD4,     0x1C, 31, 0x90, 12, 0xAC, 20),\
+       PINGROUP(LD0,   PE0,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 0,  0x94, 0,  0xAC, 12),\
+       PINGROUP(LD1,   PE1,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 1,  0x94, 2,  0xAC, 12),\
+       PINGROUP(LD10,  PF2,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 10, 0x94, 20, 0xAC, 12),\
+       PINGROUP(LD11,  PF3,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 11, 0x94, 22, 0xAC, 12),\
+       PINGROUP(LD12,  PF4,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 12, 0x94, 24, 0xAC, 12),\
+       PINGROUP(LD13,  PF5,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 13, 0x94, 26, 0xAC, 12),\
+       PINGROUP(LD14,  PF6,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 14, 0x94, 28, 0xAC, 12),\
+       PINGROUP(LD15,  PF7,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 15, 0x94, 30, 0xAC, 12),\
+       PINGROUP(LD16,  PM0,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 16, 0x98, 0,  0xAC, 12),\
+       PINGROUP(LD17,  PM1,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 17, 0x98, 2,  0xAC, 12),\
+       PINGROUP(LD2,   PE2,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 2,  0x94, 4,  0xAC, 12),\
+       PINGROUP(LD3,   PE3,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 3,  0x94, 6,  0xAC, 12),\
+       PINGROUP(LD4,   PE4,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 4,  0x94, 8,  0xAC, 12),\
+       PINGROUP(LD5,   PE5,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 5,  0x94, 10, 0xAC, 12),\
+       PINGROUP(LD6,   PE6,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 6,  0x94, 12, 0xAC, 12),\
+       PINGROUP(LD7,   PE7,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 7,  0x94, 14, 0xAC, 12),\
+       PINGROUP(LD8,   PF0,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 8,  0x94, 16, 0xAC, 12),\
+       PINGROUP(LD9,   PF1,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 9,  0x94, 18, 0xAC, 12),\
+       PINGROUP(LDC,   PN6,   LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 30, 0x90, 14, 0xAC, 20),\
+       PINGROUP(LDI,   PM6,   LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x20, 6,  0x98, 16, 0xAC, 18),\
+       PINGROUP(LHP0,  PM5,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 18, 0x98, 10, 0xAC, 16),\
+       PINGROUP(LHP1,  PM2,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 19, 0x98, 4,  0xAC, 14),\
+       PINGROUP(LHP2,  PM3,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 20, 0x98, 6,  0xAC, 14),\
+       PINGROUP(LHS,   PJ3,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x20, 7,  0x90, 22, 0xAC, 22),\
+       PINGROUP(LM0,   PW0,   LCD,   DISPLAYA,  DISPLAYB,  SPI3,      RSVD,          RSVD4,     0x1C, 24, 0x90, 26, 0xAC, 22),\
+       PINGROUP(LM1,   PW1,   LCD,   DISPLAYA,  DISPLAYB,  RSVD,      CRT,           RSVD3,     0x1C, 25, 0x90, 28, 0xAC, 22),\
+       PINGROUP(LPP,   PM7,   LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x20, 8,  0x98, 14, 0xAC, 18),\
+       PINGROUP(LPW0,  PB2,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x20, 3,  0x90, 0,  0xAC, 20),\
+       PINGROUP(LPW1,  PC1,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x20, 4,  0x90, 2,  0xAC, 20),\
+       PINGROUP(LPW2,  PC6,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x20, 5,  0x90, 4,  0xAC, 20),\
+       PINGROUP(LSC0,  PB3,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 27, 0x90, 18, 0xAC, 22),\
+       PINGROUP(LSC1,  PZ3,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x1C, 28, 0x90, 20, 0xAC, 20),\
+       PINGROUP(LSCK,  PZ4,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x1C, 29, 0x90, 16, 0xAC, 20),\
+       PINGROUP(LSDA,  PN5,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x20, 1,  0x90, 8,  0xAC, 20),\
+       PINGROUP(LSDI,  PZ2,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      RSVD,          DISPLAYA,  0x20, 2,  0x90, 6,  0xAC, 20),\
+       PINGROUP(LSPI,  PJ1,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       HDMI,          DISPLAYA,  0x20, 0,  0x90, 10, 0xAC, 22),\
+       PINGROUP(LVP0,  PV7,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 21, 0x90, 30, 0xAC, 22),\
+       PINGROUP(LVP1,  PM4,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 22, 0x98, 8,  0xAC, 16),\
+       PINGROUP(LVS,   PJ4,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,            RSVD4,  0x1C, 26, 0x90, 24, 0xAC, 22),\
+       PINGROUP(OWC,   INVALID,        SYS,    OWR,    RSVD,   RSVD,   RSVD,           OWR,    0x14, 31, 0x84, 8,  0xB0, 30),\
+       PINGROUP(PMC,   PBB0,   SYS,   PWR_ON,    PWR_INTR,  RSVD,      RSVD,          PWR_ON,    0x14, 23, 0x98, 18, -1,   -1),\
+       PINGROUP(PTA,   PT5,   NAND,  I2C2,      HDMI,      GMI,       RSVD,          RSVD4,     0x14, 24, 0x98, 22, 0xA4, 4),\
+       PINGROUP(RM,    PC5,    UART,  I2C,       RSVD,      RSVD,      RSVD,          RSVD4,     0x14, 25, 0x80, 14, 0xA4, 0),\
+       PINGROUP(SDB,   PA7,   SD,    UARTA,     PWM,       SDIO3,     SPI2,          PWM,       0x20, 15, 0x8C, 10, -1,   -1),\
+       PINGROUP(SDC,   PB7,   SD,    PWM,       TWC,       SDIO3,     SPI3,          TWC,       0x18, 1,  0x8C, 12, 0xAC, 28),\
+       PINGROUP(SDD,   PA6,   SD,    UARTA,     PWM,       SDIO3,     SPI3,          PWM,       0x18, 2,  0x8C, 14, 0xAC, 30),\
+       PINGROUP(SDIO1, PZ0, BB,    SDIO1,     RSVD,      UARTE,     UARTA,         RSVD2,     0x14, 30, 0x80, 30, 0xB0, 18),\
+       PINGROUP(SLXA,  PD1,  SD,    PCIE,      SPI4,      SDIO3,     SPI2,          PCIE,      0x18, 3,  0x84, 6,  0xA4, 22),\
+       PINGROUP(SLXC,  PD3,  SD,    SPDIF,     SPI4,      SDIO3,     SPI2,          SPI4,      0x18, 5,  0x84, 10, 0xA4, 26),\
+       PINGROUP(SLXD,  PD4,  SD,    SPDIF,     SPI4,      SDIO3,     SPI2,          SPI4,      0x18, 6,  0x84, 12, 0xA4, 28),\
+       PINGROUP(SLXK,  PD0,  SD,    PCIE,      SPI4,      SDIO3,     SPI2,          PCIE,      0x18, 7,  0x84, 14, 0xA4, 30),\
+       PINGROUP(SPDI,  PK6,  AUDIO, SPDIF,     RSVD,      I2C,       SDIO2,         RSVD2,     0x18, 8,  0x8C, 8,  0xA4, 16),\
+       PINGROUP(SPDO,  PK5,  AUDIO, SPDIF,     RSVD,      I2C,       SDIO2,         RSVD2,     0x18, 9,  0x8C, 6,  0xA4, 18),\
+       PINGROUP(SPIA,  PX0,  AUDIO, SPI1,      SPI2,      SPI3,      GMI,           GMI,       0x18, 10, 0x8C, 30, 0xA8, 4),\
+       PINGROUP(SPIB,  PX1,  AUDIO, SPI1,      SPI2,      SPI3,      GMI,           GMI,       0x18, 11, 0x8C, 28, 0xA8, 6),\
+       PINGROUP(SPIC,  PX2,  AUDIO, SPI1,      SPI2,      SPI3,      GMI,           GMI,       0x18, 12, 0x8C, 26, 0xA8, 8),\
+       PINGROUP(SPID,  PX4,  AUDIO, SPI2,      SPI1,      SPI2_ALT,  GMI,           GMI,       0x18, 13, 0x8C, 24, 0xA8, 10),\
+       PINGROUP(SPIE,  PX5,  AUDIO, SPI2,      SPI1,      SPI2_ALT,  GMI,           GMI,       0x18, 14, 0x8C, 22, 0xA8, 12),\
+       PINGROUP(SPIF,  PX7,  AUDIO, SPI3,      SPI1,      SPI2,      RSVD,          RSVD4,     0x18, 15, 0x8C, 20, 0xA8, 14),\
+       PINGROUP(SPIG,  PW2,  AUDIO, SPI3,      SPI2,      SPI2_ALT,  I2C,           SPI2_ALT,  0x18, 16, 0x8C, 18, 0xA8, 16),\
+       PINGROUP(SPIH,  PW3,  AUDIO, SPI3,      SPI2,      SPI2_ALT,  I2C,           SPI2_ALT,  0x18, 17, 0x8C, 16, 0xA8, 18),\
+       PINGROUP(UAA,   PO1,   BB,    SPI3,      MIPI_HS,   UARTA,     ULPI,          MIPI_HS,   0x18, 18, 0x80, 0,  0xAC, 0),\
+       PINGROUP(UAB,   PO5,   BB,    SPI2,      MIPI_HS,   UARTA,     ULPI,          MIPI_HS,   0x18, 19, 0x80, 2,  0xAC, 2),\
+       PINGROUP(UAC,   PV0,   BB,    OWR,       RSVD,      RSVD,      RSVD,          RSVD4,     0x18, 20, 0x80, 4,  0xAC, 4),\
+       PINGROUP(UAD,   PC2,   UART,  IRDA,      SPDIF,     UARTA,     SPI4,          SPDIF,     0x18, 21, 0x80, 6,  0xAC, 6),\
+       PINGROUP(UCA,   PW6,   UART,  UARTC,     RSVD,      GMI,       RSVD,          RSVD4,     0x18, 22, 0x84, 16, 0xAC, 8),\
+       PINGROUP(UCB,   PC0,   UART,  UARTC,     PWM,       GMI,       RSVD,          RSVD4,     0x18, 23, 0x84, 18, 0xAC, 10),\
+       PINGROUP(UDA,   PY0,   BB,    SPI1,      RSVD,      UARTD,     ULPI,          RSVD2,     0x20, 13, 0x80, 8,  0xB0, 16),\
+       /* these pin groups only have pullup and pull down control */\
+       PINGROUP(CK32,  INVALID,        SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 14),\
+       PINGROUP(DDRC,  INVALID,         DDR,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xAC, 26),\
+       PINGROUP(PMCA,  INVALID,        SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 4),\
+       PINGROUP(PMCB,  INVALID,        SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 6),\
+       PINGROUP(PMCC,  INVALID,        SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 8),\
+       PINGROUP(PMCD,  INVALID,        SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 10),\
+       PINGROUP(PMCE,  INVALID,        SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 12),\
+       PINGROUP(XM2C,  INVALID,        DDR,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xA8, 30),\
+       PINGROUP(XM2D,  INVALID,        DDR,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xA8, 28),\
+
 static const struct tegra_pingroup_desc tegra_soc_pingroups[TEGRA_MAX_PINGROUP] = {
-       PINGROUP(ATA,   NAND,  IDE,       NAND,      GMI,       RSVD,          IDE,       0x14, 0,  0x80, 24, 0xA0, 0),
-       PINGROUP(ATB,   NAND,  IDE,       NAND,      GMI,       SDIO4,         IDE,       0x14, 1,  0x80, 16, 0xA0, 2),
-       PINGROUP(ATC,   NAND,  IDE,       NAND,      GMI,       SDIO4,         IDE,       0x14, 2,  0x80, 22, 0xA0, 4),
-       PINGROUP(ATD,   NAND,  IDE,       NAND,      GMI,       SDIO4,         IDE,       0x14, 3,  0x80, 20, 0xA0, 6),
-       PINGROUP(ATE,   NAND,  IDE,       NAND,      GMI,       RSVD,          IDE,       0x18, 25, 0x80, 12, 0xA0, 8),
-       PINGROUP(CDEV1, AUDIO, OSC,       PLLA_OUT,  PLLM_OUT1, AUDIO_SYNC,    OSC,       0x14, 4,  0x88, 2,  0xA8, 0),
-       PINGROUP(CDEV2, AUDIO, OSC,       AHB_CLK,   APB_CLK,   PLLP_OUT4,     OSC,       0x14, 5,  0x88, 4,  0xA8, 2),
-       PINGROUP(CRTP,  LCD,   CRT,       RSVD,      RSVD,      RSVD,          RSVD,      0x20, 14, 0x98, 20, 0xA4, 24),
-       PINGROUP(CSUS,  VI,    PLLC_OUT1, PLLP_OUT2, PLLP_OUT3, VI_SENSOR_CLK, PLLC_OUT1, 0x14, 6,  0x88, 6,  0xAC, 24),
-       PINGROUP(DAP1,  AUDIO, DAP1,      RSVD,      GMI,       SDIO2,         DAP1,      0x14, 7,  0x88, 20, 0xA0, 10),
-       PINGROUP(DAP2,  AUDIO, DAP2,      TWC,       RSVD,      GMI,           DAP2,      0x14, 8,  0x88, 22, 0xA0, 12),
-       PINGROUP(DAP3,  BB,    DAP3,      RSVD,      RSVD,      RSVD,          DAP3,      0x14, 9,  0x88, 24, 0xA0, 14),
-       PINGROUP(DAP4,  UART,  DAP4,      RSVD,      GMI,       RSVD,          DAP4,      0x14, 10, 0x88, 26, 0xA0, 16),
-       PINGROUP(DDC,   LCD,   I2C2,      RSVD,      RSVD,      RSVD,          RSVD,      0x18, 31, 0x88, 0,  0xB0, 28),
-       PINGROUP(DTA,   VI,    RSVD,      SDIO2,     VI,        RSVD,          RSVD4,     0x14, 11, 0x84, 20, 0xA0, 18),
-       PINGROUP(DTB,   VI,    RSVD,      RSVD,      VI,        SPI1,          RSVD1,     0x14, 12, 0x84, 22, 0xA0, 20),
-       PINGROUP(DTC,   VI,    RSVD,      RSVD,      VI,        RSVD,          RSVD1,     0x14, 13, 0x84, 26, 0xA0, 22),
-       PINGROUP(DTD,   VI,    RSVD,      SDIO2,     VI,        RSVD,          RSVD1,     0x14, 14, 0x84, 28, 0xA0, 24),
-       PINGROUP(DTE,   VI,    RSVD,      RSVD,      VI,        SPI1,          RSVD1,     0x14, 15, 0x84, 30, 0xA0, 26),
-       PINGROUP(DTF,   VI,    I2C3,      RSVD,      VI,        RSVD,          RSVD4,     0x20, 12, 0x98, 30, 0xA0, 28),
-       PINGROUP(GMA,   NAND,  UARTE,     SPI3,      GMI,       SDIO4,         SPI3,      0x14, 28, 0x84, 0,  0xB0, 20),
-       PINGROUP(GMB,   NAND,  IDE,       NAND,      GMI,       GMI_INT,       GMI,       0x18, 29, 0x88, 28, 0xB0, 22),
-       PINGROUP(GMC,   NAND,  UARTD,     SPI4,      GMI,       SFLASH,        SPI4,      0x14, 29, 0x84, 2,  0xB0, 24),
-       PINGROUP(GMD,   NAND,  RSVD,      NAND,      GMI,       SFLASH,        GMI,       0x18, 30, 0x88, 30, 0xB0, 26),
-       PINGROUP(GME,   NAND,  RSVD,      DAP5,      GMI,       SDIO4,         GMI,       0x18, 0,  0x8C, 0,  0xA8, 24),
-       PINGROUP(GPU,   UART,  PWM,       UARTA,     GMI,       RSVD,          RSVD4,     0x14, 16, 0x8C, 4,  0xA4, 20),
-       PINGROUP(GPU7,  SYS,   RTCK,      RSVD,      RSVD,      RSVD,          RTCK,      0x20, 11, 0x98, 28, 0xA4, 6),
-       PINGROUP(GPV,   SD,    PCIE,      RSVD,      RSVD,      RSVD,          PCIE,      0x14, 17, 0x8C, 2,  0xA0, 30),
-       PINGROUP(HDINT, LCD,   HDMI,      RSVD,      RSVD,      RSVD,          HDMI,      0x1C, 23, 0x84, 4,  0xAC, 22),
-       PINGROUP(I2CP,  SYS,   I2C,       RSVD,      RSVD,      RSVD,          RSVD4,     0x14, 18, 0x88, 8,  0xA4, 2),
-       PINGROUP(IRRX,  UART,  UARTA,     UARTB,     GMI,       SPI4,          UARTB,     0x14, 20, 0x88, 18, 0xA8, 22),
-       PINGROUP(IRTX,  UART,  UARTA,     UARTB,     GMI,       SPI4,          UARTB,     0x14, 19, 0x88, 16, 0xA8, 20),
-       PINGROUP(KBCA,  SYS,   KBC,       NAND,      SDIO2,     EMC_TEST0_DLL, KBC,       0x14, 22, 0x88, 10, 0xA4, 8),
-       PINGROUP(KBCB,  SYS,   KBC,       NAND,      SDIO2,     MIO,           KBC,       0x14, 21, 0x88, 12, 0xA4, 10),
-       PINGROUP(KBCC,  SYS,   KBC,       NAND,      TRACE,     EMC_TEST1_DLL, KBC,       0x18, 26, 0x88, 14, 0xA4, 12),
-       PINGROUP(KBCD,  SYS,   KBC,       NAND,      SDIO2,     MIO,           KBC,       0x20, 10, 0x98, 26, 0xA4, 14),
-       PINGROUP(KBCE,  SYS,   KBC,       NAND,      OWR,       RSVD,          KBC,       0x14, 26, 0x80, 28, 0xB0, 2),
-       PINGROUP(KBCF,  SYS,   KBC,       NAND,      TRACE,     MIO,           KBC,       0x14, 27, 0x80, 26, 0xB0, 0),
-       PINGROUP(LCSN,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      RSVD,          RSVD4,     0x1C, 31, 0x90, 12, 0xAC, 20),
-       PINGROUP(LD0,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 0,  0x94, 0,  0xAC, 12),
-       PINGROUP(LD1,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 1,  0x94, 2,  0xAC, 12),
-       PINGROUP(LD10,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 10, 0x94, 20, 0xAC, 12),
-       PINGROUP(LD11,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 11, 0x94, 22, 0xAC, 12),
-       PINGROUP(LD12,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 12, 0x94, 24, 0xAC, 12),
-       PINGROUP(LD13,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 13, 0x94, 26, 0xAC, 12),
-       PINGROUP(LD14,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 14, 0x94, 28, 0xAC, 12),
-       PINGROUP(LD15,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 15, 0x94, 30, 0xAC, 12),
-       PINGROUP(LD16,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 16, 0x98, 0,  0xAC, 12),
-       PINGROUP(LD17,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 17, 0x98, 2,  0xAC, 12),
-       PINGROUP(LD2,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 2,  0x94, 4,  0xAC, 12),
-       PINGROUP(LD3,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 3,  0x94, 6,  0xAC, 12),
-       PINGROUP(LD4,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 4,  0x94, 8,  0xAC, 12),
-       PINGROUP(LD5,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 5,  0x94, 10, 0xAC, 12),
-       PINGROUP(LD6,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 6,  0x94, 12, 0xAC, 12),
-       PINGROUP(LD7,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 7,  0x94, 14, 0xAC, 12),
-       PINGROUP(LD8,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 8,  0x94, 16, 0xAC, 12),
-       PINGROUP(LD9,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 9,  0x94, 18, 0xAC, 12),
-       PINGROUP(LDC,   LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 30, 0x90, 14, 0xAC, 20),
-       PINGROUP(LDI,   LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x20, 6,  0x98, 16, 0xAC, 18),
-       PINGROUP(LHP0,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 18, 0x98, 10, 0xAC, 16),
-       PINGROUP(LHP1,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 19, 0x98, 4,  0xAC, 14),
-       PINGROUP(LHP2,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 20, 0x98, 6,  0xAC, 14),
-       PINGROUP(LHS,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x20, 7,  0x90, 22, 0xAC, 22),
-       PINGROUP(LM0,   LCD,   DISPLAYA,  DISPLAYB,  SPI3,      RSVD,          RSVD4,     0x1C, 24, 0x90, 26, 0xAC, 22),
-       PINGROUP(LM1,   LCD,   DISPLAYA,  DISPLAYB,  RSVD,      CRT,           RSVD3,     0x1C, 25, 0x90, 28, 0xAC, 22),
-       PINGROUP(LPP,   LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x20, 8,  0x98, 14, 0xAC, 18),
-       PINGROUP(LPW0,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x20, 3,  0x90, 0,  0xAC, 20),
-       PINGROUP(LPW1,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x20, 4,  0x90, 2,  0xAC, 20),
-       PINGROUP(LPW2,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x20, 5,  0x90, 4,  0xAC, 20),
-       PINGROUP(LSC0,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 27, 0x90, 18, 0xAC, 22),
-       PINGROUP(LSC1,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x1C, 28, 0x90, 20, 0xAC, 20),
-       PINGROUP(LSCK,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x1C, 29, 0x90, 16, 0xAC, 20),
-       PINGROUP(LSDA,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      HDMI,          DISPLAYA,  0x20, 1,  0x90, 8,  0xAC, 20),
-       PINGROUP(LSDI,  LCD,   DISPLAYA,  DISPLAYB,  SPI3,      RSVD,          DISPLAYA,  0x20, 2,  0x90, 6,  0xAC, 20),
-       PINGROUP(LSPI,  LCD,   DISPLAYA,  DISPLAYB,  XIO,       HDMI,          DISPLAYA,  0x20, 0,  0x90, 10, 0xAC, 22),
-       PINGROUP(LVP0,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 21, 0x90, 30, 0xAC, 22),
-       PINGROUP(LVP1,  LCD,   DISPLAYA,  DISPLAYB,  RSVD,      RSVD,          RSVD4,     0x1C, 22, 0x98, 8,  0xAC, 16),
-       PINGROUP(LVS,   LCD,   DISPLAYA,  DISPLAYB,  XIO,       RSVD,          RSVD4,     0x1C, 26, 0x90, 24, 0xAC, 22),
-       PINGROUP(OWC,   SYS,   OWR,       RSVD,      RSVD,      RSVD,          OWR,       0x14, 31, 0x84, 8,  0xB0, 30),
-       PINGROUP(PMC,   SYS,   PWR_ON,    PWR_INTR,  RSVD,      RSVD,          PWR_ON,    0x14, 23, 0x98, 18, -1,   -1),
-       PINGROUP(PTA,   NAND,  I2C2,      HDMI,      GMI,       RSVD,          RSVD,      0x14, 24, 0x98, 22, 0xA4, 4),
-       PINGROUP(RM,    UART,  I2C,       RSVD,      RSVD,      RSVD,          RSVD4,     0x14, 25, 0x80, 14, 0xA4, 0),
-       PINGROUP(SDB,   SD,    UARTA,     PWM,       SDIO3,     SPI2,          PWM,       0x20, 15, 0x8C, 10, -1,   -1),
-       PINGROUP(SDC,   SD,    PWM,       TWC,       SDIO3,     SPI3,          TWC,       0x18, 1,  0x8C, 12, 0xAC, 28),
-       PINGROUP(SDD,   SD,    UARTA,     PWM,       SDIO3,     SPI3,          PWM,       0x18, 2,  0x8C, 14, 0xAC, 30),
-       PINGROUP(SDIO1, BB,    SDIO1,     RSVD,      UARTE,     UARTA,         RSVD2,     0x14, 30, 0x80, 30, 0xB0, 18),
-       PINGROUP(SLXA,  SD,    PCIE,      SPI4,      SDIO3,     SPI2,          PCIE,      0x18, 3,  0x84, 6,  0xA4, 22),
-       PINGROUP(SLXC,  SD,    SPDIF,     SPI4,      SDIO3,     SPI2,          SPI4,      0x18, 5,  0x84, 10, 0xA4, 26),
-       PINGROUP(SLXD,  SD,    SPDIF,     SPI4,      SDIO3,     SPI2,          SPI4,      0x18, 6,  0x84, 12, 0xA4, 28),
-       PINGROUP(SLXK,  SD,    PCIE,      SPI4,      SDIO3,     SPI2,          PCIE,      0x18, 7,  0x84, 14, 0xA4, 30),
-       PINGROUP(SPDI,  AUDIO, SPDIF,     RSVD,      I2C,       SDIO2,         RSVD2,     0x18, 8,  0x8C, 8,  0xA4, 16),
-       PINGROUP(SPDO,  AUDIO, SPDIF,     RSVD,      I2C,       SDIO2,         RSVD2,     0x18, 9,  0x8C, 6,  0xA4, 18),
-       PINGROUP(SPIA,  AUDIO, SPI1,      SPI2,      SPI3,      GMI,           GMI,       0x18, 10, 0x8C, 30, 0xA8, 4),
-       PINGROUP(SPIB,  AUDIO, SPI1,      SPI2,      SPI3,      GMI,           GMI,       0x18, 11, 0x8C, 28, 0xA8, 6),
-       PINGROUP(SPIC,  AUDIO, SPI1,      SPI2,      SPI3,      GMI,           GMI,       0x18, 12, 0x8C, 26, 0xA8, 8),
-       PINGROUP(SPID,  AUDIO, SPI2,      SPI1,      SPI2_ALT,  GMI,           GMI,       0x18, 13, 0x8C, 24, 0xA8, 10),
-       PINGROUP(SPIE,  AUDIO, SPI2,      SPI1,      SPI2_ALT,  GMI,           GMI,       0x18, 14, 0x8C, 22, 0xA8, 12),
-       PINGROUP(SPIF,  AUDIO, SPI3,      SPI1,      SPI2,      RSVD,          RSVD4,     0x18, 15, 0x8C, 20, 0xA8, 14),
-       PINGROUP(SPIG,  AUDIO, SPI3,      SPI2,      SPI2_ALT,  I2C,           SPI2_ALT,  0x18, 16, 0x8C, 18, 0xA8, 16),
-       PINGROUP(SPIH,  AUDIO, SPI3,      SPI2,      SPI2_ALT,  I2C,           SPI2_ALT,  0x18, 17, 0x8C, 16, 0xA8, 18),
-       PINGROUP(UAA,   BB,    SPI3,      MIPI_HS,   UARTA,     ULPI,          MIPI_HS,   0x18, 18, 0x80, 0,  0xAC, 0),
-       PINGROUP(UAB,   BB,    SPI2,      MIPI_HS,   UARTA,     ULPI,          MIPI_HS,   0x18, 19, 0x80, 2,  0xAC, 2),
-       PINGROUP(UAC,   BB,    OWR,       RSVD,      RSVD,      RSVD,          RSVD4,     0x18, 20, 0x80, 4,  0xAC, 4),
-       PINGROUP(UAD,   UART,  IRDA,      SPDIF,     UARTA,     SPI4,          SPDIF,     0x18, 21, 0x80, 6,  0xAC, 6),
-       PINGROUP(UCA,   UART,  UARTC,     RSVD,      GMI,       RSVD,          RSVD4,     0x18, 22, 0x84, 16, 0xAC, 8),
-       PINGROUP(UCB,   UART,  UARTC,     PWM,       GMI,       RSVD,          RSVD4,     0x18, 23, 0x84, 18, 0xAC, 10),
-       PINGROUP(UDA,   BB,    SPI1,      RSVD,      UARTD,     ULPI,          RSVD2,     0x20, 13, 0x80, 8,  0xB0, 16),
-       /* these pin groups only have pullup and pull down control */
-       PINGROUP(CK32,  SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 14),
-       PINGROUP(DDRC,  DDR,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xAC, 26),
-       PINGROUP(PMCA,  SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 4),
-       PINGROUP(PMCB,  SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 6),
-       PINGROUP(PMCC,  SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 8),
-       PINGROUP(PMCD,  SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 10),
-       PINGROUP(PMCE,  SYS,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xB0, 12),
-       PINGROUP(XM2C,  DDR,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xA8, 30),
-       PINGROUP(XM2D,  DDR,   RSVD,      RSVD,      RSVD,      RSVD,          RSVD,      -1,   -1, -1,   -1, 0xA8, 28),
+       PINGROUPS\
+};
+
+#undef PINGROUP
+
+#define PINGROUP(pg_name, gpio_nr, vdd, f0, f1, f2, f3, f_safe,                \
+                        tri_r, tri_b, mux_r, mux_b, pupd_r, pupd_b)    \
+       [TEGRA_GPIO_##gpio_nr] =  TEGRA_PINGROUP_ ##pg_name\
+
+static const int gpio_to_pingroup[TEGRA_MAX_GPIO] = { \
+       PINGROUPS\
 };
 
 void __devinit tegra20_pinmux_init(const struct tegra_pingroup_desc **pg,
                int *pg_max, const struct tegra_drive_pingroup_desc **pgdrive,
-               int *pgdrive_max)
+               int *pgdrive_max, const int **gpiomap, int *gpiomap_max)
 {
        *pg = tegra_soc_pingroups;
        *pg_max = TEGRA_MAX_PINGROUP;
        *pgdrive = tegra_soc_drive_pingroups;
        *pgdrive_max = TEGRA_MAX_DRIVE_PINGROUP;
+       *gpiomap = gpio_to_pingroup;
+       *gpiomap_max = TEGRA_MAX_GPIO;
 }
 
index dac0251..55047a9 100644 (file)
@@ -31,6 +31,7 @@
 #include <mach/pinmux-tegra30.h>
 
 #include "pm.h"
+#include "gpio-names.h"
 
 #define PINGROUP_REG_A 0x868
 #define MUXCTL_REG_A   0x3000
@@ -101,7 +102,7 @@ const struct tegra_drive_pingroup_desc tegra_soc_drive_pingroups[TEGRA_MAX_DRIVE
        DEFAULT_DRIVE_PINGROUP(CEC,             0x938),
 };
 
-#define PINGROUP(pg_name, vdd, f0, f1, f2, f3, fs, iod, reg)   \
+#define PINGROUP(pg_name, gpio_nr, vdd, f0, f1, f2, f3, fs, iod, reg)  \
        [TEGRA_PINGROUP_ ## pg_name] = {                        \
                .name = #pg_name,                               \
                .vddio = TEGRA_VDDIO_ ## vdd,                   \
@@ -111,6 +112,7 @@ const struct tegra_drive_pingroup_desc tegra_soc_drive_pingroups[TEGRA_MAX_DRIVE
                        TEGRA_MUX_ ## f2,                       \
                        TEGRA_MUX_ ## f3,                       \
                },                                              \
+               .gpionr = TEGRA_GPIO_ ## gpio_nr,               \
                .func_safe = TEGRA_MUX_ ## fs,                  \
                .tri_bank = 1,                                  \
                .tri_reg = ((reg) - MUXCTL_REG_A),              \
@@ -127,259 +129,272 @@ const struct tegra_drive_pingroup_desc tegra_soc_drive_pingroups[TEGRA_MAX_DRIVE
                .ioreset_bit = 8,                               \
        }
 
+/* !!!FIXME!!! FILL IN fSafe COLUMN IN TABLE ....... */
+
+#define PINGROUPS      \
+       PINGROUP(ULPI_DATA0,    PO1,    BB,             SPI3,   HSI,            UARTA,  ULPI,           RSVD,   INPUT,  0x3000),\
+       PINGROUP(ULPI_DATA1,    PO2,    BB,             SPI3,   HSI,            UARTA,  ULPI,           RSVD,   INPUT,  0x3004),\
+       PINGROUP(ULPI_DATA2,    PO3,    BB,             SPI3,   HSI,            UARTA,  ULPI,           RSVD,   INPUT,  0x3008),\
+       PINGROUP(ULPI_DATA3,    PO4,    BB,             SPI3,   HSI,            UARTA,  ULPI,           RSVD,   INPUT,  0x300c),\
+       PINGROUP(ULPI_DATA4,    PO5,    BB,             SPI2,   HSI,            UARTA,  ULPI,           RSVD,   INPUT,  0x3010),\
+       PINGROUP(ULPI_DATA5,    PO6,    BB,             SPI2,   HSI,            UARTA,  ULPI,           RSVD,   INPUT,  0x3014),\
+       PINGROUP(ULPI_DATA6,    PO7,    BB,             SPI2,   HSI,            UARTA,  ULPI,           RSVD,   INPUT,  0x3018),\
+       PINGROUP(ULPI_DATA7,    PO0,    BB,             SPI2,   HSI,            UARTA,  ULPI,           RSVD,   INPUT,  0x301c),\
+       PINGROUP(ULPI_CLK,      PY0,    BB,             SPI1,   RSVD,           UARTD,  ULPI,           RSVD,   INPUT,  0x3020),\
+       PINGROUP(ULPI_DIR,      PY1,    BB,             SPI1,   RSVD,           UARTD,  ULPI,           RSVD,   INPUT,  0x3024),\
+       PINGROUP(ULPI_NXT,      PY2,    BB,             SPI1,   RSVD,           UARTD,  ULPI,           RSVD,   INPUT,  0x3028),\
+       PINGROUP(ULPI_STP,      PY3,    BB,             SPI1,   RSVD,           UARTD,  ULPI,           RSVD,   INPUT,  0x302c),\
+       PINGROUP(DAP3_FS,       PP0,    BB,             I2S2,   RSVD1,          DISPLAYA,       DISPLAYB,       RSVD,   INPUT,  0x3030),\
+       PINGROUP(DAP3_DIN,      PP1,    BB,             I2S2,   RSVD1,          DISPLAYA,       DISPLAYB,       RSVD,   INPUT,  0x3034),\
+       PINGROUP(DAP3_DOUT,     PP2,    BB,             I2S2,   RSVD1,          DISPLAYA,       DISPLAYB,       RSVD,   INPUT,  0x3038),\
+       PINGROUP(DAP3_SCLK,     PP3,    BB,             I2S2,   RSVD1,          DISPLAYA,       DISPLAYB,       RSVD,   INPUT,  0x303c),\
+       PINGROUP(GPIO_PV0,      PV0,    BB,             RSVD,   RSVD,           RSVD,   RSVD,           RSVD,   INPUT,  0x3040),\
+       PINGROUP(GPIO_PV1,      PV1,    BB,             RSVD,   RSVD,           RSVD,   RSVD,           RSVD,   INPUT,  0x3044),\
+       PINGROUP(SDMMC1_CLK,    PZ0,    SDMMC1, SDIO1,  RSVD1,          RSVD2,  INVALID,        RSVD,   INPUT,  0x3048),\
+       PINGROUP(SDMMC1_CMD,    PZ1,    SDMMC1, SDIO1,  RSVD1,          RSVD2,  INVALID,        RSVD,   INPUT,  0x304c),\
+       PINGROUP(SDMMC1_DAT3,   PY4,    SDMMC1, SDIO1,  RSVD1,          UARTE,  INVALID,        RSVD,   INPUT,  0x3050),\
+       PINGROUP(SDMMC1_DAT2,   PY5,    SDMMC1, SDIO1,  RSVD1,          UARTE,  INVALID,        RSVD,   INPUT,  0x3054),\
+       PINGROUP(SDMMC1_DAT1,   PY6,    SDMMC1, SDIO1,  RSVD1,          UARTE,  INVALID,        RSVD,   INPUT,  0x3058),\
+       PINGROUP(SDMMC1_DAT0,   PY7,    SDMMC1, SDIO1,  RSVD1,          UARTE,  INVALID,        RSVD,   INPUT,  0x305c),\
+       PINGROUP(GPIO_PV2,      PV2,    SDMMC1, OWR,    RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x3060),\
+       PINGROUP(GPIO_PV3,      PV3,    SDMMC1, INVALID,        RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x3064),\
+       PINGROUP(CLK2_OUT,      PW5,    SDMMC1, EXTPERIPH2,     RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x3068),\
+       PINGROUP(CLK2_REQ,      PCC5,   SDMMC1, DAP,    RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x306c),\
+       PINGROUP(LCD_PWR1,      PC1,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x3070),\
+       PINGROUP(LCD_PWR2,      PC6,    LCD,            DISPLAYA,       DISPLAYB,       SPI5,   INVALID,        RSVD,   OUTPUT, 0x3074),\
+       PINGROUP(LCD_SDIN,      PZ2,    LCD,            DISPLAYA,       DISPLAYB,       SPI5,   RSVD,           RSVD,   OUTPUT, 0x3078),\
+       PINGROUP(LCD_SDOUT,     PN5,    LCD,            DISPLAYA,       DISPLAYB,       SPI5,   INVALID,        RSVD,   OUTPUT, 0x307c),\
+       PINGROUP(LCD_WR_N,      PZ3,    LCD,            DISPLAYA,       DISPLAYB,       SPI5,   INVALID,        RSVD,   OUTPUT, 0x3080),\
+       PINGROUP(LCD_CS0_N,     PN4,    LCD,            DISPLAYA,       DISPLAYB,       SPI5,   RSVD,           RSVD,   OUTPUT, 0x3084),\
+       PINGROUP(LCD_DC0,       PN6,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x3088),\
+       PINGROUP(LCD_SCK,       PZ4,    LCD,            DISPLAYA,       DISPLAYB,       SPI5,   INVALID,        RSVD,   OUTPUT, 0x308c),\
+       PINGROUP(LCD_PWR0,      PB2,    LCD,            DISPLAYA,       DISPLAYB,       SPI5,   INVALID,        RSVD,   OUTPUT, 0x3090),\
+       PINGROUP(LCD_PCLK,      PB3,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x3094),\
+       PINGROUP(LCD_DE,        PJ1,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x3098),\
+       PINGROUP(LCD_HSYNC,     PJ3,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x309c),\
+       PINGROUP(LCD_VSYNC,     PJ4,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30a0),\
+       PINGROUP(LCD_D0,        PE0,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30a4),\
+       PINGROUP(LCD_D1,        PE1,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30a8),\
+       PINGROUP(LCD_D2,        PE2,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30ac),\
+       PINGROUP(LCD_D3,        PE3,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30b0),\
+       PINGROUP(LCD_D4,        PE4,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30b4),\
+       PINGROUP(LCD_D5,        PE5,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30b8),\
+       PINGROUP(LCD_D6,        PE6,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30bc),\
+       PINGROUP(LCD_D7,        PE7,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30c0),\
+       PINGROUP(LCD_D8,        PF0,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30c4),\
+       PINGROUP(LCD_D9,        PF1,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30c8),\
+       PINGROUP(LCD_D10,       PF2,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30cc),\
+       PINGROUP(LCD_D11,       PF3,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30d0),\
+       PINGROUP(LCD_D12,       PF4,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30d4),\
+       PINGROUP(LCD_D13,       PF5,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30d8),\
+       PINGROUP(LCD_D14,       PF6,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30dc),\
+       PINGROUP(LCD_D15,       PF7,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30e0),\
+       PINGROUP(LCD_D16,       PM0,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30e4),\
+       PINGROUP(LCD_D17,       PM1,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30e8),\
+       PINGROUP(LCD_D18,       PM2,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30ec),\
+       PINGROUP(LCD_D19,       PM3,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30f0),\
+       PINGROUP(LCD_D20,       PM4,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30f4),\
+       PINGROUP(LCD_D21,       PM5,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30f8),\
+       PINGROUP(LCD_D22,       PM6,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x30fc),\
+       PINGROUP(LCD_D23,       PM7,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x3100),\
+       PINGROUP(LCD_CS1_N,     PW0,    LCD,            DISPLAYA,       DISPLAYB,       SPI5,   RSVD2,          RSVD,   OUTPUT, 0x3104),\
+       PINGROUP(LCD_M1,        PW1,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x3108),\
+       PINGROUP(LCD_DC1,       PD2,    LCD,            DISPLAYA,       DISPLAYB,       RSVD1,  RSVD2,          RSVD,   OUTPUT, 0x310c),\
+       PINGROUP(HDMI_INT,      PN7,    LCD,            RSVD,   RSVD,           RSVD,   RSVD,           RSVD,   INPUT,  0x3110),\
+       PINGROUP(DDC_SCL,       PV4,    LCD,            I2C4,   RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x3114),\
+       PINGROUP(DDC_SDA,       PV5,    LCD,            I2C4,   RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x3118),\
+       PINGROUP(CRT_HSYNC,     PV6,    LCD,            CRT,    RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x311c),\
+       PINGROUP(CRT_VSYNC,     PV7,    LCD,            CRT,    RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x3120),\
+       PINGROUP(VI_D0, PT4,    VI,             INVALID,        RSVD1,          VI,     RSVD2,          RSVD,   INPUT,  0x3124),\
+       PINGROUP(VI_D1, PD5,    VI,             INVALID,        SDIO2,          VI,     RSVD1,          RSVD,   INPUT,  0x3128),\
+       PINGROUP(VI_D2, PL0,    VI,             INVALID,        SDIO2,          VI,     RSVD1,          RSVD,   INPUT,  0x312c),\
+       PINGROUP(VI_D3, PL1,    VI,             INVALID,        SDIO2,          VI,     RSVD1,          RSVD,   INPUT,  0x3130),\
+       PINGROUP(VI_D4, PL2,    VI,             INVALID,        SDIO2,          VI,     RSVD1,          RSVD,   INPUT,  0x3134),\
+       PINGROUP(VI_D5, PL3,    VI,             INVALID,        SDIO2,          VI,     RSVD1,          RSVD,   INPUT,  0x3138),\
+       PINGROUP(VI_D6, PL4,    VI,             INVALID,        SDIO2,          VI,     RSVD1,          RSVD,   INPUT,  0x313c),\
+       PINGROUP(VI_D7, PL5,    VI,             INVALID,        SDIO2,          VI,     RSVD1,          RSVD,   INPUT,  0x3140),\
+       PINGROUP(VI_D8, PL6,    VI,             INVALID,        SDIO2,          VI,     RSVD1,          RSVD,   INPUT,  0x3144),\
+       PINGROUP(VI_D9, PL7,    VI,             INVALID,        SDIO2,          VI,     RSVD1,          RSVD,   INPUT,  0x3148),\
+       PINGROUP(VI_D10,        PT2,    VI,             INVALID,        RSVD1,          VI,     RSVD2,          RSVD,   INPUT,  0x314c),\
+       PINGROUP(VI_D11,        PT3,    VI,             INVALID,        RSVD1,          VI,     RSVD2,          RSVD,   INPUT,  0x3150),\
+       PINGROUP(VI_PCLK,       PT0,    VI,             RSVD1,  SDIO2,          VI,     RSVD2,          RSVD,   INPUT,  0x3154),\
+       PINGROUP(VI_MCLK,       PT1,    VI,             INVALID,        INVALID,        INVALID,        VI,             RSVD,   INPUT,  0x3158),\
+       PINGROUP(VI_VSYNC,      PD6,    VI,             INVALID,        RSVD1,          VI,     RSVD2,          RSVD,   INPUT,  0x315c),\
+       PINGROUP(VI_HSYNC,      PD7,    VI,             INVALID,        RSVD1,          VI,     RSVD2,          RSVD,   INPUT,  0x3160),\
+       PINGROUP(UART2_RXD,     PC3,    UART,   IRDA,   SPDIF,          UARTA,  SPI4,           RSVD,   INPUT,  0x3164),\
+       PINGROUP(UART2_TXD,     PC2,    UART,   IRDA,   SPDIF,          UARTA,  SPI4,           RSVD,   INPUT,  0x3168),\
+       PINGROUP(UART2_RTS_N,   PJ6,    UART,   UARTA,  UARTB,          GMI,    SPI4,           RSVD,   INPUT,  0x316c),\
+       PINGROUP(UART2_CTS_N,   PJ5,    UART,   UARTA,  UARTB,          GMI,    SPI4,           RSVD,   INPUT,  0x3170),\
+       PINGROUP(UART3_TXD,     PW6,    UART,   UARTC,  RSVD1,          GMI,    RSVD2,          RSVD,   INPUT,  0x3174),\
+       PINGROUP(UART3_RXD,     PW7,    UART,   UARTC,  RSVD1,          GMI,    RSVD2,          RSVD,   INPUT,  0x3178),\
+       PINGROUP(UART3_CTS_N,   PA1,    UART,   UARTC,  RSVD1,          GMI,    RSVD2,          RSVD,   INPUT,  0x317c),\
+       PINGROUP(UART3_RTS_N,   PC0,    UART,   UARTC,  PWM0,           GMI,    RSVD2,          RSVD,   INPUT,  0x3180),\
+       PINGROUP(GPIO_PU0,      PU0,    UART,   OWR,    UARTA,          GMI,    RSVD1,          RSVD,   INPUT,  0x3184),\
+       PINGROUP(GPIO_PU1,      PU1,    UART,   RSVD1,  UARTA,          GMI,    RSVD2,          RSVD,   INPUT,  0x3188),\
+       PINGROUP(GPIO_PU2,      PU2,    UART,   RSVD1,  UARTA,          GMI,    RSVD2,          RSVD,   INPUT,  0x318c),\
+       PINGROUP(GPIO_PU3,      PU3,    UART,   PWM0,   UARTA,          GMI,    RSVD1,          RSVD,   INPUT,  0x3190),\
+       PINGROUP(GPIO_PU4,      PU4,    UART,   PWM1,   UARTA,          GMI,    RSVD1,          RSVD,   INPUT,  0x3194),\
+       PINGROUP(GPIO_PU5,      PU5,    UART,   PWM2,   UARTA,          GMI,    RSVD1,          RSVD,   INPUT,  0x3198),\
+       PINGROUP(GPIO_PU6,      PU6,    UART,   PWM3,   UARTA,          GMI,    RSVD1,          RSVD,   INPUT,  0x319c),\
+       PINGROUP(GEN1_I2C_SDA,  PC5,    UART,   I2C,    RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x31a0),\
+       PINGROUP(GEN1_I2C_SCL,  PC4,    UART,   I2C,    RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x31a4),\
+       PINGROUP(DAP4_FS,       PP4,    UART,   I2S3,   RSVD1,          GMI,    RSVD2,          RSVD,   INPUT,  0x31a8),\
+       PINGROUP(DAP4_DIN,      PP5,    UART,   I2S3,   RSVD1,          GMI,    RSVD2,          RSVD,   INPUT,  0x31ac),\
+       PINGROUP(DAP4_DOUT,     PP6,    UART,   I2S3,   RSVD1,          GMI,    RSVD2,          RSVD,   INPUT,  0x31b0),\
+       PINGROUP(DAP4_SCLK,     PP7,    UART,   I2S3,   RSVD1,          GMI,    RSVD2,          RSVD,   INPUT,  0x31b4),\
+       PINGROUP(CLK3_OUT,      PEE0,   UART,   EXTPERIPH3,     RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x31b8),\
+       PINGROUP(CLK3_REQ,      PEE1,   UART,   DEV3,   RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x31bc),\
+       PINGROUP(GMI_WP_N,      PC7,    GMI,            RSVD1,  NAND,           GMI,    GMI_ALT,        RSVD,   INPUT,  0x31c0),\
+       PINGROUP(GMI_IORDY,     PI5,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31c4),\
+       PINGROUP(GMI_WAIT,      PI7,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31c8),\
+       PINGROUP(GMI_ADV_N,     PK0,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31cc),\
+       PINGROUP(GMI_CLK,       PK1,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31d0),\
+       PINGROUP(GMI_CS0_N,     PJ0,    GMI,            RSVD1,  NAND,           GMI,    INVALID,        RSVD,   INPUT,  0x31d4),\
+       PINGROUP(GMI_CS1_N,     PJ2,    GMI,            RSVD1,  NAND,           GMI,    DTV,            RSVD,   INPUT,  0x31d8),\
+       PINGROUP(GMI_CS2_N,     PK3,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31dc),\
+       PINGROUP(GMI_CS3_N,     PK4,    GMI,            RSVD1,  NAND,           GMI,    GMI_ALT,        RSVD,   INPUT,  0x31e0),\
+       PINGROUP(GMI_CS4_N,     PK2,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31e4),\
+       PINGROUP(GMI_CS6_N,     PI3,    GMI,            NAND,   NAND_ALT,       GMI,    SATA,           RSVD,   INPUT,  0x31e8),\
+       PINGROUP(GMI_CS7_N,     PI6,    GMI,            NAND,   NAND_ALT,       GMI,    GMI_ALT,        RSVD,   INPUT,  0x31ec),\
+       PINGROUP(GMI_AD0,       PG0,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31f0),\
+       PINGROUP(GMI_AD1,       PG1,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31f4),\
+       PINGROUP(GMI_AD2,       PG2,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31f8),\
+       PINGROUP(GMI_AD3,       PG3,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x31fc),\
+       PINGROUP(GMI_AD4,       PG4,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x3200),\
+       PINGROUP(GMI_AD5,       PG5,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x3204),\
+       PINGROUP(GMI_AD6,       PG6,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x3208),\
+       PINGROUP(GMI_AD7,       PG7,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x320c),\
+       PINGROUP(GMI_AD8,       PH0,    GMI,            PWM0,   NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x3210),\
+       PINGROUP(GMI_AD9,       PH1,    GMI,            PWM1,   NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x3214),\
+       PINGROUP(GMI_AD10,      PH2,    GMI,            PWM2,   NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x3218),\
+       PINGROUP(GMI_AD11,      PH3,    GMI,            PWM3,   NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x321c),\
+       PINGROUP(GMI_AD12,      PH4,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x3220),\
+       PINGROUP(GMI_AD13,      PH5,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x3224),\
+       PINGROUP(GMI_AD14,      PH6,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x3228),\
+       PINGROUP(GMI_AD15,      PH7,    GMI,            RSVD1,  NAND,           GMI,    RSVD2,          RSVD,   INPUT,  0x322c),\
+       PINGROUP(GMI_A16,       PJ7,    GMI,            UARTD,  SPI4,           GMI,    GMI_ALT,        RSVD,   INPUT,  0x3230),\
+       PINGROUP(GMI_A17,       PB0,    GMI,            UARTD,  SPI4,           GMI,    INVALID,        RSVD,   INPUT,  0x3234),\
+       PINGROUP(GMI_A18,       PB1,    GMI,            UARTD,  SPI4,           GMI,    INVALID,        RSVD,   INPUT,  0x3238),\
+       PINGROUP(GMI_A19,       PK7,    GMI,            UARTD,  SPI4,           GMI,    RSVD3,          RSVD,   INPUT,  0x323c),\
+       PINGROUP(GMI_WR_N,      PI0,    GMI,            RSVD1,  NAND,           GMI,    RSVD3,          RSVD,   INPUT,  0x3240),\
+       PINGROUP(GMI_OE_N,      PI1,    GMI,            RSVD1,  NAND,           GMI,    RSVD3,          RSVD,   INPUT,  0x3244),\
+       PINGROUP(GMI_DQS,       PI2,    GMI,            RSVD1,  NAND,           GMI,    RSVD3,          RSVD,   INPUT,  0x3248),\
+       PINGROUP(GMI_RST_N,     PI4,    GMI,            NAND,   NAND_ALT,       GMI,    RSVD3,          RSVD,   INPUT,  0x324c),\
+       PINGROUP(GEN2_I2C_SCL,  PT5,    GMI,            I2C2,   INVALID,        GMI,    RSVD3,          RSVD,   INPUT,  0x3250),\
+       PINGROUP(GEN2_I2C_SDA,  PT6,    GMI,            I2C2,   INVALID,        GMI,    RSVD3,          RSVD,   INPUT,  0x3254),\
+       PINGROUP(SDMMC4_CLK,    PCC4,   SDMMC4, INVALID,        NAND,           GMI,    SDIO4,          RSVD,   INPUT,  0x3258),\
+       PINGROUP(SDMMC4_CMD,    PT7,    SDMMC4, I2C3,   NAND,           GMI,    SDIO4,  RSVD,   INPUT,  0x325c),\
+       PINGROUP(SDMMC4_DAT0,   PAA0,   SDMMC4, UARTE,  SPI3,           GMI,    SDIO4,  RSVD,   INPUT,  0x3260),\
+       PINGROUP(SDMMC4_DAT1,   PAA1,   SDMMC4, UARTE,  SPI3,           GMI,    SDIO4,  RSVD,   INPUT,  0x3264),\
+       PINGROUP(SDMMC4_DAT2,   PAA2,   SDMMC4, UARTE,  SPI3,           GMI,    SDIO4,  RSVD,   INPUT,  0x3268),\
+       PINGROUP(SDMMC4_DAT3,   PAA3,   SDMMC4, UARTE,  SPI3,           GMI,    SDIO4,  RSVD,   INPUT,  0x326c),\
+       PINGROUP(SDMMC4_DAT4,   PAA4,   SDMMC4, I2C3,   I2S4,           GMI,    SDIO4,  RSVD,   INPUT,  0x3270),\
+       PINGROUP(SDMMC4_DAT5,   PAA5,   SDMMC4, VGP3,   I2S4,           GMI,    SDIO4,  RSVD,   INPUT,  0x3274),\
+       PINGROUP(SDMMC4_DAT6,   PAA6,   SDMMC4, VGP4,   I2S4,           GMI,    SDIO4,  RSVD,   INPUT,  0x3278),\
+       PINGROUP(SDMMC4_DAT7,   PAA7,   SDMMC4, VGP5,   I2S4,           GMI,    SDIO4,  RSVD,   INPUT,  0x327c),\
+       PINGROUP(SDMMC4_RST_N,  PCC3,   SDMMC4, VGP6,   RSVD1,          RSVD2,  POPSDMMC4,      RSVD,   INPUT,  0x3280),\
+       PINGROUP(CAM_MCLK,      PCC0,   CAM,            VI,     INVALID,        VI_ALT2,        POPSDMMC4,      RSVD,   INPUT,  0x3284),\
+       PINGROUP(GPIO_PCC1,     PCC1,   CAM,            I2S4,   RSVD1,          RSVD2,  POPSDMMC4,      RSVD,   INPUT,  0x3288),\
+       PINGROUP(GPIO_PBB0,     PBB0,   CAM,            I2S4,   RSVD1,          RSVD2,  POPSDMMC4,      RSVD,   INPUT,  0x328c),\
+       PINGROUP(CAM_I2C_SCL,   PBB1,   CAM,            INVALID,        I2C3,           RSVD2,  POPSDMMC4,      RSVD,   INPUT,  0x3290),\
+       PINGROUP(CAM_I2C_SDA,   PBB2,   CAM,            INVALID,        I2C3,           RSVD2,  POPSDMMC4,      RSVD,   INPUT,  0x3294),\
+       PINGROUP(GPIO_PBB3,     PBB3,   CAM,            VGP3,   DISPLAYA,       DISPLAYB,       POPSDMMC4,      RSVD,   INPUT,  0x3298),\
+       PINGROUP(GPIO_PBB4,     PBB4,   CAM,            VGP4,   DISPLAYA,       DISPLAYB,       POPSDMMC4,      RSVD,   INPUT,  0x329c),\
+       PINGROUP(GPIO_PBB5,     PBB5,   CAM,            VGP5,   DISPLAYA,       DISPLAYB,       POPSDMMC4,      RSVD,   INPUT,  0x32a0),\
+       PINGROUP(GPIO_PBB6,     PBB6,   CAM,            VGP6,   DISPLAYA,       DISPLAYB,       POPSDMMC4,      RSVD,   INPUT,  0x32a4),\
+       PINGROUP(GPIO_PBB7,     PBB7,   CAM,            I2S4,   RSVD1,          RSVD2,  POPSDMMC4,      RSVD,   INPUT,  0x32a8),\
+       PINGROUP(GPIO_PCC2,     PCC2,   CAM,            I2S4,   RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x32ac),\
+       PINGROUP(JTAG_RTCK,     PU7,    SYS,            RTCK,   RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x32b0),\
+       PINGROUP(PWR_I2C_SCL,   PZ6,    SYS,            I2CPWR, RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x32b4),\
+       PINGROUP(PWR_I2C_SDA,   PZ7,    SYS,            I2CPWR, RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x32b8),\
+       PINGROUP(KB_ROW0,       PR0,    SYS,            KBC,    INVALID,        RSVD2,  RSVD3,          RSVD,   INPUT,  0x32bc),\
+       PINGROUP(KB_ROW1,       PR1,    SYS,            KBC,    INVALID,        RSVD2,  RSVD3,          RSVD,   INPUT,  0x32c0),\
+       PINGROUP(KB_ROW2,       PR2,    SYS,            KBC,    INVALID,        RSVD2,  RSVD3,          RSVD,   INPUT,  0x32c4),\
+       PINGROUP(KB_ROW3,       PR3,    SYS,            KBC,    INVALID,        RSVD2,  INVALID,        RSVD,   INPUT,  0x32c8),\
+       PINGROUP(KB_ROW4,       PR4,    SYS,            KBC,    INVALID,        TRACE,  RSVD3,          RSVD,   INPUT,  0x32cc),\
+       PINGROUP(KB_ROW5,       PR5,    SYS,            KBC,    INVALID,        TRACE,  OWR,            RSVD,   INPUT,  0x32d0),\
+       PINGROUP(KB_ROW6,       PR6,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32d4),\
+       PINGROUP(KB_ROW7,       PR7,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32d8),\
+       PINGROUP(KB_ROW8,       PS0,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32dc),\
+       PINGROUP(KB_ROW9,       PS1,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32e0),\
+       PINGROUP(KB_ROW10,      PS2,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32e4),\
+       PINGROUP(KB_ROW11,      PS3,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32e8),\
+       PINGROUP(KB_ROW12,      PS4,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32ec),\
+       PINGROUP(KB_ROW13,      PS5,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32f0),\
+       PINGROUP(KB_ROW14,      PS6,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32f4),\
+       PINGROUP(KB_ROW15,      PS7,    SYS,            KBC,    INVALID,        SDIO2,  INVALID,        RSVD,   INPUT,  0x32f8),\
+       PINGROUP(KB_COL0,       PQ0,    SYS,            KBC,    INVALID,        TRACE,  INVALID,        RSVD,   INPUT,  0x32fc),\
+       PINGROUP(KB_COL1,       PQ1,    SYS,            KBC,    INVALID,        TRACE,  INVALID,        RSVD,   INPUT,  0x3300),\
+       PINGROUP(KB_COL2,       PQ2,    SYS,            KBC,    INVALID,        TRACE,  RSVD,           RSVD,   INPUT,  0x3304),\
+       PINGROUP(KB_COL3,       PQ3,    SYS,            KBC,    INVALID,        TRACE,  RSVD,           RSVD,   INPUT,  0x3308),\
+       PINGROUP(KB_COL4,       PQ4,    SYS,            KBC,    INVALID,        TRACE,  RSVD,           RSVD,   INPUT,  0x330c),\
+       PINGROUP(KB_COL5,       PQ5,    SYS,            KBC,    INVALID,        TRACE,  RSVD,           RSVD,   INPUT,  0x3310),\
+       PINGROUP(KB_COL6,       PQ6,    SYS,            KBC,    INVALID,        TRACE,  INVALID,        RSVD,   INPUT,  0x3314),\
+       PINGROUP(KB_COL7,       PQ7,    SYS,            KBC,    INVALID,        TRACE,  INVALID,        RSVD,   INPUT,  0x3318),\
+       PINGROUP(CLK_32K_OUT,   PA0,    SYS,            BLINK,  RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x331c),\
+       PINGROUP(SYS_CLK_REQ,   PZ5,    SYS,            SYSCLK, RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x3320),\
+       PINGROUP(CORE_PWR_REQ,  INVALID,        SYS,            RSVD,   RSVD,           RSVD,   RSVD,           RSVD,   INPUT,  0x3324),\
+       PINGROUP(CPU_PWR_REQ,   INVALID,        SYS,            RSVD,   RSVD,           RSVD,   RSVD,           RSVD,   INPUT,  0x3328),\
+       PINGROUP(PWR_INT_N,     INVALID,        SYS,            RSVD,   RSVD,           RSVD,   RSVD,           RSVD,   INPUT,  0x332c),\
+       PINGROUP(CLK_32K_IN,    INVALID,        SYS,            RSVD,   RSVD,           RSVD,   RSVD,           RSVD,   INPUT,  0x3330),\
+       PINGROUP(OWR,   INVALID,        SYS,            OWR,    RSVD,           RSVD,   RSVD,           RSVD,   INPUT,  0x3334),\
+       PINGROUP(DAP1_FS,       PN0,    AUDIO,  I2S0,   HDA,            GMI,    SDIO2,  RSVD,   INPUT,  0x3338),\
+       PINGROUP(DAP1_DIN,      PN1,    AUDIO,  I2S0,   HDA,            GMI,    SDIO2,  RSVD,   INPUT,  0x333c),\
+       PINGROUP(DAP1_DOUT,     PN2,    AUDIO,  I2S0,   HDA,            GMI,    SDIO2,  RSVD,   INPUT,  0x3340),\
+       PINGROUP(DAP1_SCLK,     PN3,    AUDIO,  I2S0,   HDA,            GMI,    SDIO2,  RSVD,   INPUT,  0x3344),\
+       PINGROUP(CLK1_REQ,      PEE2,   AUDIO,  DAP,    HDA,            RSVD2,  RSVD3,  RSVD,   INPUT,  0x3348),\
+       PINGROUP(CLK1_OUT,      PW4,    AUDIO,  EXTPERIPH1,     RSVD1,          RSVD2,  RSVD3,          RSVD,   INPUT,  0x334c),\
+       PINGROUP(SPDIF_IN,      PK6,    AUDIO,  SPDIF,  HDA,            INVALID,        DAPSDMMC2,      RSVD,   INPUT,  0x3350),\
+       PINGROUP(SPDIF_OUT,     PK5,    AUDIO,  SPDIF,  RSVD1,          INVALID,        DAPSDMMC2,      RSVD,   INPUT,  0x3354),\
+       PINGROUP(DAP2_FS,       PA2,    AUDIO,  I2S1,   HDA,            RSVD2,  GMI,            RSVD,   INPUT,  0x3358),\
+       PINGROUP(DAP2_DIN,      PA4,    AUDIO,  I2S1,   HDA,            RSVD2,  GMI,            RSVD,   INPUT,  0x335c),\
+       PINGROUP(DAP2_DOUT,     PA5,    AUDIO,  I2S1,   HDA,            RSVD2,  GMI,            RSVD,   INPUT,  0x3360),\
+       PINGROUP(DAP2_SCLK,     PA3,    AUDIO,  I2S1,   HDA,            RSVD2,  GMI,            RSVD,   INPUT,  0x3364),\
+       PINGROUP(SPI2_MOSI,     PX0,    AUDIO,  SPI6,   SPI2,           INVALID,        GMI,            RSVD,   INPUT,  0x3368),\
+       PINGROUP(SPI2_MISO,     PX1,    AUDIO,  SPI6,   SPI2,           INVALID,        GMI,            RSVD,   INPUT,  0x336c),\
+       PINGROUP(SPI2_CS0_N,    PX3,    AUDIO,  SPI6,   SPI2,           INVALID,        GMI,            RSVD,   INPUT,  0x3370),\
+       PINGROUP(SPI2_SCK,      PX2,    AUDIO,  SPI6,   SPI2,           INVALID,        GMI,            RSVD,   INPUT,  0x3374),\
+       PINGROUP(SPI1_MOSI,     PX4,    AUDIO,  SPI2,   SPI1,           INVALID,        GMI,            RSVD,   INPUT,  0x3378),\
+       PINGROUP(SPI1_SCK,      PX5,    AUDIO,  SPI2,   SPI1,           INVALID,        GMI,            RSVD,   INPUT,  0x337c),\
+       PINGROUP(SPI1_CS0_N,    PX6,    AUDIO,  SPI2,   SPI1,           INVALID,        GMI,            RSVD,   INPUT,  0x3380),\
+       PINGROUP(SPI1_MISO,     PX7,    AUDIO,  INVALID,        SPI1,           INVALID,        RSVD3,          RSVD,   INPUT,  0x3384),\
+       PINGROUP(SPI2_CS1_N,    PW2,    AUDIO,  INVALID,        SPI2,           INVALID,        INVALID,        RSVD,   INPUT,  0x3388),\
+       PINGROUP(SPI2_CS2_N,    PW3,    AUDIO,  INVALID,        SPI2,           INVALID,        INVALID,        RSVD,   INPUT,  0x338c),\
+       PINGROUP(SDMMC3_CLK,    PA6,    SDMMC3, UARTA,  PWM2,           SDIO3,  INVALID,        RSVD,   INPUT,  0x3390),\
+       PINGROUP(SDMMC3_CMD,    PA7,    SDMMC3, UARTA,  PWM3,           SDIO3,  INVALID,        RSVD,   INPUT,  0x3394),\
+       PINGROUP(SDMMC3_DAT0,   PB7,    SDMMC3, RSVD,   RSVD1,          SDIO3,  INVALID,        RSVD,   INPUT,  0x3398),\
+       PINGROUP(SDMMC3_DAT1,   PB6,    SDMMC3, RSVD,   RSVD1,          SDIO3,  INVALID,        RSVD,   INPUT,  0x339c),\
+       PINGROUP(SDMMC3_DAT2,   PB5,    SDMMC3, RSVD,   PWM1,           SDIO3,  INVALID,        RSVD,   INPUT,  0x33a0),\
+       PINGROUP(SDMMC3_DAT3,   PB4,    SDMMC3, RSVD,   PWM0,           SDIO3,  INVALID,        RSVD,   INPUT,  0x33a4),\
+       PINGROUP(SDMMC3_DAT4,   PD1,    SDMMC3, PWM1,   INVALID,        SDIO3,  INVALID,        RSVD,   INPUT,  0x33a8),\
+       PINGROUP(SDMMC3_DAT5,   PD0,    SDMMC3, PWM0,   INVALID,        SDIO3,  INVALID,        RSVD,   INPUT,  0x33ac),\
+       PINGROUP(SDMMC3_DAT6,   PD3,    SDMMC3, SPDIF,  INVALID,        SDIO3,  INVALID,        RSVD,   INPUT,  0x33b0),\
+       PINGROUP(SDMMC3_DAT7,   PD4,    SDMMC3, SPDIF,  INVALID,        SDIO3,  INVALID,        RSVD,   INPUT,  0x33b4),\
+       PINGROUP(PEX_L0_PRSNT_N,        PDD0,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33b8),\
+       PINGROUP(PEX_L0_RST_N,  PDD1,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33bc),\
+       PINGROUP(PEX_L0_CLKREQ_N,       PDD2,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33c0),\
+       PINGROUP(PEX_WAKE_N,    PDD3,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33c4),\
+       PINGROUP(PEX_L1_PRSNT_N,        PDD4,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33c8),\
+       PINGROUP(PEX_L1_RST_N,  PDD5,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33cc),\
+       PINGROUP(PEX_L1_CLKREQ_N,       PDD6,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33d0),\
+       PINGROUP(PEX_L2_PRSNT_N,        PDD7,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33d4),\
+       PINGROUP(PEX_L2_RST_N,  PCC6,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33d8),\
+       PINGROUP(PEX_L2_CLKREQ_N,       PCC7,   PEXCTL, PCIE,   HDA,            RSVD2,  RSVD3,          RSVD,   INPUT,  0x33dc),\
+       PINGROUP(HDMI_CEC,      PEE3,   SYS,    CEC,    RSVD1,  RSVD2,  RSVD3,  RSVD,   INPUT,  0x33e0),\
+
 static const struct tegra_pingroup_desc tegra_soc_pingroups[TEGRA_MAX_PINGROUP] = {
-       /*       NAME             VDD       f0          f1          f2          f3          fSafe       io      reg */
-       PINGROUP(ULPI_DATA0,      BB,       SPI3,       HSI,        UARTA,      ULPI,       RSVD,       INPUT,  0x3000),
-       PINGROUP(ULPI_DATA1,      BB,       SPI3,       HSI,        UARTA,      ULPI,       RSVD,       INPUT,  0x3004),
-       PINGROUP(ULPI_DATA2,      BB,       SPI3,       HSI,        UARTA,      ULPI,       RSVD,       INPUT,  0x3008),
-       PINGROUP(ULPI_DATA3,      BB,       SPI3,       HSI,        UARTA,      ULPI,       RSVD,       INPUT,  0x300c),
-       PINGROUP(ULPI_DATA4,      BB,       SPI2,       HSI,        UARTA,      ULPI,       RSVD,       INPUT,  0x3010),
-       PINGROUP(ULPI_DATA5,      BB,       SPI2,       HSI,        UARTA,      ULPI,       RSVD,       INPUT,  0x3014),
-       PINGROUP(ULPI_DATA6,      BB,       SPI2,       HSI,        UARTA,      ULPI,       RSVD,       INPUT,  0x3018),
-       PINGROUP(ULPI_DATA7,      BB,       SPI2,       HSI,        UARTA,      ULPI,       RSVD,       INPUT,  0x301c),
-       PINGROUP(ULPI_CLK,        BB,       SPI1,       RSVD,       UARTD,      ULPI,       RSVD,       INPUT,  0x3020),
-       PINGROUP(ULPI_DIR,        BB,       SPI1,       RSVD,       UARTD,      ULPI,       RSVD,       INPUT,  0x3024),
-       PINGROUP(ULPI_NXT,        BB,       SPI1,       RSVD,       UARTD,      ULPI,       RSVD,       INPUT,  0x3028),
-       PINGROUP(ULPI_STP,        BB,       SPI1,       RSVD,       UARTD,      ULPI,       RSVD,       INPUT,  0x302c),
-       PINGROUP(DAP3_FS,         BB,       I2S2,       RSVD1,      DISPLAYA,   DISPLAYB,   RSVD,       INPUT,  0x3030),
-       PINGROUP(DAP3_DIN,        BB,       I2S2,       RSVD1,      DISPLAYA,   DISPLAYB,   RSVD,       INPUT,  0x3034),
-       PINGROUP(DAP3_DOUT,       BB,       I2S2,       RSVD1,      DISPLAYA,   DISPLAYB,   RSVD,       INPUT,  0x3038),
-       PINGROUP(DAP3_SCLK,       BB,       I2S2,       RSVD1,      DISPLAYA,   DISPLAYB,   RSVD,       INPUT,  0x303c),
-       PINGROUP(GPIO_PV0,        BB,       RSVD,       RSVD,       RSVD,       RSVD,       RSVD,       INPUT,  0x3040),
-       PINGROUP(GPIO_PV1,        BB,       RSVD,       RSVD,       RSVD,       RSVD,       RSVD,       INPUT,  0x3044),
-       PINGROUP(SDMMC1_CLK,      SDMMC1,   SDIO1,      RSVD1,      RSVD2,      INVALID,    RSVD,       INPUT,  0x3048),
-       PINGROUP(SDMMC1_CMD,      SDMMC1,   SDIO1,      RSVD1,      RSVD2,      INVALID,    RSVD,       INPUT,  0x304c),
-       PINGROUP(SDMMC1_DAT3,     SDMMC1,   SDIO1,      RSVD1,      UARTE,      INVALID,    RSVD,       INPUT,  0x3050),
-       PINGROUP(SDMMC1_DAT2,     SDMMC1,   SDIO1,      RSVD1,      UARTE,      INVALID,    RSVD,       INPUT,  0x3054),
-       PINGROUP(SDMMC1_DAT1,     SDMMC1,   SDIO1,      RSVD1,      UARTE,      INVALID,    RSVD,       INPUT,  0x3058),
-       PINGROUP(SDMMC1_DAT0,     SDMMC1,   SDIO1,      RSVD1,      UARTE,      INVALID,    RSVD,       INPUT,  0x305c),
-       PINGROUP(GPIO_PV2,        SDMMC1,   OWR,        RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x3060),
-       PINGROUP(GPIO_PV3,        SDMMC1,   INVALID,    RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x3064),
-       PINGROUP(CLK2_OUT,        SDMMC1,   EXTPERIPH2, RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x3068),
-       PINGROUP(CLK2_REQ,        SDMMC1,   DAP,        RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x306c),
-       PINGROUP(LCD_PWR1,        LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x3070),
-       PINGROUP(LCD_PWR2,        LCD,      DISPLAYA,   DISPLAYB,   SPI5,       INVALID,    RSVD,       OUTPUT, 0x3074),
-       PINGROUP(LCD_SDIN,        LCD,      DISPLAYA,   DISPLAYB,   SPI5,       RSVD,       RSVD,       OUTPUT, 0x3078),
-       PINGROUP(LCD_SDOUT,       LCD,      DISPLAYA,   DISPLAYB,   SPI5,       INVALID,    RSVD,       OUTPUT, 0x307c),
-       PINGROUP(LCD_WR_N,        LCD,      DISPLAYA,   DISPLAYB,   SPI5,       INVALID,    RSVD,       OUTPUT, 0x3080),
-       PINGROUP(LCD_CS0_N,       LCD,      DISPLAYA,   DISPLAYB,   SPI5,       RSVD,       RSVD,       OUTPUT, 0x3084),
-       PINGROUP(LCD_DC0,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x3088),
-       PINGROUP(LCD_SCK,         LCD,      DISPLAYA,   DISPLAYB,   SPI5,       INVALID,    RSVD,       OUTPUT, 0x308c),
-       PINGROUP(LCD_PWR0,        LCD,      DISPLAYA,   DISPLAYB,   SPI5,       INVALID,    RSVD,       OUTPUT, 0x3090),
-       PINGROUP(LCD_PCLK,        LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x3094),
-       PINGROUP(LCD_DE,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x3098),
-       PINGROUP(LCD_HSYNC,       LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x309c),
-       PINGROUP(LCD_VSYNC,       LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30a0),
-       PINGROUP(LCD_D0,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30a4),
-       PINGROUP(LCD_D1,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30a8),
-       PINGROUP(LCD_D2,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30ac),
-       PINGROUP(LCD_D3,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30b0),
-       PINGROUP(LCD_D4,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30b4),
-       PINGROUP(LCD_D5,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30b8),
-       PINGROUP(LCD_D6,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30bc),
-       PINGROUP(LCD_D7,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30c0),
-       PINGROUP(LCD_D8,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30c4),
-       PINGROUP(LCD_D9,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30c8),
-       PINGROUP(LCD_D10,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30cc),
-       PINGROUP(LCD_D11,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30d0),
-       PINGROUP(LCD_D12,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30d4),
-       PINGROUP(LCD_D13,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30d8),
-       PINGROUP(LCD_D14,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30dc),
-       PINGROUP(LCD_D15,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30e0),
-       PINGROUP(LCD_D16,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30e4),
-       PINGROUP(LCD_D17,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30e8),
-       PINGROUP(LCD_D18,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30ec),
-       PINGROUP(LCD_D19,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30f0),
-       PINGROUP(LCD_D20,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30f4),
-       PINGROUP(LCD_D21,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30f8),
-       PINGROUP(LCD_D22,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x30fc),
-       PINGROUP(LCD_D23,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x3100),
-       PINGROUP(LCD_CS1_N,       LCD,      DISPLAYA,   DISPLAYB,   SPI5,       RSVD2,      RSVD,       OUTPUT, 0x3104),
-       PINGROUP(LCD_M1,          LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x3108),
-       PINGROUP(LCD_DC1,         LCD,      DISPLAYA,   DISPLAYB,   RSVD1,      RSVD2,      RSVD,       OUTPUT, 0x310c),
-       PINGROUP(HDMI_INT,        LCD,      RSVD,       RSVD,       RSVD,       RSVD,       RSVD,       INPUT,  0x3110),
-       PINGROUP(DDC_SCL,         LCD,      I2C4,       RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x3114),
-       PINGROUP(DDC_SDA,         LCD,      I2C4,       RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x3118),
-       PINGROUP(CRT_HSYNC,       LCD,      CRT,        RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x311c),
-       PINGROUP(CRT_VSYNC,       LCD,      CRT,        RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x3120),
-       PINGROUP(VI_D0,           VI,       INVALID,    RSVD1,      VI,         RSVD2,      RSVD,       INPUT,  0x3124),
-       PINGROUP(VI_D1,           VI,       INVALID,    SDIO2,      VI,         RSVD1,      RSVD,       INPUT,  0x3128),
-       PINGROUP(VI_D2,           VI,       INVALID,    SDIO2,      VI,         RSVD1,      RSVD,       INPUT,  0x312c),
-       PINGROUP(VI_D3,           VI,       INVALID,    SDIO2,      VI,         RSVD1,      RSVD,       INPUT,  0x3130),
-       PINGROUP(VI_D4,           VI,       INVALID,    SDIO2,      VI,         RSVD1,      RSVD,       INPUT,  0x3134),
-       PINGROUP(VI_D5,           VI,       INVALID,    SDIO2,      VI,         RSVD1,      RSVD,       INPUT,  0x3138),
-       PINGROUP(VI_D6,           VI,       INVALID,    SDIO2,      VI,         RSVD1,      RSVD,       INPUT,  0x313c),
-       PINGROUP(VI_D7,           VI,       INVALID,    SDIO2,      VI,         RSVD1,      RSVD,       INPUT,  0x3140),
-       PINGROUP(VI_D8,           VI,       INVALID,    SDIO2,      VI,         RSVD1,      RSVD,       INPUT,  0x3144),
-       PINGROUP(VI_D9,           VI,       INVALID,    SDIO2,      VI,         RSVD1,      RSVD,       INPUT,  0x3148),
-       PINGROUP(VI_D10,          VI,       INVALID,    RSVD1,      VI,         RSVD2,      RSVD,       INPUT,  0x314c),
-       PINGROUP(VI_D11,          VI,       INVALID,    RSVD1,      VI,         RSVD2,      RSVD,       INPUT,  0x3150),
-       PINGROUP(VI_PCLK,         VI,       RSVD1,      SDIO2,      VI,         RSVD2,      RSVD,       INPUT,  0x3154),
-       PINGROUP(VI_MCLK,         VI,       INVALID,    INVALID,    INVALID,    VI,         RSVD,       INPUT,  0x3158),
-       PINGROUP(VI_VSYNC,        VI,       INVALID,    RSVD1,      VI,         RSVD2,      RSVD,       INPUT,  0x315c),
-       PINGROUP(VI_HSYNC,        VI,       INVALID,    RSVD1,      VI,         RSVD2,      RSVD,       INPUT,  0x3160),
-       PINGROUP(UART2_RXD,       UART,     IRDA,       SPDIF,      UARTA,      SPI4,       RSVD,       INPUT,  0x3164),
-       PINGROUP(UART2_TXD,       UART,     IRDA,       SPDIF,      UARTA,      SPI4,       RSVD,       INPUT,  0x3168),
-       PINGROUP(UART2_RTS_N,     UART,     UARTA,      UARTB,      GMI,        SPI4,       RSVD,       INPUT,  0x316c),
-       PINGROUP(UART2_CTS_N,     UART,     UARTA,      UARTB,      GMI,        SPI4,       RSVD,       INPUT,  0x3170),
-       PINGROUP(UART3_TXD,       UART,     UARTC,      RSVD1,      GMI,        RSVD2,      RSVD,       INPUT,  0x3174),
-       PINGROUP(UART3_RXD,       UART,     UARTC,      RSVD1,      GMI,        RSVD2,      RSVD,       INPUT,  0x3178),
-       PINGROUP(UART3_CTS_N,     UART,     UARTC,      RSVD1,      GMI,        RSVD2,      RSVD,       INPUT,  0x317c),
-       PINGROUP(UART3_RTS_N,     UART,     UARTC,      PWM0,       GMI,        RSVD2,      RSVD,       INPUT,  0x3180),
-       PINGROUP(GPIO_PU0,        UART,     OWR,        UARTA,      GMI,        RSVD1,      RSVD,       INPUT,  0x3184),
-       PINGROUP(GPIO_PU1,        UART,     RSVD1,      UARTA,      GMI,        RSVD2,      RSVD,       INPUT,  0x3188),
-       PINGROUP(GPIO_PU2,        UART,     RSVD1,      UARTA,      GMI,        RSVD2,      RSVD,       INPUT,  0x318c),
-       PINGROUP(GPIO_PU3,        UART,     PWM0,       UARTA,      GMI,        RSVD1,      RSVD,       INPUT,  0x3190),
-       PINGROUP(GPIO_PU4,        UART,     PWM1,       UARTA,      GMI,        RSVD1,      RSVD,       INPUT,  0x3194),
-       PINGROUP(GPIO_PU5,        UART,     PWM2,       UARTA,      GMI,        RSVD1,      RSVD,       INPUT,  0x3198),
-       PINGROUP(GPIO_PU6,        UART,     PWM3,       UARTA,      GMI,        RSVD1,      RSVD,       INPUT,  0x319c),
-       PINGROUP(GEN1_I2C_SDA,    UART,     I2C,        RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x31a0),
-       PINGROUP(GEN1_I2C_SCL,    UART,     I2C,        RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x31a4),
-       PINGROUP(DAP4_FS,         UART,     I2S3,       RSVD1,      GMI,        RSVD2,      RSVD,       INPUT,  0x31a8),
-       PINGROUP(DAP4_DIN,        UART,     I2S3,       RSVD1,      GMI,        RSVD2,      RSVD,       INPUT,  0x31ac),
-       PINGROUP(DAP4_DOUT,       UART,     I2S3,       RSVD1,      GMI,        RSVD2,      RSVD,       INPUT,  0x31b0),
-       PINGROUP(DAP4_SCLK,       UART,     I2S3,       RSVD1,      GMI,        RSVD2,      RSVD,       INPUT,  0x31b4),
-       PINGROUP(CLK3_OUT,        UART,     EXTPERIPH3, RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x31b8),
-       PINGROUP(CLK3_REQ,        UART,     DEV3,       RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x31bc),
-       PINGROUP(GMI_WP_N,        GMI,      RSVD1,      NAND,       GMI,        GMI_ALT,    RSVD,       INPUT,  0x31c0),
-       PINGROUP(GMI_IORDY,       GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31c4),
-       PINGROUP(GMI_WAIT,        GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31c8),
-       PINGROUP(GMI_ADV_N,       GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31cc),
-       PINGROUP(GMI_CLK,         GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31d0),
-       PINGROUP(GMI_CS0_N,       GMI,      RSVD1,      NAND,       GMI,        INVALID,    RSVD,       INPUT,  0x31d4),
-       PINGROUP(GMI_CS1_N,       GMI,      RSVD1,      NAND,       GMI,        DTV,        RSVD,       INPUT,  0x31d8),
-       PINGROUP(GMI_CS2_N,       GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31dc),
-       PINGROUP(GMI_CS3_N,       GMI,      RSVD1,      NAND,       GMI,        GMI_ALT,    RSVD,       INPUT,  0x31e0),
-       PINGROUP(GMI_CS4_N,       GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31e4),
-       PINGROUP(GMI_CS6_N,       GMI,      NAND,       NAND_ALT,   GMI,        SATA,       RSVD,       INPUT,  0x31e8),
-       PINGROUP(GMI_CS7_N,       GMI,      NAND,       NAND_ALT,   GMI,        GMI_ALT,    RSVD,       INPUT,  0x31ec),
-       PINGROUP(GMI_AD0,         GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31f0),
-       PINGROUP(GMI_AD1,         GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31f4),
-       PINGROUP(GMI_AD2,         GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31f8),
-       PINGROUP(GMI_AD3,         GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x31fc),
-       PINGROUP(GMI_AD4,         GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x3200),
-       PINGROUP(GMI_AD5,         GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x3204),
-       PINGROUP(GMI_AD6,         GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x3208),
-       PINGROUP(GMI_AD7,         GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x320c),
-       PINGROUP(GMI_AD8,         GMI,      PWM0,       NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x3210),
-       PINGROUP(GMI_AD9,         GMI,      PWM1,       NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x3214),
-       PINGROUP(GMI_AD10,        GMI,      PWM2,       NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x3218),
-       PINGROUP(GMI_AD11,        GMI,      PWM3,       NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x321c),
-       PINGROUP(GMI_AD12,        GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x3220),
-       PINGROUP(GMI_AD13,        GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x3224),
-       PINGROUP(GMI_AD14,        GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x3228),
-       PINGROUP(GMI_AD15,        GMI,      RSVD1,      NAND,       GMI,        RSVD2,      RSVD,       INPUT,  0x322c),
-       PINGROUP(GMI_A16,         GMI,      UARTD,      SPI4,       GMI,        GMI_ALT,    RSVD,       INPUT,  0x3230),
-       PINGROUP(GMI_A17,         GMI,      UARTD,      SPI4,       GMI,        INVALID,    RSVD,       INPUT,  0x3234),
-       PINGROUP(GMI_A18,         GMI,      UARTD,      SPI4,       GMI,        INVALID,    RSVD,       INPUT,  0x3238),
-       PINGROUP(GMI_A19,         GMI,      UARTD,      SPI4,       GMI,        RSVD3,      RSVD,       INPUT,  0x323c),
-       PINGROUP(GMI_WR_N,        GMI,      RSVD1,      NAND,       GMI,        RSVD3,      RSVD,       INPUT,  0x3240),
-       PINGROUP(GMI_OE_N,        GMI,      RSVD1,      NAND,       GMI,        RSVD3,      RSVD,       INPUT,  0x3244),
-       PINGROUP(GMI_DQS,         GMI,      RSVD1,      NAND,       GMI,        RSVD3,      RSVD,       INPUT,  0x3248),
-       PINGROUP(GMI_RST_N,       GMI,      NAND,       NAND_ALT,   GMI,        RSVD3,      RSVD,       INPUT,  0x324c),
-       PINGROUP(GEN2_I2C_SCL,    GMI,      I2C2,       INVALID,    GMI,        RSVD3,      RSVD,       INPUT,  0x3250),
-       PINGROUP(GEN2_I2C_SDA,    GMI,      I2C2,       INVALID,    GMI,        RSVD3,      RSVD,       INPUT,  0x3254),
-       PINGROUP(SDMMC4_CLK,      SDMMC4,   INVALID,    NAND,       GMI,        SDIO4,      RSVD,       INPUT,  0x3258),
-       PINGROUP(SDMMC4_CMD,      SDMMC4,   I2C3,       NAND,       GMI,        SDIO4,      RSVD,       INPUT,  0x325c),
-       PINGROUP(SDMMC4_DAT0,     SDMMC4,   UARTE,      SPI3,       GMI,        SDIO4,      RSVD,       INPUT,  0x3260),
-       PINGROUP(SDMMC4_DAT1,     SDMMC4,   UARTE,      SPI3,       GMI,        SDIO4,      RSVD,       INPUT,  0x3264),
-       PINGROUP(SDMMC4_DAT2,     SDMMC4,   UARTE,      SPI3,       GMI,        SDIO4,      RSVD,       INPUT,  0x3268),
-       PINGROUP(SDMMC4_DAT3,     SDMMC4,   UARTE,      SPI3,       GMI,        SDIO4,      RSVD,       INPUT,  0x326c),
-       PINGROUP(SDMMC4_DAT4,     SDMMC4,   I2C3,       I2S4,       GMI,        SDIO4,      RSVD,       INPUT,  0x3270),
-       PINGROUP(SDMMC4_DAT5,     SDMMC4,   VGP3,       I2S4,       GMI,        SDIO4,      RSVD,       INPUT,  0x3274),
-       PINGROUP(SDMMC4_DAT6,     SDMMC4,   VGP4,       I2S4,       GMI,        SDIO4,      RSVD,       INPUT,  0x3278),
-       PINGROUP(SDMMC4_DAT7,     SDMMC4,   VGP5,       I2S4,       GMI,        SDIO4,      RSVD,       INPUT,  0x327c),
-       PINGROUP(SDMMC4_RST_N,    SDMMC4,   VGP6,       RSVD1,      RSVD2,      POPSDMMC4,  RSVD,       INPUT,  0x3280),
-       PINGROUP(CAM_MCLK,        CAM,      VI,         INVALID,    VI_ALT2,    POPSDMMC4,  RSVD,       INPUT,  0x3284),
-       PINGROUP(GPIO_PCC1,       CAM,      I2S4,       RSVD1,      RSVD2,      POPSDMMC4,  RSVD,       INPUT,  0x3288),
-       PINGROUP(GPIO_PBB0,       CAM,      I2S4,       RSVD1,      RSVD2,      POPSDMMC4,  RSVD,       INPUT,  0x328c),
-       PINGROUP(CAM_I2C_SCL,     CAM,      INVALID,    I2C3,       RSVD2,      POPSDMMC4,  RSVD,       INPUT,  0x3290),
-       PINGROUP(CAM_I2C_SDA,     CAM,      INVALID,    I2C3,       RSVD2,      POPSDMMC4,  RSVD,       INPUT,  0x3294),
-       PINGROUP(GPIO_PBB3,       CAM,      VGP3,       DISPLAYA,   DISPLAYB,   POPSDMMC4,  RSVD,       INPUT,  0x3298),
-       PINGROUP(GPIO_PBB4,       CAM,      VGP4,       DISPLAYA,   DISPLAYB,   POPSDMMC4,  RSVD,       INPUT,  0x329c),
-       PINGROUP(GPIO_PBB5,       CAM,      VGP5,       DISPLAYA,   DISPLAYB,   POPSDMMC4,  RSVD,       INPUT,  0x32a0),
-       PINGROUP(GPIO_PBB6,       CAM,      VGP6,       DISPLAYA,   DISPLAYB,   POPSDMMC4,  RSVD,       INPUT,  0x32a4),
-       PINGROUP(GPIO_PBB7,       CAM,      I2S4,       RSVD1,      RSVD2,      POPSDMMC4,  RSVD,       INPUT,  0x32a8),
-       PINGROUP(GPIO_PCC2,       CAM,      I2S4,       RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x32ac),
-       PINGROUP(JTAG_RTCK,       SYS,      RTCK,       RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x32b0),
-       PINGROUP(PWR_I2C_SCL,     SYS,      I2CPWR,     RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x32b4),
-       PINGROUP(PWR_I2C_SDA,     SYS,      I2CPWR,     RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x32b8),
-       PINGROUP(KB_ROW0,         SYS,      KBC,        INVALID,    RSVD2,      RSVD3,      RSVD,       INPUT,  0x32bc),
-       PINGROUP(KB_ROW1,         SYS,      KBC,        INVALID,    RSVD2,      RSVD3,      RSVD,       INPUT,  0x32c0),
-       PINGROUP(KB_ROW2,         SYS,      KBC,        INVALID,    RSVD2,      RSVD3,      RSVD,       INPUT,  0x32c4),
-       PINGROUP(KB_ROW3,         SYS,      KBC,        INVALID,    RSVD2,      INVALID,    RSVD,       INPUT,  0x32c8),
-       PINGROUP(KB_ROW4,         SYS,      KBC,        INVALID,    TRACE,      RSVD3,      RSVD,       INPUT,  0x32cc),
-       PINGROUP(KB_ROW5,         SYS,      KBC,        INVALID,    TRACE,      OWR,        RSVD,       INPUT,  0x32d0),
-       PINGROUP(KB_ROW6,         SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32d4),
-       PINGROUP(KB_ROW7,         SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32d8),
-       PINGROUP(KB_ROW8,         SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32dc),
-       PINGROUP(KB_ROW9,         SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32e0),
-       PINGROUP(KB_ROW10,        SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32e4),
-       PINGROUP(KB_ROW11,        SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32e8),
-       PINGROUP(KB_ROW12,        SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32ec),
-       PINGROUP(KB_ROW13,        SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32f0),
-       PINGROUP(KB_ROW14,        SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32f4),
-       PINGROUP(KB_ROW15,        SYS,      KBC,        INVALID,    SDIO2,      INVALID,    RSVD,       INPUT,  0x32f8),
-       PINGROUP(KB_COL0,         SYS,      KBC,        INVALID,    TRACE,      INVALID,    RSVD,       INPUT,  0x32fc),
-       PINGROUP(KB_COL1,         SYS,      KBC,        INVALID,    TRACE,      INVALID,    RSVD,       INPUT,  0x3300),
-       PINGROUP(KB_COL2,         SYS,      KBC,        INVALID,    TRACE,      RSVD,       RSVD,       INPUT,  0x3304),
-       PINGROUP(KB_COL3,         SYS,      KBC,        INVALID,    TRACE,      RSVD,       RSVD,       INPUT,  0x3308),
-       PINGROUP(KB_COL4,         SYS,      KBC,        INVALID,    TRACE,      RSVD,       RSVD,       INPUT,  0x330c),
-       PINGROUP(KB_COL5,         SYS,      KBC,        INVALID,    TRACE,      RSVD,       RSVD,       INPUT,  0x3310),
-       PINGROUP(KB_COL6,         SYS,      KBC,        INVALID,    TRACE,      INVALID,    RSVD,       INPUT,  0x3314),
-       PINGROUP(KB_COL7,         SYS,      KBC,        INVALID,    TRACE,      INVALID,    RSVD,       INPUT,  0x3318),
-       PINGROUP(CLK_32K_OUT,     SYS,      BLINK,      RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x331c),
-       PINGROUP(SYS_CLK_REQ,     SYS,      SYSCLK,     RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x3320),
-       PINGROUP(CORE_PWR_REQ,    SYS,      RSVD,       RSVD,       RSVD,       RSVD,       RSVD,       INPUT,  0x3324),
-       PINGROUP(CPU_PWR_REQ,     SYS,      RSVD,       RSVD,       RSVD,       RSVD,       RSVD,       INPUT,  0x3328),
-       PINGROUP(PWR_INT_N,       SYS,      RSVD,       RSVD,       RSVD,       RSVD,       RSVD,       INPUT,  0x332c),
-       PINGROUP(CLK_32K_IN,      SYS,      RSVD,       RSVD,       RSVD,       RSVD,       RSVD,       INPUT,  0x3330),
-       PINGROUP(OWR,             SYS,      OWR,        RSVD,       RSVD,       RSVD,       RSVD,       INPUT,  0x3334),
-       PINGROUP(DAP1_FS,         AUDIO,    I2S0,       HDA,        GMI,        SDIO2,      RSVD,       INPUT,  0x3338),
-       PINGROUP(DAP1_DIN,        AUDIO,    I2S0,       HDA,        GMI,        SDIO2,      RSVD,       INPUT,  0x333c),
-       PINGROUP(DAP1_DOUT,       AUDIO,    I2S0,       HDA,        GMI,        SDIO2,      RSVD,       INPUT,  0x3340),
-       PINGROUP(DAP1_SCLK,       AUDIO,    I2S0,       HDA,        GMI,        SDIO2,      RSVD,       INPUT,  0x3344),
-       PINGROUP(CLK1_REQ,        AUDIO,    DAP,        HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x3348),
-       PINGROUP(CLK1_OUT,        AUDIO,    EXTPERIPH1, RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x334c),
-       PINGROUP(SPDIF_IN,        AUDIO,    SPDIF,      HDA,        INVALID,    DAPSDMMC2,  RSVD,       INPUT,  0x3350),
-       PINGROUP(SPDIF_OUT,       AUDIO,    SPDIF,      RSVD1,      INVALID,    DAPSDMMC2,  RSVD,       INPUT,  0x3354),
-       PINGROUP(DAP2_FS,         AUDIO,    I2S1,       HDA,        RSVD2,      GMI,        RSVD,       INPUT,  0x3358),
-       PINGROUP(DAP2_DIN,        AUDIO,    I2S1,       HDA,        RSVD2,      GMI,        RSVD,       INPUT,  0x335c),
-       PINGROUP(DAP2_DOUT,       AUDIO,    I2S1,       HDA,        RSVD2,      GMI,        RSVD,       INPUT,  0x3360),
-       PINGROUP(DAP2_SCLK,       AUDIO,    I2S1,       HDA,        RSVD2,      GMI,        RSVD,       INPUT,  0x3364),
-       PINGROUP(SPI2_MOSI,       AUDIO,    SPI6,       SPI2,       INVALID,    GMI,        RSVD,       INPUT,  0x3368),
-       PINGROUP(SPI2_MISO,       AUDIO,    SPI6,       SPI2,       INVALID,    GMI,        RSVD,       INPUT,  0x336c),
-       PINGROUP(SPI2_CS0_N,      AUDIO,    SPI6,       SPI2,       INVALID,    GMI,        RSVD,       INPUT,  0x3370),
-       PINGROUP(SPI2_SCK,        AUDIO,    SPI6,       SPI2,       INVALID,    GMI,        RSVD,       INPUT,  0x3374),
-       PINGROUP(SPI1_MOSI,       AUDIO,    SPI2,       SPI1,       INVALID,    GMI,        RSVD,       INPUT,  0x3378),
-       PINGROUP(SPI1_SCK,        AUDIO,    SPI2,       SPI1,       INVALID,    GMI,        RSVD,       INPUT,  0x337c),
-       PINGROUP(SPI1_CS0_N,      AUDIO,    SPI2,       SPI1,       INVALID,    GMI,        RSVD,       INPUT,  0x3380),
-       PINGROUP(SPI1_MISO,       AUDIO,    INVALID,    SPI1,       INVALID,    RSVD3,      RSVD,       INPUT,  0x3384),
-       PINGROUP(SPI2_CS1_N,      AUDIO,    INVALID,    SPI2,       INVALID,    INVALID,    RSVD,       INPUT,  0x3388),
-       PINGROUP(SPI2_CS2_N,      AUDIO,    INVALID,    SPI2,       INVALID,    INVALID,    RSVD,       INPUT,  0x338c),
-       PINGROUP(SDMMC3_CLK,      SDMMC3,   UARTA,      PWM2,       SDIO3,      INVALID,    RSVD,       INPUT,  0x3390),
-       PINGROUP(SDMMC3_CMD,      SDMMC3,   UARTA,      PWM3,       SDIO3,      INVALID,    RSVD,       INPUT,  0x3394),
-       PINGROUP(SDMMC3_DAT0,     SDMMC3,   RSVD,       RSVD1,      SDIO3,      INVALID,    RSVD,       INPUT,  0x3398),
-       PINGROUP(SDMMC3_DAT1,     SDMMC3,   RSVD,       RSVD1,      SDIO3,      INVALID,    RSVD,       INPUT,  0x339c),
-       PINGROUP(SDMMC3_DAT2,     SDMMC3,   RSVD,       PWM1,       SDIO3,      INVALID,    RSVD,       INPUT,  0x33a0),
-       PINGROUP(SDMMC3_DAT3,     SDMMC3,   RSVD,       PWM0,       SDIO3,      INVALID,    RSVD,       INPUT,  0x33a4),
-       PINGROUP(SDMMC3_DAT4,     SDMMC3,   PWM1,       INVALID,    SDIO3,      INVALID,    RSVD,       INPUT,  0x33a8),
-       PINGROUP(SDMMC3_DAT5,     SDMMC3,   PWM0,       INVALID,    SDIO3,      INVALID,    RSVD,       INPUT,  0x33ac),
-       PINGROUP(SDMMC3_DAT6,     SDMMC3,   SPDIF,      INVALID,    SDIO3,      INVALID,    RSVD,       INPUT,  0x33b0),
-       PINGROUP(SDMMC3_DAT7,     SDMMC3,   SPDIF,      INVALID,    SDIO3,      INVALID,    RSVD,       INPUT,  0x33b4),
-       PINGROUP(PEX_L0_PRSNT_N,  PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33b8),
-       PINGROUP(PEX_L0_RST_N,    PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33bc),
-       PINGROUP(PEX_L0_CLKREQ_N, PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33c0),
-       PINGROUP(PEX_WAKE_N,      PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33c4),
-       PINGROUP(PEX_L1_PRSNT_N,  PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33c8),
-       PINGROUP(PEX_L1_RST_N,    PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33cc),
-       PINGROUP(PEX_L1_CLKREQ_N, PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33d0),
-       PINGROUP(PEX_L2_PRSNT_N,  PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33d4),
-       PINGROUP(PEX_L2_RST_N,    PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33d8),
-       PINGROUP(PEX_L2_CLKREQ_N, PEXCTL,   PCIE,       HDA,        RSVD2,      RSVD3,      RSVD,       INPUT,  0x33dc),
-       PINGROUP(HDMI_CEC,        SYS,      CEC,        RSVD1,      RSVD2,      RSVD3,      RSVD,       INPUT,  0x33e0),
+       /*       NAME             GPIO  VDD         f0          f1          f2          f3          fSafe       io      reg */
+       PINGROUPS\
+};
+
+#undef PINGROUP
+
+#define PINGROUP(pg_name, gpio_nr, vdd, f0, f1, f2, f3, fs, iod, reg)  \
+       [TEGRA_GPIO_##gpio_nr] =  TEGRA_PINGROUP_ ##pg_name\
+
+static const int gpio_to_pingroup[TEGRA_MAX_GPIO] = { \
+       PINGROUPS\
 };
-#endif
 
 #define SET_DRIVE(_name, _hsm, _schmitt, _drive, _pulldn_drive, _pullup_drive, _pulldn_slew, _pullup_slew) \
        {                                                       \
@@ -399,12 +414,14 @@ static __initdata struct tegra_drive_pingroup_config t30_def_drive_pinmux[] = {
 
 void __devinit tegra30_pinmux_init(const struct tegra_pingroup_desc **pg,
                int *pg_max, const struct tegra_drive_pingroup_desc **pgdrive,
-               int *pgdrive_max)
+               int *pgdrive_max, const int **gpiomap, int *gpiomap_max)
 {
        *pg = tegra_soc_pingroups;
        *pg_max = TEGRA_MAX_PINGROUP;
        *pgdrive = tegra_soc_drive_pingroups;
        *pgdrive_max = TEGRA_MAX_DRIVE_PINGROUP;
+       *gpiomap = gpio_to_pingroups;
+       *gpiomap_max = TEGRA_MAX_GPIO;
 }
 
 void tegra30_default_pinmux()
index e7d9319..8d9038f 100644 (file)
 
 static const struct tegra_pingroup_desc *pingroups;
 static const struct tegra_drive_pingroup_desc *drive_pingroups;
+static const int *gpio_to_pingroups_map;
 static int pingroup_max;
 static int drive_max;
+static int gpio_to_pingroups_map_max;
 
 static char *tegra_mux_names[TEGRA_MAX_MUX] = {
        [TEGRA_MUX_AHB_CLK] = "AHB_CLK",
@@ -223,7 +225,7 @@ static const char *pupd_name(unsigned long val)
 #if !defined(CONFIG_ARCH_TEGRA_2x_SOC)
 static const char *lock_name(unsigned long val)
 {
-       switch(val) {
+       switch (val) {
        case TEGRA_PIN_LOCK_DEFAULT:
                return "LOCK_DEFUALT";
 
@@ -239,7 +241,7 @@ static const char *lock_name(unsigned long val)
 
 static const char *od_name(unsigned long val)
 {
-       switch(val) {
+       switch (val) {
        case TEGRA_PIN_OD_DEFAULT:
                return "OD_DEFAULT";
 
@@ -255,7 +257,7 @@ static const char *od_name(unsigned long val)
 
 static const char *ioreset_name(unsigned long val)
 {
-       switch(val) {
+       switch (val) {
        case TEGRA_PIN_IO_RESET_DEFAULT:
                return "IO_RESET_DEFAULT";
 
@@ -299,6 +301,11 @@ static inline void pg_writel(u32 val, u32 bank, u32 reg)
        writel(val, regs[bank] + reg);
 }
 
+int tegra_pinmux_get_pingroup(int gpio_nr)
+{
+       return gpio_to_pingroups_map[gpio_nr];
+}
+
 static int tegra_pinmux_set_func(const struct tegra_pingroup_config *config)
 {
        int mux = -1;
@@ -970,7 +977,8 @@ static int __devinit tegra_pinmux_probe(struct platform_device *pdev)
 
        if (match)
                ((pinmux_init)(match->data))(&pingroups, &pingroup_max,
-                       &drive_pingroups, &drive_max);
+                       &drive_pingroups, &drive_max, &gpio_to_pingroups_map,
+                       &gpio_to_pingroups_max);
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
        else
                /* no device tree available, so we must be on tegra20 */
index 5219746..3ac61e1 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <mach/gpio-tegra.h>
 #include <mach/iomap.h>
+#include <mach/pinmux.h>
 
 #include "../../arch/arm/mach-tegra/pm-irq.h"
 
@@ -89,7 +90,6 @@ struct tegra_gpio_bank {
 #endif
 };
 
-
 static void __iomem *regs;
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
 static struct tegra_gpio_bank tegra_gpio_banks[7];
@@ -112,6 +112,12 @@ static int tegra_gpio_compose(int bank, int port, int bit)
        return (bank << 5) | ((port & 0x3) << 3) | (bit & 0x7);
 }
 
+void tegra_gpio_set_tristate(int gpio_nr, enum tegra_tristate ts)
+{
+       int pin_group  =  tegra_pinmux_get_pingroup(gpio_nr);
+       tegra_pinmux_set_tristate(pin_group, ts);
+}
+
 static void tegra_gpio_mask_write(u32 reg, int gpio, int value)
 {
        u32 val;
@@ -150,7 +156,7 @@ static void tegra_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
 
 static int tegra_gpio_get(struct gpio_chip *chip, unsigned offset)
 {
-       if (( tegra_gpio_readl(GPIO_OE(offset)) >> GPIO_BIT(offset)) & 0x1)
+       if ((tegra_gpio_readl(GPIO_OE(offset)) >> GPIO_BIT(offset)) & 0x1)
                return (tegra_gpio_readl(GPIO_OUT(offset)) >> GPIO_BIT(offset)) & 0x1;
        return (tegra_gpio_readl(GPIO_IN(offset)) >> GPIO_BIT(offset)) & 0x1;
 }