arm: tegra: vcm3.0: t124: Add initial board files.
Ashwin Joshi [Tue, 6 Aug 2013 12:06:18 +0000 (17:06 +0530)]
Add initial board files for automotive board. The board will be named as
vcm30_t124 and will support all automotive boards.

Bug 1319925

Change-Id: Ib23aa3ef1d57a8d2e4f18f2d1de26c12de5b28f0
Signed-off-by: Ashwin Joshi <asjoshi@nvidia.com>
Reviewed-on: http://git-master/r/262290
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>

arch/arm/mach-tegra/Kconfig
arch/arm/mach-tegra/Makefile
arch/arm/mach-tegra/board-vcm30_t124-pinmux-t12x.h [new file with mode: 0644]
arch/arm/mach-tegra/board-vcm30_t124-pinmux.c [new file with mode: 0644]
arch/arm/mach-tegra/board-vcm30_t124-power.c [new file with mode: 0644]
arch/arm/mach-tegra/board-vcm30_t124-sdhci.c [new file with mode: 0644]
arch/arm/mach-tegra/board-vcm30_t124.c [new file with mode: 0644]
arch/arm/mach-tegra/board-vcm30_t124.h [new file with mode: 0644]
arch/arm/tools/mach-types

index 44b026c..7e4f345 100644 (file)
@@ -308,6 +308,14 @@ config MACH_LOKI
        help
          Support for NVIDIA LOKI Development platform
 
+config MACH_VCM30_T124
+       bool "VCM30_T124(Automotive) board"
+       depends on ARCH_TEGRA_12x_SOC
+       select MACH_HAS_SND_SOC_TEGRA_RT5639 if SND_SOC
+       select MACH_HAS_SND_SOC_TEGRA_RT5645 if SND_SOC
+       help
+         Support for NVIDIA VCM30_T124 Automotive Development platform
+
 config MACH_LAGUNA
         bool "LAGUNA board"
         depends on ARCH_TEGRA_12x_SOC || ARCH_TEGRA_11x_SOC
index 8368b46..b19bc30 100644 (file)
@@ -309,6 +309,11 @@ obj-${CONFIG_MACH_LAGUNA}               += panel-s-wqxga-10-1.o
 obj-${CONFIG_MACH_LAGUNA}               += panel-a-1080p-14-0.o
 obj-${CONFIG_MACH_LAGUNA}               += panel-a-edp-1080p-14-0.o
 
+obj-${CONFIG_MACH_VCM30_T124}           += board-vcm30_t124.o
+obj-${CONFIG_MACH_VCM30_T124}           += board-vcm30_t124-sdhci.o
+obj-${CONFIG_MACH_VCM30_T124}           += board-vcm30_t124-pinmux.o
+obj-${CONFIG_MACH_VCM30_T124}           += board-vcm30_t124-power.o
+
 obj-${CONFIG_TEGRA_BB_XMM_POWER}        += baseband-xmm-power.o
 obj-${CONFIG_TEGRA_BB_XMM_POWER2}       += baseband-xmm-power2.o
 
diff --git a/arch/arm/mach-tegra/board-vcm30_t124-pinmux-t12x.h b/arch/arm/mach-tegra/board-vcm30_t124-pinmux-t12x.h
new file mode 100644 (file)
index 0000000..79413c4
--- /dev/null
@@ -0,0 +1,323 @@
+/*
+ * arch/arm/mach-tegra/board-vcm30_t124-pinmux-t12x.h
+ *
+ * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+/* DO NOT EDIT THIS FILE. THIS FILE IS AUTO GENERATED FROM T124_CUSTOMER_PINMUX.XLSM */
+
+
+static __initdata struct tegra_pingroup_config vcm30_t124_pinmux_common[] = {
+
+       /* EXTPERIPH1 pinmux */
+       DEFAULT_PINMUX(DAP_MCLK1,     EXTPERIPH1,  NORMAL,    NORMAL,   OUTPUT),
+
+       /* I2S0 pinmux */
+       DEFAULT_PINMUX(DAP1_DIN,      I2S0,        NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(DAP1_DOUT,     I2S0,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DAP1_FS,       I2S0,        NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(DAP1_SCLK,     I2S0,        NORMAL,    NORMAL,   OUTPUT),
+
+       /* GMI pinmux */
+       DEFAULT_PINMUX(DAP2_DIN,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DAP2_DOUT,     GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DAP2_FS,       GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DAP2_SCLK,     GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DVFS_PWM,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_X1_AUD,   GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DVFS_CLK,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_X3_AUD,   GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PG0,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PG1,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PH2,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PH3,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PH4,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PH5,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PH6,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PH7,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PG2,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PG3,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PG4,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PG5,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PG6,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PG7,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PH0,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PH1,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PJ0,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PI1,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PI4,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PI7,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PC7,      GMI,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PI0,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DAP4_DIN,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DAP4_DOUT,     GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DAP4_FS,       GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DAP4_SCLK,     GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PU0,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PU1,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PU2,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PU3,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PU4,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PU5,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PU6,      GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(UART2_CTS_N,   GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(UART2_RTS_N,   GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(UART3_CTS_N,   GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(UART3_RTS_N,   GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(UART3_RXD,     GMI,         NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(UART3_TXD,     GMI,         NORMAL,    NORMAL,   OUTPUT),
+
+       /* SPI1 pinmux */
+       DEFAULT_PINMUX(GPIO_X4_AUD,   SPI1,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_X5_AUD,   SPI1,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_X6_AUD,   SPI1,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_X7_AUD,   SPI1,        NORMAL,    NORMAL,   INPUT),
+
+       /* I2S2 pinmux */
+       DEFAULT_PINMUX(DAP3_DIN,      I2S2,        NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(DAP3_DOUT,     I2S2,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(DAP3_FS,       I2S2,        NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(DAP3_SCLK,     I2S2,        NORMAL,    NORMAL,   OUTPUT),
+
+       /* SPI5 pinmux */
+       DEFAULT_PINMUX(ULPI_CLK,      SPI5,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(ULPI_DIR,      SPI5,        NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(ULPI_NXT,      SPI5,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(ULPI_STP,      SPI5,        NORMAL,    NORMAL,   OUTPUT),
+
+       /* SPI3 pinmux */
+       DEFAULT_PINMUX(ULPI_DATA0,    SPI3,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(ULPI_DATA1,    SPI3,        NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(ULPI_DATA2,    SPI3,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(ULPI_DATA3,    SPI3,        NORMAL,    NORMAL,   OUTPUT),
+
+       /* SPI2 pinmux */
+       DEFAULT_PINMUX(ULPI_DATA4,    SPI2,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(ULPI_DATA5,    SPI2,        NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(ULPI_DATA6,    SPI2,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(ULPI_DATA7,    SPI2,        NORMAL,    NORMAL,   OUTPUT),
+
+       /* SDMMC2B pinmux */
+       DEFAULT_PINMUX(CAM_I2C_SCL,   SDMMC2B,     NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(CAM_I2C_SDA,   SDMMC2B,     NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(CAM_MCLK,      SDMMC2B,     NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PBB0,     SDMMC2B,     NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PBB3,     SDMMC2B,     NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PBB5,     SDMMC2B,     NORMAL,    NORMAL,   INPUT),
+
+       /* I2S4 pinmux */
+       DEFAULT_PINMUX(GPIO_PBB6,     I2S4,        NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PBB7,     I2S4,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PCC1,     I2S4,        NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PCC2,     I2S4,        NORMAL,    NORMAL,   OUTPUT),
+
+       /* I2C2 pinmux */
+       I2C_PINMUX(GEN2_I2C_SCL, I2C2, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+       I2C_PINMUX(GEN2_I2C_SDA, I2C2, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+
+       /* UARTD pinmux */
+       DEFAULT_PINMUX(GPIO_PJ7,      UARTD,       NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(GPIO_PB0,      UARTD,       NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PB1,      UARTD,       NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(GPIO_PK7,      UARTD,       NORMAL,    NORMAL,   OUTPUT),
+
+       /* PE0 pinmux */
+       DEFAULT_PINMUX(PEX_L0_CLKREQ_N, PE0,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(PEX_L0_RST_N,  PE0,         NORMAL,    NORMAL,   OUTPUT),
+
+       /* PE1 pinmux */
+       DEFAULT_PINMUX(PEX_L1_CLKREQ_N, PE1,         NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(PEX_L1_RST_N,  PE1,         NORMAL,    NORMAL,   OUTPUT),
+
+       /* USB pinmux */
+       USB_PINMUX(USB_VBUS_EN2, USB, PULL_UP, NORMAL, INPUT, DEFAULT, DISABLE),
+       /*FIXME: Add this for E1855 only, also confirm its parameters.*/
+       USB_PINMUX(USB_VBUS_EN1, USB, PULL_UP, NORMAL, INPUT, DISABLE, DISABLE),
+       USB_PINMUX(USB_VBUS_EN0, USB, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+
+       /* SDMMC1 pinmux */
+       DEFAULT_PINMUX(SDMMC1_WP_N,   SDMMC1,      NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC1_CLK,    SDMMC1,      NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC1_CMD,    SDMMC1,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC1_DAT0,   SDMMC1,      NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(SDMMC1_DAT1,   SDMMC1,      NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(SDMMC1_DAT2,   SDMMC1,      NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(SDMMC1_DAT3,   SDMMC1,      NORMAL,    NORMAL,   OUTPUT),
+
+       /* SDMMC3 pinmux */
+       DEFAULT_PINMUX(SDMMC3_CLK,    SDMMC3,      NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(SDMMC3_CMD,    SDMMC3,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC3_DAT0,   SDMMC3,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC3_DAT1,   SDMMC3,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC3_DAT2,   SDMMC3,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC3_DAT3,   SDMMC3,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC3_CLK_LB_OUT, SDMMC3,      NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(SDMMC3_CLK_LB_IN, SDMMC3,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(KB_COL4,       SDMMC3,      NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(KB_COL5,       SDMMC3,      NORMAL,    NORMAL,   INPUT),
+
+       /* SDMMC4 pinmux */
+       DEFAULT_PINMUX(SDMMC4_CLK,    SDMMC4,      NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC4_CMD,    SDMMC4,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC4_DAT0,   SDMMC4,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC4_DAT1,   SDMMC4,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC4_DAT2,   SDMMC4,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC4_DAT3,   SDMMC4,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC4_DAT4,   SDMMC4,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC4_DAT5,   SDMMC4,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC4_DAT6,   SDMMC4,      PULL_UP,   NORMAL,   INPUT),
+       DEFAULT_PINMUX(SDMMC4_DAT7,   SDMMC4,      PULL_UP,   NORMAL,   INPUT),
+
+       /* UARTA pinmux */
+       DEFAULT_PINMUX(KB_ROW10,      UARTA,       NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(KB_ROW7,       UARTA,       NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(KB_ROW8,       UARTA,       NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(KB_ROW9,       UARTA,       NORMAL,    NORMAL,   OUTPUT),
+
+       /* UARTC pinmux */
+       DEFAULT_PINMUX(KB_ROW16,      UARTC,       NORMAL,    NORMAL,   OUTPUT),
+       DEFAULT_PINMUX(KB_ROW17,      UARTC,       NORMAL,    NORMAL,   INPUT),
+
+       /* BLINK pinmux */
+       DEFAULT_PINMUX(CLK_32K_OUT,   BLINK,       NORMAL,    NORMAL,   OUTPUT),
+
+       /* I2CPWR pinmux */
+       I2C_PINMUX(PWR_I2C_SCL, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+       I2C_PINMUX(PWR_I2C_SDA, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+
+       /* RTCK pinmux */
+       DEFAULT_PINMUX(JTAG_RTCK,     RTCK,        NORMAL,    NORMAL,   OUTPUT),
+
+       /* CLK pinmux */
+       DEFAULT_PINMUX(CLK_32K_IN,    CLK,         NORMAL,    NORMAL,   INPUT),
+
+       /* PWRON pinmux */
+       DEFAULT_PINMUX(CORE_PWR_REQ,  PWRON,       NORMAL,    NORMAL,   OUTPUT),
+
+       /* CPU pinmux */
+       DEFAULT_PINMUX(CPU_PWR_REQ,   CPU,         NORMAL,    NORMAL,   OUTPUT),
+
+       /* PMI pinmux */
+       DEFAULT_PINMUX(PWR_INT_N,     PMI,         NORMAL,    NORMAL,   INPUT),
+
+       /* RESET_OUT_N pinmux */
+       DEFAULT_PINMUX(RESET_OUT_N,   RESET_OUT_N, NORMAL,    NORMAL,   OUTPUT),
+
+       /* EXTPERIPH3 pinmux */
+       DEFAULT_PINMUX(CLK3_OUT,      EXTPERIPH3,  NORMAL,    NORMAL,   OUTPUT),
+
+       /* I2C1 pinmux */
+       I2C_PINMUX(GEN1_I2C_SCL, I2C1, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+       I2C_PINMUX(GEN1_I2C_SDA, I2C1, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+
+       /* IRDA pinmux */
+       DEFAULT_PINMUX(UART2_RXD,     IRDA,        NORMAL,    NORMAL,   INPUT),
+       DEFAULT_PINMUX(UART2_TXD,     IRDA,        NORMAL,    NORMAL,   OUTPUT),
+
+       /* CEC pinmux */
+       CEC_PINMUX(HDMI_CEC, CEC, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
+
+       /* I2C4 pinmux */
+       DDC_PINMUX(DDC_SCL, I2C4, NORMAL, NORMAL, INPUT, DEFAULT, HIGH),
+       DDC_PINMUX(DDC_SDA, I2C4, NORMAL, NORMAL, INPUT, DEFAULT, HIGH),
+
+       /* I2C3 pinmux */
+       I2C_PINMUX(SPDIF_OUT, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+       I2C_PINMUX(SPDIF_IN, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
+
+       /* GPIO pinmux */
+       GPIO_PINMUX(GPIO_W2_AUD, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PV0, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PV1, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PK0, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PK1, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PJ2, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PK3, NORMAL, NORMAL, OUTPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PK4, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PK2, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PI3, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PI6, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PI2, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PI5, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(PEX_WAKE_N, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(GPIO_PFF2, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(CLK2_OUT, NORMAL, NORMAL, OUTPUT, DISABLE),
+       GPIO_PINMUX(KB_COL0, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_COL1, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_COL2, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_COL3, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_COL6, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_COL7, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_ROW0, NORMAL, NORMAL, OUTPUT, DISABLE),
+       GPIO_PINMUX(KB_ROW11, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_ROW12, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_ROW13, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_ROW2, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_ROW4, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(KB_ROW6, NORMAL, NORMAL, OUTPUT, DISABLE),
+       GPIO_PINMUX(SDMMC3_CD_N, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(CLK3_REQ, NORMAL, NORMAL, INPUT, DISABLE),
+       GPIO_PINMUX(HDMI_INT, NORMAL, NORMAL, INPUT, DISABLE),
+};
+
+static __initdata struct tegra_pingroup_config unused_pins_lowpower[] = {
+       UNUSED_PINMUX(DAP_MCLK1_REQ),
+       UNUSED_PINMUX(GPIO_W3_AUD),
+       UNUSED_PINMUX(GPIO_PBB4),
+       UNUSED_PINMUX(CLK2_REQ),
+       UNUSED_PINMUX(KB_ROW1),
+       UNUSED_PINMUX(KB_ROW14),
+       UNUSED_PINMUX(KB_ROW15),
+       UNUSED_PINMUX(KB_ROW3),
+       UNUSED_PINMUX(KB_ROW5),
+       UNUSED_PINMUX(OWR),
+       UNUSED_PINMUX(USB_VBUS_EN1),
+};
+
+static struct gpio_init_pin_info init_gpio_mode_vcm30_t124_common[] = {
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PW2, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PV0, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PV1, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PK0, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PK1, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PJ2, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PK3, false, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PK4, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PK2, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PI3, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PI6, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PI2, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PI5, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PDD3, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PFF2, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PW5, false, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PQ0, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PQ1, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PQ2, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PQ3, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PQ6, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PQ7, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PR0, false, 1),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PS3, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PS4, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PS5, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PR2, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PR4, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PR6, false, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PV2, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PEE1, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PN7, true, 0),
+};
diff --git a/arch/arm/mach-tegra/board-vcm30_t124-pinmux.c b/arch/arm/mach-tegra/board-vcm30_t124-pinmux.c
new file mode 100644 (file)
index 0000000..34c4617
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * arch/arm/mach-tegra/board-vcm30_t124-pinmux.c
+ *
+ * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/gpio.h>
+#include <mach/pinmux.h>
+#include <mach/gpio-tegra.h>
+#include <mach/pinmux-t12.h>
+
+#include "board.h"
+#include "board-vcm30_t124.h"
+#include "devices.h"
+#include "gpio-names.h"
+
+#include "board-vcm30_t124-pinmux-t12x.h"
+
+/* FIXME: Check these drive strengths for VCM30_T124. */
+static __initdata
+struct tegra_drive_pingroup_config vcm30_t124_drive_pinmux[] = {
+
+       /*Set DAP2 drive (required for Codec Master Mode)*/
+       SET_DRIVE(DAP2, DISABLE, ENABLE, DIV_1, 51, 51, FASTEST, FASTEST),
+
+       /* SDMMC1 */
+       SET_DRIVE(SDIO1, ENABLE, DISABLE, DIV_1, 54, 70, FASTEST, FASTEST),
+
+       /* SDMMC3 */
+       SET_DRIVE(SDIO3, ENABLE, DISABLE, DIV_1, 20, 42, FASTEST, FASTEST),
+
+       /* SDMMC4 */
+       SET_DRIVE_WITH_TYPE(GMA, ENABLE, DISABLE, DIV_1, 1, 2, FASTEST,
+                       FASTEST, 1),
+};
+
+
+static void __init vcm30_t124_gpio_init_configure(void)
+{
+       int len;
+       int i;
+       struct gpio_init_pin_info *pins_info;
+
+       len = ARRAY_SIZE(init_gpio_mode_vcm30_t124_common);
+       pins_info = init_gpio_mode_vcm30_t124_common;
+
+       for (i = 0; i < len; ++i) {
+               tegra_gpio_init_configure(pins_info->gpio_nr,
+                       pins_info->is_input, pins_info->value);
+               pins_info++;
+       }
+}
+
+int __init vcm30_t124_pinmux_init(void)
+{
+       vcm30_t124_gpio_init_configure();
+
+       tegra_pinmux_config_table(vcm30_t124_pinmux_common,
+                                       ARRAY_SIZE(vcm30_t124_pinmux_common));
+
+       tegra_drive_pinmux_config_table(vcm30_t124_drive_pinmux,
+                                       ARRAY_SIZE(vcm30_t124_drive_pinmux));
+       tegra_pinmux_config_table(unused_pins_lowpower,
+               ARRAY_SIZE(unused_pins_lowpower));
+
+       return 0;
+}
diff --git a/arch/arm/mach-tegra/board-vcm30_t124-power.c b/arch/arm/mach-tegra/board-vcm30_t124-power.c
new file mode 100644 (file)
index 0000000..afa395d
--- /dev/null
@@ -0,0 +1,665 @@
+/*
+ * arch/arm/mach-tegra/board-vcm30_t124-power.c
+ *
+ * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <linux/i2c.h>
+#include <linux/platform_device.h>
+#include <linux/resource.h>
+#include <linux/io.h>
+#include <linux/regulator/machine.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/fixed.h>
+#include <linux/mfd/max77663-core.h>
+#include <linux/regulator/max77663-regulator.h>
+#include <linux/regulator/max15569-regulator.h>
+#include <linux/gpio.h>
+#include <linux/interrupt.h>
+
+#include <mach/edp.h>
+#include <mach/gpio-tegra.h>
+#include <mach/hardware.h>
+
+#include "pm.h"
+#include "board.h"
+#include "gpio-names.h"
+#include "board-common.h"
+#include "board-vcm30_t124.h"
+#include "tegra_cl_dvfs.h"
+#include "devices.h"
+#include "tegra11_soctherm.h"
+#include "tegra3_tsensor.h"
+
+#define PMC_CTRL               0x0
+#define PMC_CTRL_INTR_LOW      (1 << 17)
+
+/* FIXME: remove power supplies not in use. */
+
+/* MAX77663 consumer rails */
+static struct regulator_consumer_supply max77663_sd0_supply[] = {
+       REGULATOR_SUPPLY("vddio_ddr", NULL),
+       REGULATOR_SUPPLY("vddio_ddr0", NULL),
+       REGULATOR_SUPPLY("vddio_ddr1", NULL),
+};
+
+static struct regulator_consumer_supply max77663_sd1_supply[] = {
+       /* REGULATOR_SUPPLY("vdd_core", NULL), */
+};
+
+static struct regulator_consumer_supply max77663_sd2_supply[] = {
+       REGULATOR_SUPPLY("avdd_pll_utmip", "tegra-ehci.0"),
+       REGULATOR_SUPPLY("avdd_pll_utmip", "tegra-ehci.1"),
+       REGULATOR_SUPPLY("avdd_pll_utmip", "tegra-ehci.2"),
+       REGULATOR_SUPPLY("vddio_cam", "vi"),
+       REGULATOR_SUPPLY("pwrdet_cam", NULL),
+       REGULATOR_SUPPLY("avdd_osc", NULL),
+       REGULATOR_SUPPLY("vddio_sdmmc", "sdhci-tegra.3"),
+       REGULATOR_SUPPLY("pwrdet_sdmmc4", NULL),
+       REGULATOR_SUPPLY("vdd_emmc", NULL),
+};
+
+static struct regulator_consumer_supply max77663_sd3_supply[] = {
+       REGULATOR_SUPPLY("avdd_usb", "tegra-ehci.0"),
+       REGULATOR_SUPPLY("avdd_usb", "tegra-ehci.1"),
+       REGULATOR_SUPPLY("avdd_usb", "tegra-ehci.2"),
+       REGULATOR_SUPPLY("vddio_hv", "tegradc.1"),
+       REGULATOR_SUPPLY("pwrdet_hv", NULL),
+       REGULATOR_SUPPLY("vddio_bb", NULL),
+       REGULATOR_SUPPLY("pwrdet_bb", NULL),
+       REGULATOR_SUPPLY("vddio_audio", NULL),
+       REGULATOR_SUPPLY("pwrdet_audio", NULL),
+       REGULATOR_SUPPLY("vddio_uart", NULL),
+       REGULATOR_SUPPLY("pwrdet_uart", NULL),
+       REGULATOR_SUPPLY("vddio_gmi", NULL),
+       REGULATOR_SUPPLY("avdd_hdmi", "tegradc.1"),
+       REGULATOR_SUPPLY("hvdd_usb", "tegra-ehci.2"),
+       REGULATOR_SUPPLY("hvdd_usb", "tegra-xhci"),
+};
+
+static struct regulator_consumer_supply max77663_sd4_supply[] = {
+       REGULATOR_SUPPLY("avdd_csi_dsi", "tegradc.0"),
+       REGULATOR_SUPPLY("avdd_csi_dsi", "tegradc.1"),
+       REGULATOR_SUPPLY("avdd_csi_dsi", "vi"),
+       REGULATOR_SUPPLY("vddio_hsic", "tegra-ehci.1"),
+};
+
+static struct regulator_consumer_supply max77663_ldo0_supply[] = {
+       REGULATOR_SUPPLY("vdd_ddr_hs", NULL),
+};
+
+static struct regulator_consumer_supply max77663_ldo1_supply[] = {
+       REGULATOR_SUPPLY("avdd_pllx", NULL),
+       REGULATOR_SUPPLY("avdd_pllm", NULL),
+       REGULATOR_SUPPLY("avdd_pllu", NULL),
+       REGULATOR_SUPPLY("avdd_plle", NULL),
+       REGULATOR_SUPPLY("avdd_csi_dsi_pll", "tegradc.0"),
+       REGULATOR_SUPPLY("avdd_csi_dsi_pll", "tegradc.1"),
+       REGULATOR_SUPPLY("avdd_csi_dsi_pll", "vi"),
+};
+
+
+static struct regulator_consumer_supply max77663_ldo2_supply[] = {
+       REGULATOR_SUPPLY("avdd_hdmi_pll", "tegradc.1"),
+};
+
+static struct regulator_consumer_supply max77663_ldo3_supply[] = {
+       REGULATOR_SUPPLY("vddio_sdmmc", "sdhci-tegra.0"),
+       REGULATOR_SUPPLY("vddio_sd_slot", "sdhci-tegra.0"),
+       REGULATOR_SUPPLY("pwrdet_sdmmc1", NULL),
+};
+
+static struct regulator_consumer_supply max77663_ldo4_supply[] = {
+       REGULATOR_SUPPLY("vdd_rtc", NULL),
+};
+
+static struct regulator_consumer_supply max77663_ldo5_supply[] = {
+       REGULATOR_SUPPLY("vddio_sdmmc", "sdhci-tegra.2"),
+       REGULATOR_SUPPLY("vddio_sd_slot", "sdhci-tegra.2"),
+       REGULATOR_SUPPLY("pwrdet_sdmmc3", NULL),
+};
+
+static struct regulator_consumer_supply max77663_ldo6_supply[] = {
+       REGULATOR_SUPPLY("vddio_sys", NULL),
+};
+
+/* FIXME: PCI rails should be added? */
+static struct regulator_consumer_supply max77663_ldo7_supply[] = {
+       REGULATOR_SUPPLY("avdd_usb", "tegra-xhci"),
+       REGULATOR_SUPPLY("avdd_pll_utmip", "tegra-xhci"),
+};
+
+static struct regulator_consumer_supply max77663_ldo8_supply[] = {
+};
+
+static struct max77663_regulator_fps_cfg max77663_fps_cfgs[] = {
+       {
+               .src = FPS_SRC_0,
+               .en_src = FPS_EN_SRC_EN0,
+               .time_period = FPS_TIME_PERIOD_DEF,
+       },
+       {
+               .src = FPS_SRC_1,
+               .en_src = FPS_EN_SRC_EN1,
+               .time_period = FPS_TIME_PERIOD_DEF,
+       },
+       {
+               .src = FPS_SRC_2,
+               .en_src = FPS_EN_SRC_EN0,
+               .time_period = FPS_TIME_PERIOD_DEF,
+       },
+};
+
+#define MAX77663_PDATA_INIT(_rid, _id, _min_uV, _max_uV, _supply_reg, \
+               _always_on, _boot_on, _apply_uV, \
+               _fps_src, _fps_pu_period, _fps_pd_period, _flags) \
+       static struct regulator_init_data max77663_regulator_idata_##_id = { \
+               .supply_regulator = _supply_reg, \
+               .constraints = { \
+                       .name = max77663_rails(_id), \
+                       .min_uV = _min_uV, \
+                       .max_uV = _max_uV, \
+                       .valid_modes_mask = (REGULATOR_MODE_NORMAL | \
+                                       REGULATOR_MODE_STANDBY), \
+                       .valid_ops_mask = (REGULATOR_CHANGE_MODE | \
+                                       REGULATOR_CHANGE_STATUS | \
+                                       REGULATOR_CHANGE_VOLTAGE), \
+                       .always_on = _always_on, \
+                       .boot_on = _boot_on, \
+                       .apply_uV = _apply_uV, \
+               }, \
+               .num_consumer_supplies = \
+               ARRAY_SIZE(max77663_##_id##_supply), \
+               .consumer_supplies = max77663_##_id##_supply, \
+       }; \
+       static struct max77663_regulator_platform_data \
+               max77663_regulator_pdata_##_id = \
+       { \
+               .reg_init_data = &max77663_regulator_idata_##_id, \
+               .id = MAX77663_REGULATOR_ID_##_rid, \
+               .fps_src = _fps_src, \
+               .fps_pu_period = _fps_pu_period, \
+               .fps_pd_period = _fps_pd_period, \
+               .fps_cfgs = max77663_fps_cfgs, \
+               .flags = _flags, \
+       }
+
+MAX77663_PDATA_INIT(SD0, sd0,  600000, 3387500, NULL, 1, 0, 0,
+               FPS_SRC_NONE, -1, -1, 0);
+
+MAX77663_PDATA_INIT(SD1, sd1,  800000, 1587500, NULL, 1, 1, 0,
+               FPS_SRC_1, FPS_POWER_PERIOD_1, FPS_POWER_PERIOD_6, 0);
+
+MAX77663_PDATA_INIT(SD2, sd2,  1800000, 1800000, NULL, 1, 1, 0,
+               FPS_SRC_0, -1, -1, 0);
+
+MAX77663_PDATA_INIT(SD3, sd3,  600000, 3387500, NULL, 1, 1, 0,
+               FPS_SRC_0, -1, -1, 0);
+
+MAX77663_PDATA_INIT(SD4, sd4,  1200000, 1200000, NULL, 1, 1, 0,
+               FPS_SRC_0, -1, -1, 0);
+
+MAX77663_PDATA_INIT(LDO0, ldo0, 800000, 2350000, NULL, 1, 1, 0,
+               FPS_SRC_1, -1, -1, 0);
+
+MAX77663_PDATA_INIT(LDO1, ldo1, 800000, 2350000, NULL, 0, 0, 0,
+               FPS_SRC_NONE, -1, -1, 0);
+
+MAX77663_PDATA_INIT(LDO2, ldo2, 800000, 3950000, NULL, 1, 1, 0,
+               FPS_SRC_1, -1, -1, 0);
+
+MAX77663_PDATA_INIT(LDO3, ldo3, 800000, 3950000, NULL, 1, 1, 0,
+               FPS_SRC_1, -1, -1, 0);
+
+MAX77663_PDATA_INIT(LDO4, ldo4, 1000000, 1000000, NULL, 0, 1, 0,
+               FPS_SRC_0, -1, -1, 0);
+
+MAX77663_PDATA_INIT(LDO5, ldo5, 800000, 2800000, NULL, 0, 1, 0,
+               FPS_SRC_NONE, -1, -1, 0);
+
+MAX77663_PDATA_INIT(LDO6, ldo6, 800000, 3950000, NULL, 0, 0, 0,
+               FPS_SRC_NONE, -1, -1, 0);
+
+MAX77663_PDATA_INIT(LDO7, ldo7, 800000, 3950000, NULL, 0, 0, 0,
+               FPS_SRC_NONE, -1, -1, 0);
+
+MAX77663_PDATA_INIT(LDO8, ldo8, 800000, 3950000, NULL, 0, 1, 0,
+               FPS_SRC_1, -1, -1, 0);
+
+#define MAX77663_REG(_id, _data) (&max77663_regulator_pdata_##_data)
+
+static struct max77663_regulator_platform_data *max77663_reg_pdata[] = {
+       MAX77663_REG(SD0, sd0),
+       MAX77663_REG(SD1, sd1),
+       MAX77663_REG(SD2, sd2),
+       MAX77663_REG(SD3, sd3),
+       MAX77663_REG(SD4, sd4),
+       MAX77663_REG(LDO0, ldo0),
+       MAX77663_REG(LDO1, ldo1),
+       MAX77663_REG(LDO2, ldo2),
+       MAX77663_REG(LDO3, ldo3),
+       MAX77663_REG(LDO4, ldo4),
+       MAX77663_REG(LDO5, ldo5),
+       MAX77663_REG(LDO6, ldo6),
+       MAX77663_REG(LDO7, ldo7),
+       MAX77663_REG(LDO8, ldo8),
+};
+
+static struct max77663_gpio_config max77663_gpio_cfgs[] = {
+       {
+               .gpio = MAX77663_GPIO0,
+               .dir = GPIO_DIR_OUT,
+               .dout = GPIO_DOUT_LOW,
+               .out_drv = GPIO_OUT_DRV_PUSH_PULL,
+               .alternate = GPIO_ALT_DISABLE,
+       },
+       {
+               .gpio = MAX77663_GPIO5,
+               .dir = GPIO_DIR_OUT,
+               .dout = GPIO_DOUT_LOW,
+               .out_drv = GPIO_OUT_DRV_PUSH_PULL,
+               .alternate = GPIO_ALT_DISABLE,
+       },
+};
+
+static struct max77663_platform_data max77663_pdata = {
+       .irq_base       = MAX77663_IRQ_BASE,
+       .gpio_base      = MAX77663_GPIO_BASE,
+
+       .num_gpio_cfgs  = ARRAY_SIZE(max77663_gpio_cfgs),
+       .gpio_cfgs      = max77663_gpio_cfgs,
+
+       .regulator_pdata = max77663_reg_pdata,
+       .num_regulator_pdata = ARRAY_SIZE(max77663_reg_pdata),
+
+       .rtc_i2c_addr   = 0x68,
+
+       .use_power_off  = false,
+};
+
+static struct i2c_board_info __initdata max77663_regulators[] = {
+       {
+               /* The I2C address was determined by OTP factory setting */
+               I2C_BOARD_INFO("max77663", 0x3c),
+               .irq            = INT_EXTERNAL_PMU,
+               .platform_data  = &max77663_pdata,
+       },
+};
+
+/* MAX15569 switching regulator for vdd_cpu */
+static struct regulator_consumer_supply max15569_vddcpu_supply[] = {
+       REGULATOR_SUPPLY("vdd_cpu", NULL),
+};
+
+static struct regulator_init_data max15569_vddcpu_init_data = {
+       .constraints = {
+               .min_uV = 500000,
+               .max_uV = 1520000,
+               .valid_modes_mask = (REGULATOR_MODE_NORMAL |
+                                       REGULATOR_MODE_STANDBY),
+               .valid_ops_mask = (REGULATOR_CHANGE_MODE |
+                                       REGULATOR_CHANGE_STATUS |
+                                        REGULATOR_CHANGE_CONTROL |
+                                       REGULATOR_CHANGE_VOLTAGE),
+               .always_on = 1,
+               .boot_on =  1,
+               .apply_uV = 0,
+       },
+       .num_consumer_supplies = ARRAY_SIZE(max15569_vddcpu_supply),
+               .consumer_supplies = max15569_vddcpu_supply,
+};
+
+static struct max15569_regulator_platform_data max15569_vddcpu_pdata = {
+       .reg_init_data = &max15569_vddcpu_init_data,
+       .max_voltage_uV = 1520000,
+       .base_voltage_uV = 1200000,
+       .slew_rate_mv_per_us = 44,
+};
+
+static struct i2c_board_info __initdata max15569_vddcpu_boardinfo[] = {
+       {
+               I2C_BOARD_INFO("max15569", 0x3a),
+               .platform_data  = &max15569_vddcpu_pdata,
+       },
+};
+
+/* MAX15569 switching regulator for vdd_core */
+static struct regulator_consumer_supply max15569_vddcore_supply[] = {
+       REGULATOR_SUPPLY("vdd_core", NULL),
+};
+
+static struct regulator_init_data max15569_vddcore_init_data = {
+       .constraints = {
+               .min_uV = 500000,
+               .max_uV = 1520000,
+               .valid_modes_mask = (REGULATOR_MODE_NORMAL |
+                                       REGULATOR_MODE_STANDBY),
+               .valid_ops_mask = (REGULATOR_CHANGE_MODE |
+                                       REGULATOR_CHANGE_STATUS |
+                                        REGULATOR_CHANGE_CONTROL |
+                                       REGULATOR_CHANGE_VOLTAGE),
+               .always_on = 1,
+               .boot_on =  1,
+               .apply_uV = 0,
+       },
+       .num_consumer_supplies = ARRAY_SIZE(max15569_vddcore_supply),
+               .consumer_supplies = max15569_vddcore_supply,
+};
+
+static struct max15569_regulator_platform_data max15569_vddcore_pdata = {
+       .reg_init_data = &max15569_vddcore_init_data,
+       .max_voltage_uV = 1300000,
+       .base_voltage_uV = 1150000,
+       .slew_rate_mv_per_us = 44,
+};
+
+static struct i2c_board_info __initdata max15569_vddcore_boardinfo[] = {
+       {
+               I2C_BOARD_INFO("max15569", 0x39),
+               .platform_data  = &max15569_vddcore_pdata,
+       },
+};
+
+/* MAX15569 switching regulator for vdd_gpu */
+static struct regulator_consumer_supply max15569_vddgpu_supply[] = {
+       REGULATOR_SUPPLY("vdd_gpu", NULL),
+};
+
+static struct regulator_init_data max15569_vddgpu_init_data = {
+       .constraints = {
+               .min_uV = 500000,
+               .max_uV = 1520000,
+               .valid_modes_mask = (REGULATOR_MODE_NORMAL |
+                                       REGULATOR_MODE_STANDBY),
+               .valid_ops_mask = (REGULATOR_CHANGE_MODE |
+                                       REGULATOR_CHANGE_STATUS |
+                                        REGULATOR_CHANGE_CONTROL |
+                                       REGULATOR_CHANGE_VOLTAGE),
+               .always_on = 0,
+               .boot_on =  0,
+               .apply_uV = 0,
+       },
+       .num_consumer_supplies = ARRAY_SIZE(max15569_vddgpu_supply),
+               .consumer_supplies = max15569_vddgpu_supply,
+};
+
+static struct max15569_regulator_platform_data max15569_vddgpu_pdata = {
+       .reg_init_data = &max15569_vddgpu_init_data,
+       .max_voltage_uV = 1400000,
+       .base_voltage_uV = 1200000,
+       .slew_rate_mv_per_us = 44,
+};
+
+static struct i2c_board_info __initdata max15569_vddgpu_boardinfo[] = {
+       {
+               I2C_BOARD_INFO("max15569", 0x38),
+               .platform_data  = &max15569_vddgpu_pdata,
+       },
+};
+
+static struct tegra_suspend_platform_data vcm30_t124_suspend_data = {
+       .cpu_timer      = 500,
+       .cpu_off_timer  = 300,
+       .suspend_mode   = TEGRA_SUSPEND_LP0,
+       .core_timer     = 0x157e,
+       .core_off_timer = 2000,
+       .corereq_high   = true,
+       .sysclkreq_high = true,
+       .cpu_lp2_min_residency = 1000,
+       .min_residency_crail = 20000,
+#ifdef CONFIG_TEGRA_LP1_LOW_COREVOLTAGE
+       .lp1_lowvolt_support = false,
+       .i2c_base_addr = 0,
+       .pmuslave_addr = 0,
+       .core_reg_addr = 0,
+       .lp1_core_volt_low = 0,
+       .lp1_core_volt_high = 0,
+#endif
+};
+
+#ifdef CONFIG_ARCH_TEGRA_HAS_CL_DVFS
+/* board parameters for cpu dfll */
+static struct tegra_cl_dvfs_cfg_param vcm30_t124_cl_dvfs_param = {
+       .sample_rate = 12500,
+
+       .force_mode = TEGRA_CL_DVFS_FORCE_FIXED,
+       .cf = 10,
+       .ci = 0,
+       .cg = 2,
+
+       .droop_cut_value = 0xF,
+       .droop_restore_ramp = 0x0,
+       .scale_out_ramp = 0x0,
+};
+#endif
+
+/* MAX15569: fixed 10mV steps from 600mV to 1400mV, with offset 0x0b */
+#define PMU_CPU_VDD_MAP_SIZE ((1400000 - 600000) / 10000 + 1)
+static struct voltage_reg_map pmu_cpu_vdd_map[PMU_CPU_VDD_MAP_SIZE];
+static inline void fill_reg_map(void)
+{
+       int i;
+       for (i = 0; i < PMU_CPU_VDD_MAP_SIZE; i++) {
+               pmu_cpu_vdd_map[i].reg_value = i + 0x0b;
+               pmu_cpu_vdd_map[i].reg_uV = 600000 + 10000 * i;
+       }
+}
+
+/* FIXME: Needed? */
+#ifdef CONFIG_ARCH_TEGRA_HAS_CL_DVFS
+static struct tegra_cl_dvfs_platform_data vcm30_t124_cl_dvfs_data = {
+       .dfll_clk_name = "dfll_cpu",
+       .pmu_if = TEGRA_CL_DVFS_PMU_I2C,
+       .u.pmu_i2c = {
+               .fs_rate = 400000,
+               .slave_addr = 0x3a,
+               .reg = 0x07,
+       },
+       .vdd_map = pmu_cpu_vdd_map,
+       .vdd_map_size = PMU_CPU_VDD_MAP_SIZE,
+
+       .cfg_param = &vcm30_t124_cl_dvfs_param,
+};
+
+static int __init vcm30_t124_cl_dvfs_init(void)
+{
+       fill_reg_map();
+#if 0
+       if (tegra_revision < TEGRA_REVISION_A02)
+               vcm30_t124_cl_dvfs_data.out_quiet_then_disable = true;
+#endif
+       tegra_cl_dvfs_device.dev.platform_data = &vcm30_t124_cl_dvfs_data;
+       platform_device_register(&tegra_cl_dvfs_device);
+
+       return 0;
+}
+#endif
+
+static int __init vcm30_t124_max77663_regulator_init(void)
+{
+       void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE);
+       u32 pmc_ctrl;
+
+       /* configure the power management controller to trigger PMU
+        * interrupts when low */
+       pmc_ctrl = readl(pmc + PMC_CTRL);
+       writel(pmc_ctrl | PMC_CTRL_INTR_LOW, pmc + PMC_CTRL);
+
+       i2c_register_board_info(4, max77663_regulators,
+                               ARRAY_SIZE(max77663_regulators));
+
+       return 0;
+}
+
+int __init vcm30_t124_regulator_init(void)
+{
+#ifdef CONFIG_ARCH_TEGRA_HAS_CL_DVFS
+       vcm30_t124_cl_dvfs_init();
+#endif
+       vcm30_t124_max77663_regulator_init();
+
+       i2c_register_board_info(4, max15569_vddcpu_boardinfo, 1);
+       i2c_register_board_info(4, max15569_vddcore_boardinfo, 1);
+       i2c_register_board_info(4, max15569_vddgpu_boardinfo, 1);
+       return 0;
+}
+
+int __init vcm30_t124_suspend_init(void)
+{
+       tegra_init_suspend(&vcm30_t124_suspend_data);
+       return 0;
+}
+
+/* FIXME: Should this be called? */
+int __init vcm30_t124_edp_init(void)
+{
+       unsigned int regulator_mA;
+
+       regulator_mA = get_maximum_cpu_current_supported();
+       if (!regulator_mA)
+               regulator_mA = 14000;
+
+       pr_info("%s: CPU regulator %d mA\n", __func__, regulator_mA);
+       tegra_init_cpu_edp_limits(regulator_mA);
+
+       regulator_mA = get_maximum_core_current_supported();
+       if (!regulator_mA)
+               regulator_mA = 14000;
+
+       pr_info("%s: core regulator %d mA\n", __func__, regulator_mA);
+       tegra_init_core_edp_limits(regulator_mA);
+
+       return 0;
+}
+
+static struct thermal_zone_params soctherm_tzp = {
+       .governor_name = "pid_thermal_gov",
+};
+
+static struct tegra_tsensor_pmu_data tpdata_palmas = {
+       .reset_tegra = 1,
+       .pmu_16bit_ops = 0,
+       .controller_type = 0,
+       .pmu_i2c_addr = 0x58,
+       .i2c_controller_id = 4,
+       .poweroff_reg_addr = 0xa0,
+       .poweroff_reg_data = 0x0,
+};
+
+static struct tegra_tsensor_pmu_data tpdata_max77663 = {
+       .reset_tegra = 1,
+       .pmu_16bit_ops = 0,
+       .controller_type = 0,
+       .pmu_i2c_addr = 0x3c,
+       .i2c_controller_id = 4,
+       .poweroff_reg_addr = 0x41,
+       .poweroff_reg_data = 0x80,
+};
+
+static struct soctherm_platform_data vcm30_t124_soctherm_data = {
+       .therm = {
+               [THERM_CPU] = {
+                       .zone_enable = true,
+                       .passive_delay = 1000,
+                       .hotspot_offset = 6000,
+                       .num_trips = 3,
+                       .trips = {
+                               {
+                                       .cdev_type = "tegra-balanced",
+                                       .trip_temp = 90000,
+                                       .trip_type = THERMAL_TRIP_PASSIVE,
+                                       .upper = THERMAL_NO_LIMIT,
+                                       .lower = THERMAL_NO_LIMIT,
+                               },
+                               {
+                                       .cdev_type = "tegra-heavy",
+                                       .trip_temp = 100000,
+                                       .trip_type = THERMAL_TRIP_HOT,
+                                       .upper = THERMAL_NO_LIMIT,
+                                       .lower = THERMAL_NO_LIMIT,
+                               },
+                               {
+                                       .cdev_type = "tegra-shutdown",
+                                       .trip_temp = 102000,
+                                       .trip_type = THERMAL_TRIP_CRITICAL,
+                                       .upper = THERMAL_NO_LIMIT,
+                                       .lower = THERMAL_NO_LIMIT,
+                               },
+                       },
+                       .tzp = &soctherm_tzp,
+               },
+               [THERM_GPU] = {
+                       .zone_enable = true,
+                       .passive_delay = 1000,
+                       .hotspot_offset = 6000,
+                       .num_trips = 3,
+                       .trips = {
+                               {
+                                       .cdev_type = "tegra-balanced",
+                                       .trip_temp = 90000,
+                                       .trip_type = THERMAL_TRIP_PASSIVE,
+                                       .upper = THERMAL_NO_LIMIT,
+                                       .lower = THERMAL_NO_LIMIT,
+                               },
+                               {
+                                       .cdev_type = "tegra-heavy",
+                                       .trip_temp = 100000,
+                                       .trip_type = THERMAL_TRIP_HOT,
+                                       .upper = THERMAL_NO_LIMIT,
+                                       .lower = THERMAL_NO_LIMIT,
+                               },
+                               {
+                                       .cdev_type = "tegra-shutdown",
+                                       .trip_temp = 102000,
+                                       .trip_type = THERMAL_TRIP_CRITICAL,
+                                       .upper = THERMAL_NO_LIMIT,
+                                       .lower = THERMAL_NO_LIMIT,
+                               },
+                       },
+                       .tzp = &soctherm_tzp,
+               },
+               [THERM_PLL] = {
+                       .zone_enable = true,
+               },
+       },
+       .throttle = {
+               [THROTTLE_HEAVY] = {
+                       .priority = 100,
+                       .devs = {
+                               [THROTTLE_DEV_CPU] = {
+                                       .enable = true,
+                                       .depth = 80,
+                               },
+                       },
+               },
+       },
+       .tshut_pmu_trip_data = &tpdata_palmas,
+};
+
+/* FIXME: Needed? */
+int __init vcm30_t124_soctherm_init(void)
+{
+
+       vcm30_t124_soctherm_data.tshut_pmu_trip_data = &tpdata_max77663;
+
+       tegra_platform_edp_init(vcm30_t124_soctherm_data.therm[THERM_CPU].trips,
+                       &vcm30_t124_soctherm_data.therm[THERM_CPU].num_trips,
+                       8000); /* edp temperature margin */
+       tegra_add_tj_trips(vcm30_t124_soctherm_data.therm[THERM_CPU].trips,
+                       &vcm30_t124_soctherm_data.therm[THERM_CPU].num_trips);
+       /*tegra_add_vc_trips(vcm30_t124_soctherm_data.therm[THERM_CPU].trips,
+                       &vcm30_t124_soctherm_data.therm[THERM_CPU].num_trips);
+*/
+       return tegra11_soctherm_init(&vcm30_t124_soctherm_data);
+}
diff --git a/arch/arm/mach-tegra/board-vcm30_t124-sdhci.c b/arch/arm/mach-tegra/board-vcm30_t124-sdhci.c
new file mode 100644 (file)
index 0000000..601c897
--- /dev/null
@@ -0,0 +1,217 @@
+/*
+ * arch/arm/mach-tegra/board-vcm30_t124-sdhci.c
+ *
+ * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <linux/resource.h>
+#include <linux/platform_device.h>
+#include <linux/wlan_plat.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/clk.h>
+#include <linux/err.h>
+#include <linux/mmc/host.h>
+#include <linux/platform_data/mmc-sdhci-tegra.h>
+
+#include <asm/mach-types.h>
+#include <mach/irqs.h>
+#include <mach/iomap.h>
+#include <mach/sdhci.h>
+#include <mach/board_id.h>
+#include <linux/i2c.h>
+
+#include "gpio-names.h"
+#include "board.h"
+#include "board-vcm30_t124.h"
+#include "devices.h"
+
+static void (*wifi_status_cb) (int card_present, void *dev_id);
+static void *wifi_status_cb_devid;
+static int
+vcm30_t124_wifi_status_register(void (*callback) (int, void *), void *);
+static int vcm30_t124_wifi_reset(int on);
+static int vcm30_t124_wifi_power(int on);
+static int vcm30_t124_wifi_set_carddetect(int val);
+
+static struct wifi_platform_data vcm30_t124_wifi_control = {
+       .set_power = vcm30_t124_wifi_power,
+       .set_reset = vcm30_t124_wifi_reset,
+       .set_carddetect = vcm30_t124_wifi_set_carddetect,
+};
+
+static struct platform_device broadcom_wifi_device = {
+       .name = "bcm4329_wlan",
+       .id = 1,
+       .dev = {
+               .platform_data = &vcm30_t124_wifi_control,
+       },
+};
+
+#ifdef CONFIG_MMC_EMBEDDED_SDIO
+static struct embedded_sdio_data embedded_sdio_data1 = {
+       .cccr = {
+               .sdio_vsn = 2,
+               .multi_block = 1,
+               .low_speed = 0,
+               .wide_bus = 0,
+               .high_power = 1,
+               .high_speed = 1,
+       },
+       .cis = {
+               .vendor = 0x02d0,
+               .device = 0x4329,
+       },
+};
+#endif
+
+static struct tegra_sdhci_platform_data tegra_sdhci_platform_data1 = {
+       .mmc_data = {
+               .register_status_notify = vcm30_t124_wifi_status_register,
+#ifdef CONFIG_MMC_EMBEDDED_SDIO
+               .embedded_sdio = &embedded_sdio_data1,
+#endif
+               .built_in = 0,
+               .ocr_mask = MMC_OCR_1V8_MASK,
+       },
+#ifndef CONFIG_MMC_EMBEDDED_SDIO
+       .pm_flags = MMC_PM_KEEP_POWER,
+#endif
+       .cd_gpio = -1,
+       .wp_gpio = -1,
+       .power_gpio = -1,
+       .tap_delay = 0x0F,
+       .ddr_clk_limit = 30000000,
+       .is_8bit = false,
+};
+
+static struct tegra_sdhci_platform_data tegra_sdhci_platform_data2 = {
+       .cd_gpio = -1,
+       .wp_gpio = -1,
+       .power_gpio = -1,
+       .is_8bit = false,
+       .tap_delay = 0x06,
+       .max_clk_limit = 52000000,
+       .ddr_clk_limit = 30000000,
+       .uhs_mask = MMC_UHS_MASK_DDR50,
+       .mmc_data = {
+               .built_in = 1,
+       }
+};
+
+static struct tegra_sdhci_platform_data tegra_sdhci_platform_data3 = {
+       .cd_gpio = TEGRA_GPIO_PQ5,
+       .wp_gpio = TEGRA_GPIO_PQ4,
+       .power_gpio = -1,
+       .is_8bit = false,
+       /* WAR: Operating SDR104 cards at upto 104 MHz, as signal errors are
+        * seen when they are operated at any higher frequency.
+        */
+       .max_clk_limit = 104000000,
+       .ddr_clk_limit = 30000000,
+       .mmc_data = {
+               .ocr_mask = MMC_OCR_2V8_MASK,
+       },
+       .cd_wakeup_incapable = true,
+};
+
+static struct tegra_sdhci_platform_data tegra_sdhci_platform_data4 = {
+       .cd_gpio = -1,
+       .wp_gpio = -1,
+       .power_gpio = -1,
+       .is_8bit = true,
+       .tap_delay = 0x06,
+       .max_clk_limit = 52000000,
+       .ddr_clk_limit = 51000000,
+       .uhs_mask = MMC_UHS_MASK_DDR50,
+};
+
+static int vcm30_t124_wifi_status_register(
+                       void (*callback) (int card_present, void *dev_id),
+                       void *dev_id)
+{
+       if (wifi_status_cb)
+               return -EBUSY;
+       wifi_status_cb = callback;
+       wifi_status_cb_devid = dev_id;
+       return 0;
+}
+
+static int vcm30_t124_wifi_set_carddetect(int val)
+{
+
+       if (wifi_status_cb)
+               wifi_status_cb(val, wifi_status_cb_devid);
+       else
+               pr_warn("%s: Nobody to notify\n", __func__);
+
+       return 0;
+}
+
+static int vcm30_t124_wifi_power(int on)
+{
+       gpio_set_value_cansleep(MISCIO_WF_EN_GPIO, on);
+       mdelay(100);
+       gpio_set_value_cansleep(MISCIO_WF_RST_GPIO, on);
+       mdelay(200);
+
+       return 0;
+}
+
+static int vcm30_t124_wifi_reset(int on)
+{
+       /*
+        * FIXME: Implement wifi reset
+        */
+       return 0;
+}
+
+int __init vcm30_t124_wifi_init(void)
+{
+       gpio_request(MISCIO_WF_EN_GPIO, "wifi_en");
+       gpio_request(MISCIO_WF_RST_GPIO, "wifi_rst");
+
+#ifdef CONFIG_TEGRA_PREPOWER_WIFI
+       gpio_direction_output(MISCIO_WF_EN_GPIO, 1);
+       gpio_direction_output(MISCIO_WF_RST_GPIO, 1);
+#else
+       gpio_direction_output(MISCIO_WF_EN_GPIO, 0);
+       gpio_direction_output(MISCIO_WF_RST_GPIO, 0);
+#endif
+
+       platform_device_register(&broadcom_wifi_device);
+       return 0;
+}
+
+int __init vcm30_t124_sdhci_init(void)
+{
+       int is_e1860 = 0;
+       tegra_sdhci_device1.dev.platform_data = &tegra_sdhci_platform_data1;
+       tegra_sdhci_device2.dev.platform_data = &tegra_sdhci_platform_data2;
+       tegra_sdhci_device3.dev.platform_data = &tegra_sdhci_platform_data3;
+       tegra_sdhci_device4.dev.platform_data = &tegra_sdhci_platform_data4;
+
+       is_e1860 = tegra_is_board(NULL, "61860", NULL, NULL, NULL);
+       if (is_e1860)
+               tegra_sdhci_platform_data3.mmc_data.ocr_mask = MMC_OCR_3V2_MASK;
+
+       platform_device_register(&tegra_sdhci_device1);
+       platform_device_register(&tegra_sdhci_device2);
+       platform_device_register(&tegra_sdhci_device3);
+       platform_device_register(&tegra_sdhci_device4);
+
+       return 0;
+}
diff --git a/arch/arm/mach-tegra/board-vcm30_t124.c b/arch/arm/mach-tegra/board-vcm30_t124.c
new file mode 100644 (file)
index 0000000..df90c26
--- /dev/null
@@ -0,0 +1,525 @@
+/*
+ * arch/arm/mach-tegra/board-vcm30_t124.c
+ *
+ * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/platform_device.h>
+#include <linux/i2c-tegra.h>
+#include <linux/i2c.h>
+#include <linux/platform_data/serial-tegra.h>
+#include <linux/platform_data/tegra_usb.h>
+#include <linux/spi/spi-tegra.h>
+#include <linux/of_platform.h>
+
+#include <mach/tegra_asoc_pdata.h>
+#include <mach/pci.h>
+#include <mach/iomap.h>
+#include <mach/io_dpd.h>
+#include <asm/mach/arch.h>
+#include <mach/isomgr.h>
+#include <asm/hardware/gic.h>
+
+#include "board.h"
+#include "clock.h"
+#include "board-vcm30_t124.h"
+#include "devices.h"
+#include "board-common.h"
+#include "common.h"
+
+#include <asm/mach-types.h>
+
+static struct board_info board_info, display_board_info;
+
+static __initdata struct tegra_clk_init_table vcm30_t124_clk_init_table[] = {
+       /* name         parent          rate            enabled (always on)*/
+       { "pll_m",      NULL,           0,              false},
+       { "hda",        "pll_p",        108000000,      false},
+       { "hda2codec_2x", "pll_p",      48000000,       false},
+       { "pwm",        "pll_p",        3187500,        false},
+       { "i2s1",       "pll_a_out0",   0,              false},
+       { "i2s3",       "pll_a_out0",   0,              false},
+       { "i2s4",       "pll_a_out0",   0,              false},
+       { "spdif_out",  "pll_a_out0",   0,              false},
+       { "d_audio",    "clk_m",        12000000,       false},
+       { "dam0",       "clk_m",        12000000,       false},
+       { "dam1",       "clk_m",        12000000,       false},
+       { "dam2",       "clk_m",        12000000,       false},
+       { "audio1",     "i2s1_sync",    0,              false},
+       { "audio3",     "i2s3_sync",    0,              false},
+       { "vi_sensor",  "pll_p",        150000000,      false},
+       { "vi_sensor2", "pll_p",        150000000,      false},
+       { "cilab",      "pll_p",        150000000,      false},
+       { "cilcd",      "pll_p",        150000000,      false},
+       { "cile",       "pll_p",        150000000,      false},
+       { "i2c1",       "pll_p",        3200000,        false},
+       { "i2c2",       "pll_p",        3200000,        false},
+       { "i2c3",       "pll_p",        3200000,        false},
+       { "i2c4",       "pll_p",        3200000,        false},
+       { "i2c5",       "pll_p",        3200000,        false},
+       { "sbc1",       "pll_p",        25000000,       false},
+       { "sbc2",       "pll_p",        25000000,       false},
+       { "sbc3",       "pll_p",        25000000,       false},
+       { "sbc4",       "pll_p",        25000000,       false},
+       { "sbc5",       "pll_p",        25000000,       false},
+       { "sbc6",       "pll_p",        25000000,       false},
+       { "uarta",      "pll_p",        408000000,      false},
+       { "uartb",      "pll_p",        408000000,      false},
+       { "uartc",      "pll_p",        408000000,      false},
+       { "uartd",      "pll_p",        408000000,      false},
+       { NULL,         NULL,           0,              0},
+};
+
+static struct tegra_i2c_platform_data vcm30_t124_i2c1_platform_data = {
+       .bus_clk_rate   = 100000,
+       .scl_gpio       = TEGRA_GPIO_I2C1_SCL,
+       .sda_gpio       = TEGRA_GPIO_I2C1_SDA,
+};
+
+static struct tegra_i2c_platform_data vcm30_t124_i2c2_platform_data = {
+       .bus_clk_rate   = 100000,
+       .is_clkon_always = true,
+       .scl_gpio       = TEGRA_GPIO_I2C2_SCL,
+       .sda_gpio       = TEGRA_GPIO_I2C2_SDA,
+};
+
+static struct tegra_i2c_platform_data vcm30_t124_i2c3_platform_data = {
+       .bus_clk_rate   = 400000,
+       .scl_gpio       = TEGRA_GPIO_I2C3_SCL,
+       .sda_gpio       = TEGRA_GPIO_I2C3_SDA,
+};
+
+static struct tegra_i2c_platform_data vcm30_t124_i2c4_platform_data = {
+       .bus_clk_rate   = 10000,
+       .scl_gpio       = TEGRA_GPIO_I2C4_SCL,
+       .sda_gpio       = TEGRA_GPIO_I2C4_SDA,
+};
+
+static struct tegra_i2c_platform_data vcm30_t124_i2c5_platform_data = {
+       .bus_clk_rate   = 400000,
+       .scl_gpio       = TEGRA_GPIO_I2C5_SCL,
+       .sda_gpio       = TEGRA_GPIO_I2C5_SDA,
+};
+
+static void vcm30_t124_i2c_init(void)
+{
+       struct board_info board_info;
+       tegra_get_board_info(&board_info);
+       /* T124 does not use device tree as of now */
+       tegra12_i2c_device1.dev.platform_data = &vcm30_t124_i2c1_platform_data;
+       tegra12_i2c_device2.dev.platform_data = &vcm30_t124_i2c2_platform_data;
+       tegra12_i2c_device3.dev.platform_data = &vcm30_t124_i2c3_platform_data;
+       tegra12_i2c_device4.dev.platform_data = &vcm30_t124_i2c4_platform_data;
+       tegra12_i2c_device5.dev.platform_data = &vcm30_t124_i2c5_platform_data;
+
+       platform_device_register(&tegra12_i2c_device5);
+       platform_device_register(&tegra12_i2c_device4);
+       platform_device_register(&tegra12_i2c_device3);
+       platform_device_register(&tegra12_i2c_device2);
+       platform_device_register(&tegra12_i2c_device1);
+}
+
+/* Register debug UART in old fashion and use DT for all others */
+#ifndef CONFIG_USE_OF
+static struct platform_device *vcm30_t124_uart_devices[] __initdata = {
+       &tegra_uarta_device,
+       &tegra_uartb_device,
+       &tegra_uartd_device,
+};
+
+static struct tegra_serial_platform_data vcm30_t124_uarta_pdata = {
+       .dma_req_selector = 8,
+       .modem_interrupt = false,
+};
+
+static struct tegra_serial_platform_data vcm30_t124_uartb_pdata = {
+       .dma_req_selector = 9,
+       .modem_interrupt = false,
+};
+
+static struct tegra_serial_platform_data vcm30_t124_uartd_pdata = {
+       .dma_req_selector = 19,
+       .modem_interrupt = false,
+};
+#endif
+
+static struct tegra_serial_platform_data vcm30_t124_uartc_pdata = {
+       .dma_req_selector = 10,
+       .modem_interrupt = false,
+};
+
+static void __init vcm30_t124_uart_init(void)
+{
+       int debug_port_id;
+
+#ifndef CONFIG_USE_OF
+       tegra_uarta_device.dev.platform_data = &vcm30_t124_uarta_pdata;
+       tegra_uartb_device.dev.platform_data = &vcm30_t124_uartb_pdata;
+       tegra_uartd_device.dev.platform_data = &vcm30_t124_uartd_pdata;
+       platform_add_devices(vcm30_t124_uart_devices,
+                       ARRAY_SIZE(vcm30_t124_uart_devices));
+#endif
+       tegra_uartc_device.dev.platform_data = &vcm30_t124_uartc_pdata;
+       if (!is_tegra_debug_uartport_hs()) {
+               debug_port_id = uart_console_debug_init(2);
+               if (debug_port_id < 0)
+                       return;
+
+               platform_device_register(uart_console_debug_device);
+       } else {
+               tegra_uartc_device.dev.platform_data = &vcm30_t124_uartc_pdata;
+               platform_device_register(&tegra_uartc_device);
+       }
+
+}
+
+static struct resource tegra_rtc_resources[] = {
+       [0] = {
+               .start = TEGRA_RTC_BASE,
+               .end = TEGRA_RTC_BASE + TEGRA_RTC_SIZE - 1,
+               .flags = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start = INT_RTC,
+               .end = INT_RTC,
+               .flags = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device tegra_rtc_device = {
+       .name = "tegra_rtc",
+       .id   = -1,
+       .resource = tegra_rtc_resources,
+       .num_resources = ARRAY_SIZE(tegra_rtc_resources),
+};
+
+static struct tegra_pci_platform_data vcm30_t124_pcie_platform_data = {
+       .port_status[0] = 1,
+       .port_status[1] = 1,
+       .use_dock_detect        = 1,
+       .gpio   = TEGRA_GPIO_PO1,
+       .gpio_x1_slot   = PMU_TCA6416_GPIO(12),
+};
+
+static void vcm30_t124_pcie_init(void)
+{
+/* FIXME: Check this for VCM30_T124 */
+#if 0
+       struct board_info board_info;
+       /* root port 1(x1 slot) is supported only on of ERS-S board */
+       laguna_pcie_platform_data.port_status[1] = 0;
+
+       tegra_pci_device.dev.platform_data = &laguna_pcie_platform_data;
+       platform_device_register(&tegra_pci_device);
+#endif
+}
+
+/* FIXME: Check which devices are needed from the below list */
+static struct platform_device *vcm30_t124_devices[] __initdata = {
+       &tegra_pmu_device,
+       &tegra_rtc_device,
+       &tegra_udc_device,
+#if defined(CONFIG_TEGRA_AVP)
+       &tegra_avp_device,
+#endif
+#if defined(CONFIG_CRYPTO_DEV_TEGRA_SE)
+       &tegra12_se_device,
+#endif
+       &tegra_ahub_device,
+       &tegra_dam_device0,
+       &tegra_dam_device1,
+       &tegra_dam_device2,
+       &tegra_i2s_device1,
+       &tegra_i2s_device3,
+       &tegra_i2s_device4,
+       &tegra_spdif_device,
+       &spdif_dit_device,
+       &bluetooth_dit_device,
+       &tegra_hda_device,
+};
+
+static struct tegra_usb_platform_data tegra_udc_pdata = {
+       .port_otg = true,
+       .has_hostpc = true,
+       .phy_intf = TEGRA_USB_PHY_INTF_UTMI,
+       .op_mode = TEGRA_USB_OPMODE_DEVICE,
+       .u_data.dev = {
+               .vbus_pmu_irq = 0,
+               .vbus_gpio = -1,
+               .charging_supported = false,
+               .remote_wakeup_supported = false,
+       },
+       .u_cfg.utmi = {
+               .hssync_start_delay = 0,
+               .elastic_limit = 16,
+               .idle_wait_delay = 17,
+               .term_range_adj = 6,
+               .xcvr_setup = 8,
+               .xcvr_lsfslew = 2,
+               .xcvr_lsrslew = 2,
+               .xcvr_setup_offset = 0,
+               .xcvr_use_fuses = 1,
+       },
+};
+
+static struct tegra_usb_platform_data tegra_ehci1_utmi_pdata = {
+       .port_otg = true,
+       .has_hostpc = true,
+       .unaligned_dma_buf_supported = true,
+       .phy_intf = TEGRA_USB_PHY_INTF_UTMI,
+       .op_mode = TEGRA_USB_OPMODE_HOST,
+       .u_data.host = {
+               .vbus_gpio = -1,
+               .hot_plug = false,
+               .remote_wakeup_supported = true,
+               .power_off_on_suspend = true,
+       },
+       .u_cfg.utmi = {
+               .hssync_start_delay = 0,
+               .elastic_limit = 16,
+               .idle_wait_delay = 17,
+               .term_range_adj = 6,
+               .xcvr_setup = 15,
+               .xcvr_lsfslew = 2,
+               .xcvr_lsrslew = 2,
+               .xcvr_setup_offset = 0,
+               .xcvr_use_fuses = 1,
+               .vbus_oc_map = 0x4,
+       },
+};
+
+static struct tegra_usb_platform_data tegra_ehci2_utmi_pdata = {
+       .port_otg = false,
+       .has_hostpc = true,
+       .unaligned_dma_buf_supported = true,
+       .phy_intf = TEGRA_USB_PHY_INTF_UTMI,
+       .op_mode = TEGRA_USB_OPMODE_HOST,
+       .u_data.host = {
+               /* FIXME: Set this only for E1855. */
+               .vbus_gpio = TEGRA_GPIO_PN5,
+               .hot_plug = false,
+               .remote_wakeup_supported = true,
+               .power_off_on_suspend = true,
+       },
+       .u_cfg.utmi = {
+               .hssync_start_delay = 0,
+               .elastic_limit = 16,
+               .idle_wait_delay = 17,
+               .term_range_adj = 6,
+               .xcvr_setup = 8,
+               .xcvr_lsfslew = 2,
+               .xcvr_lsrslew = 2,
+               .xcvr_setup_offset = 0,
+               .xcvr_use_fuses = 1,
+               .vbus_oc_map = 0x5,
+       },
+};
+
+static struct tegra_usb_platform_data tegra_ehci3_utmi_pdata = {
+       .port_otg = false,
+       .has_hostpc = true,
+       .unaligned_dma_buf_supported = true,
+       .phy_intf = TEGRA_USB_PHY_INTF_UTMI,
+       .op_mode = TEGRA_USB_OPMODE_HOST,
+       .u_data.host = {
+               .vbus_gpio = -1,
+               .hot_plug = false,
+               .remote_wakeup_supported = true,
+               .power_off_on_suspend = true,
+       },
+       .u_cfg.utmi = {
+       .hssync_start_delay = 0,
+               .elastic_limit = 16,
+               .idle_wait_delay = 17,
+               .term_range_adj = 6,
+               .xcvr_setup = 8,
+               .xcvr_lsfslew = 2,
+               .xcvr_lsrslew = 2,
+               .xcvr_setup_offset = 0,
+               .xcvr_use_fuses = 1,
+               .vbus_oc_map = 0x5,
+       },
+};
+
+static struct tegra_usb_otg_data tegra_otg_pdata = {
+       .ehci_device = &tegra_ehci1_device,
+       .ehci_pdata = &tegra_ehci1_utmi_pdata,
+};
+
+static void vcm30_t124_usb_init(void)
+{
+       int usb_port_owner_info = tegra_get_usb_port_owner_info();
+
+       if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) {
+               tegra_otg_device.dev.platform_data = &tegra_otg_pdata;
+               platform_device_register(&tegra_otg_device);
+               /* Setup the udc platform data */
+               tegra_udc_device.dev.platform_data = &tegra_udc_pdata;
+       }
+
+       if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) {
+               tegra_ehci2_device.dev.platform_data = &tegra_ehci2_utmi_pdata;
+               platform_device_register(&tegra_ehci2_device);
+       }
+
+       if (!(usb_port_owner_info & UTMI3_PORT_OWNER_XUSB)) {
+               tegra_ehci3_device.dev.platform_data = &tegra_ehci3_utmi_pdata;
+               platform_device_register(&tegra_ehci3_device);
+       }
+}
+
+#ifndef CONFIG_USE_OF
+static struct platform_device *vcm30_t124_spi_devices[] __initdata = {
+       &tegra11_spi_device1,
+       &tegra11_spi_device4,
+};
+
+static struct tegra_spi_platform_data vcm30_t124_spi1_pdata = {
+       .dma_req_sel            = 15,
+       .spi_max_frequency      = 25000000,
+       .clock_always_on        = false,
+};
+
+static struct tegra_spi_platform_data vcm30_t124_spi4_pdata = {
+       .dma_req_sel            = 18,
+       .spi_max_frequency      = 25000000,
+       .clock_always_on        = false,
+};
+
+static void __init vcm30_t124_spi_init(void)
+{
+       tegra11_spi_device1.dev.platform_data = &vcm30_t124_spi1_pdata;
+       tegra11_spi_device4.dev.platform_data = &vcm30_t124_spi4_pdata;
+       platform_add_devices(vcm30_t124_spi_devices,
+                       ARRAY_SIZE(vcm30_t124_spi_devices));
+}
+#else
+static void __init vcm30_t124_spi_init(void)
+{
+}
+#endif
+
+#ifdef CONFIG_USE_OF
+struct of_dev_auxdata vcm30_t124_auxdata_lookup[] __initdata = {
+       OF_DEV_AUXDATA("nvidia,tegra114-hsuart", TEGRA_UARTA_BASE,
+                               "serial-tegra.0", NULL),
+       OF_DEV_AUXDATA("nvidia,tegra114-hsuart", TEGRA_UARTB_BASE,
+                               "serial-tegra.1", NULL),
+       OF_DEV_AUXDATA("nvidia,tegra114-hsuart", TEGRA_UARTD_BASE,
+                               "serial-tegra.3", NULL),
+       {}
+};
+#endif
+
+static void __init tegra_vcm30_t124_early_init(void)
+{
+       tegra_clk_init_from_table(vcm30_t124_clk_init_table);
+       tegra_clk_verify_parents();
+       tegra_soc_device_init("vcm30_t124");
+}
+
+static void __init tegra_vcm30_t124_late_init(void)
+{
+       struct board_info board_info;
+       tegra_get_board_info(&board_info);
+       pr_info("board_info: id:sku:fab:major:minor = 0x%04x:0x%04x:0x%02x:0x%02x:0x%02x\n",
+               board_info.board_id, board_info.sku,
+               board_info.fab, board_info.major_revision,
+               board_info.minor_revision);
+       platform_device_register(&tegra_pinmux_device);
+       vcm30_t124_pinmux_init();
+       vcm30_t124_usb_init();
+/*     vcm30_t124_xusb_init(); */
+       vcm30_t124_i2c_init();
+       vcm30_t124_spi_init();
+       vcm30_t124_uart_init();
+       platform_add_devices(vcm30_t124_devices,
+                       ARRAY_SIZE(vcm30_t124_devices));
+       tegra_ram_console_debug_init();
+       tegra_io_dpd_init();
+       /* vcm30_t124_sdhci_init(); */
+       vcm30_t124_regulator_init();
+       /* vcm30_t124_suspend_init(); */
+#if 0
+       vcm30_t124_emc_init();
+       vcm30_t124_edp_init();
+#endif
+       isomgr_init();
+       /* vcm30_t124_panel_init(); */
+       /* vcm30_t124_pmon_init(); */
+       tegra_release_bootloader_fb();
+       vcm30_t124_pcie_init();
+#ifdef CONFIG_TEGRA_WDT_RECOVERY
+       tegra_wdt_recovery_init();
+#endif
+       /* FIXME: Required? */
+#if 0
+       tegra_serial_debug_init(TEGRA_UARTD_BASE, INT_WDT_CPU, NULL, -1, -1);
+
+       vcm30_t124_sensors_init();
+       vcm30_t124_soctherm_init();
+#endif
+       tegra_register_fuse();
+}
+
+static void __init vcm30_t124_ramconsole_reserve(unsigned long size)
+{
+       tegra_ram_console_debug_reserve(SZ_1M);
+}
+
+static void __init tegra_vcm30_t124_dt_init(void)
+{
+       tegra_get_board_info(&board_info);
+       tegra_get_display_board_info(&display_board_info);
+
+       tegra_vcm30_t124_early_init();
+#ifdef CONFIG_USE_OF
+       of_platform_populate(NULL,
+               of_default_bus_match_table, vcm30_t124_auxdata_lookup,
+               &platform_bus);
+#endif
+
+       tegra_vcm30_t124_late_init();
+}
+
+static void __init tegra_vcm30_t124_reserve(void)
+{
+#if defined(CONFIG_NVMAP_CONVERT_CARVEOUT_TO_IOVMM)
+       /* 1920*1200*4*2 = 18432000 bytes */
+       tegra_reserve(0, SZ_16M + SZ_2M, SZ_16M);
+#else
+       tegra_reserve(SZ_128M, SZ_16M + SZ_2M, SZ_4M);
+#endif
+       vcm30_t124_ramconsole_reserve(SZ_1M);
+}
+
+static const char * const vcm30_t124_dt_board_compat[] = {
+       "nvidia,vcm30_t124",
+       NULL
+};
+
+DT_MACHINE_START(VCM30_T124, "vcm30_t124")
+       .atag_offset    = 0x100,
+       .smp            = smp_ops(tegra_smp_ops),
+       .map_io         = tegra_map_common_io,
+       .reserve        = tegra_vcm30_t124_reserve,
+       .init_early     = tegra12x_init_early,
+       .init_irq       = tegra_dt_init_irq,
+       .handle_irq     = gic_handle_irq,
+       .timer          = &tegra_sys_timer,
+       .init_machine   = tegra_vcm30_t124_dt_init,
+       .restart        = tegra_assert_system_reset,
+       .dt_compat      = vcm30_t124_dt_board_compat,
+MACHINE_END
diff --git a/arch/arm/mach-tegra/board-vcm30_t124.h b/arch/arm/mach-tegra/board-vcm30_t124.h
new file mode 100644 (file)
index 0000000..cda5a1f
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * arch/arm/mach-tegra/board-vcm30_t124.h
+ *
+ * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _MACH_TEGRA_BOARD_VCM30_T124_H
+#define _MACH_TEGRA_BOARD_VCM30_T124_H
+
+#include <linux/mfd/as3722-reg.h>
+#include <mach/gpio-tegra.h>
+#include <mach/gpio.h>
+#include <mach/irqs.h>
+#include <linux/mfd/max77663-core.h>
+#include "gpio-names.h"
+
+int vcm30_t124_pinmux_init(void);
+int vcm30_t124_panel_init(void);
+int vcm30_t124_sdhci_init(void);
+int vcm30_t124_sensors_init(void);
+int vcm30_t124_regulator_init(void);
+int vcm30_t124_suspend_init(void);
+int vcm30_t124_pmon_init(void);
+
+/* FIXME: Needed? */
+#define AS3722_GPIO_BASE       TEGRA_NR_GPIOS
+#define AS3722_GPIO_END        (AS3722_GPIO_BASE + AS3722_NUM_GPIO)
+
+/* PMU_TCA6416 GPIOs */
+#define PMU_TCA6416_GPIO_BASE   (AS3722_GPIO_END)
+#define PMU_TCA6416_GPIO(x)     (PMU_TCA6416_GPIO_BASE + x)
+#define PMU_TCA6416_NR_GPIOS    18
+
+#define UTMI1_PORT_OWNER_XUSB   0x1
+#define UTMI2_PORT_OWNER_XUSB   0x2
+#define UTMI3_PORT_OWNER_XUSB   0x4
+#define HSIC1_PORT_OWNER_XUSB   0x8
+
+/* FIXME: Confirm these GPIOs */
+/* Audio-related GPIOs */
+#define TEGRA_GPIO_CDC_IRQ     TEGRA_GPIO_PH4
+#define TEGRA_GPIO_HP_DET              TEGRA_GPIO_PR7
+/*LDO_EN signal is required only for RT5639 and not for RT5645,
+on Laguna the LDO_EN signal comes from a GPIO expander and
+this is exposed as a fixed regulator directly handeled from
+machine driver of rt5639 and for ardebeg we use the below tegra
+GPIO, also the GPIO is same for T114 interposer and T124*/
+#define TEGRA_GPIO_LDO_EN      TEGRA_GPIO_PR2
+
+/* I2C related GPIOs */
+#define TEGRA_GPIO_I2C1_SCL    TEGRA_GPIO_PC4
+#define TEGRA_GPIO_I2C1_SDA    TEGRA_GPIO_PC5
+#define TEGRA_GPIO_I2C2_SCL    TEGRA_GPIO_PT5
+#define TEGRA_GPIO_I2C2_SDA    TEGRA_GPIO_PT6
+#define TEGRA_GPIO_I2C3_SCL    TEGRA_GPIO_PK5
+#define TEGRA_GPIO_I2C3_SDA    TEGRA_GPIO_PK6
+#define TEGRA_GPIO_I2C4_SCL    TEGRA_GPIO_PV4
+#define TEGRA_GPIO_I2C4_SDA    TEGRA_GPIO_PV5
+#define TEGRA_GPIO_I2C5_SCL    TEGRA_GPIO_PZ6
+#define TEGRA_GPIO_I2C5_SDA    TEGRA_GPIO_PZ7
+
+/* External peripheral act as gpio */
+#define MAX77663_IRQ_BASE      TEGRA_NR_IRQS
+#define MAX77663_IRQ_END       (MAX77663_IRQ_BASE + MAX77663_IRQ_NR)
+#define MAX77663_GPIO_BASE     TEGRA_NR_GPIOS
+#define MAX77663_GPIO_END       (MAX77663_GPIO_BASE + MAX77663_GPIO_NR)
+
+/* PCA953X - MISC SYSTEM IO */
+#define PCA953X_MISCIO_GPIO_BASE        (MAX77663_GPIO_END + 1)
+#define MISCIO_BT_RST_GPIO              (PCA953X_MISCIO_GPIO_BASE + 0)
+#define MISCIO_GPS_RST_GPIO             (PCA953X_MISCIO_GPIO_BASE + 1)
+#define MISCIO_GPS_EN_GPIO              (PCA953X_MISCIO_GPIO_BASE + 2)
+#define MISCIO_WF_EN_GPIO               (PCA953X_MISCIO_GPIO_BASE + 3)
+#define MISCIO_WF_RST_GPIO              (PCA953X_MISCIO_GPIO_BASE + 4)
+#define MISCIO_BT_EN_GPIO               (PCA953X_MISCIO_GPIO_BASE + 5)
+/* GPIO6 is not used */
+#define MISCIO_NOT_USED0                (PCA953X_MISCIO_GPIO_BASE + 6)
+#define MISCIO_BT_WAKEUP_GPIO           (PCA953X_MISCIO_GPIO_BASE + 7)
+#define MISCIO_FAN_SEL_GPIO             (PCA953X_MISCIO_GPIO_BASE + 8)
+#define MISCIO_EN_MISC_BUF_GPIO         (PCA953X_MISCIO_GPIO_BASE + 9)
+#define MISCIO_EN_MSATA_GPIO            (PCA953X_MISCIO_GPIO_BASE + 10)
+#define MISCIO_EN_SDCARD_GPIO           (PCA953X_MISCIO_GPIO_BASE + 11)
+/* GPIO12 is not used */
+#define MISCIO_NOT_USED1                (PCA953X_MISCIO_GPIO_BASE + 12)
+#define MISCIO_ABB_RST_GPIO             (PCA953X_MISCIO_GPIO_BASE + 13)
+#define MISCIO_USER_LED2_GPIO           (PCA953X_MISCIO_GPIO_BASE + 14)
+#define MISCIO_USER_LED1_GPIO           (PCA953X_MISCIO_GPIO_BASE + 15)
+#define PCA953X_MISCIO_GPIO_END         (PCA953X_MISCIO_GPIO_BASE + 16)
+
+/* PCA953X I2C IO expander bus addresses */
+#define PCA953X_MISCIO_ADDR             0x75
+
+#endif
index e739d92..4068225 100644 (file)
@@ -1009,3 +1009,4 @@ eukrea_cpuimx28sd MACH_EUKREA_CPUIMX28SD  EUKREA_CPUIMX28SD       4573
 domotab                        MACH_DOMOTAB            DOMOTAB                 4574
 pfla03                 MACH_PFLA03             PFLA03                  4575
 ardbeg                 MACH_ARDBEG             ARDBEG                  4602
+vcm30_t124             MACH_VCM30_T124         VCM30_T124              4616