arm: tegra: enterprise: Add support for M7400 modem.
Raj Jayaraman [Fri, 14 Oct 2011 20:50:36 +0000 (13:50 -0700)]
Bug 878736
Bug 886459

(cherry picked from commit b840e235505829d7e11f2a984fb39d34bfb8f8d9)
Signed-off-by: Raj Jayaraman <rjayaraman@nvidia.com>

Change-Id: I08e48d03eced6e24f2b005d6f6a73cd4fec5c368
Reviewed-on: http://git-master/r/68295
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>

Rebase-Id: Rc2d93a25dcd833ec885ac9acc584a6a7f86fc82b

arch/arm/mach-tegra/board-enterprise-pinmux.c
arch/arm/mach-tegra/board-enterprise.c
arch/arm/mach-tegra/board-enterprise.h

index d3760a8..e887b28 100644 (file)
@@ -255,6 +255,7 @@ static __initdata struct tegra_pingroup_config enterprise_pinmux[] = {
        DEFAULT_PINMUX(GPIO_PU1,        UARTA,           NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(GPIO_PU2,        UARTA,           NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(GPIO_PU3,        UARTA,           NORMAL,    NORMAL,     OUTPUT),
+       DEFAULT_PINMUX(GPIO_PU4,        PWM1,            NORMAL,    NORMAL,     OUTPUT),
        DEFAULT_PINMUX(GPIO_PU5,        PWM2,            NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(GPIO_PU6,        PWM3,            NORMAL,    NORMAL,     OUTPUT),
        DEFAULT_PINMUX(DAP4_FS,         I2S3,            NORMAL,    NORMAL,     INPUT),
@@ -365,7 +366,6 @@ static __initdata struct tegra_pingroup_config enterprise_unused_pinmux[] = {
        DEFAULT_PINMUX(GPIO_PBB4,      VGP4,             PULL_DOWN,    TRISTATE,  OUTPUT),
        DEFAULT_PINMUX(GPIO_PBB5,      VGP5,             PULL_DOWN,    TRISTATE,  OUTPUT),
        DEFAULT_PINMUX(GPIO_PBB6,      VGP6,             PULL_DOWN,    TRISTATE,  OUTPUT),
-       DEFAULT_PINMUX(GPIO_PU4,        PWM1,            PULL_DOWN,    TRISTATE,  OUTPUT),
        DEFAULT_PINMUX(GMI_AD0,         GMI,             NORMAL,       TRISTATE,  OUTPUT),
        DEFAULT_PINMUX(GMI_AD1,         GMI,             NORMAL,       TRISTATE,  OUTPUT),
        DEFAULT_PINMUX(GMI_AD2,         GMI,             NORMAL,       TRISTATE,  OUTPUT),
@@ -444,7 +444,6 @@ static __initdata struct pin_info_low_power_mode enterprise_unused_gpio_pins[] =
        PIN_GPIO_LPM("GPIO_PBB4",    TEGRA_GPIO_PBB4,  0, 0),
        PIN_GPIO_LPM("GPIO_PBB5",    TEGRA_GPIO_PBB5,  0, 0),
        PIN_GPIO_LPM("GPIO_PBB6",    TEGRA_GPIO_PBB6,  0, 0),
-       PIN_GPIO_LPM("GPIO_PU4",     TEGRA_GPIO_PU4,  0, 0),
        PIN_GPIO_LPM("GMI_AD0",      TEGRA_GPIO_PG0,  0, 0),
        PIN_GPIO_LPM("GMI_AD1",      TEGRA_GPIO_PG1,  0, 0),
        PIN_GPIO_LPM("GMI_AD2",      TEGRA_GPIO_PG2,  0, 0),
index 1da70dc..e91a8a9 100644 (file)
@@ -53,7 +53,7 @@
 #include <mach/i2s.h>
 #include <mach/tegra_max98088_pdata.h>
 #include <mach/thermal.h>
-
+#include <mach/tegra-bb-power.h>
 #include "board.h"
 #include "clock.h"
 #include "board-enterprise.h"
@@ -856,15 +856,44 @@ static struct platform_device tegra_baseband_power2_device = {
        },
 };
 
+#ifdef CONFIG_TEGRA_BB_M7400
+static union tegra_bb_gpio_id m7400_gpio_id = {
+       .m7400 = {
+               .pwr_status = GPIO_BB_RESET,
+               .pwr_on = GPIO_BB_PWRON,
+               .uart_awr = GPIO_BB_APACK,
+               .uart_cwr = GPIO_BB_CPACK,
+               .usb_awr = GPIO_BB_APACK2,
+               .usb_cwr = GPIO_BB_CPACK2,
+               .service = GPIO_BB_RSVD2,
+               .resout2 = GPIO_BB_RSVD1,
+       },
+};
+
+static struct tegra_bb_pdata m7400_pdata = {
+       .id = &m7400_gpio_id,
+       .device = &tegra_ehci2_device,
+       .bb_id = TEGRA_BB_M7400,
+};
+
+static struct platform_device tegra_baseband_m7400_device = {
+       .name = "tegra_baseband_power",
+       .id = -1,
+       .dev = {
+               .platform_data = &m7400_pdata,
+       },
+};
+#endif
+
 static void enterprise_baseband_init(void)
 {
        int modem_id = tegra_get_modem_id();
 
        switch (modem_id) {
-       case 1: /* PH450 ULPI */
+       case TEGRA_BB_PH450: /* PH450 ULPI */
                enterprise_modem_init();
                break;
-       case 2: /* XMM6260 HSIC */
+       case TEGRA_BB_XMM6260: /* XMM6260 HSIC */
                /* xmm baseband - do not switch off phy during suspend */
                tegra_ehci_uhsic_pdata.power_down_on_bus_suspend = 0;
                uhsic_phy_config.postsuspend = enterprise_usb_hsic_postsupend;
@@ -891,6 +920,13 @@ static void enterprise_baseband_init(void)
                platform_device_register(&tegra_baseband_power_device);
                platform_device_register(&tegra_baseband_power2_device);
                break;
+#ifdef CONFIG_TEGRA_BB_M7400
+       case TEGRA_BB_M7400: /* M7400 HSIC */
+               tegra_ehci2_device.dev.platform_data
+                       = &tegra_ehci_uhsic_pdata;
+               platform_device_register(&tegra_baseband_m7400_device);
+               break;
+#endif
        }
 }
 
index 0300b88..3d86fe6 100644 (file)
@@ -114,6 +114,15 @@ void enterprise_bpc_mgmt_init(void);
 
 /* Baseband GPIO addresses */
 
+#define GPIO_BB_RESET          TEGRA_GPIO_PE1
+#define GPIO_BB_PWRON          TEGRA_GPIO_PE0
+#define GPIO_BB_APACK          TEGRA_GPIO_PE3
+#define GPIO_BB_APACK2         TEGRA_GPIO_PE2
+#define GPIO_BB_CPACK          TEGRA_GPIO_PU5
+#define GPIO_BB_CPACK2         TEGRA_GPIO_PV0
+#define GPIO_BB_RSVD1          TEGRA_GPIO_PV1
+#define GPIO_BB_RSVD2          TEGRA_GPIO_PU4
+
 #define BB_GPIO_MDM_PWRON_AP2BB                TEGRA_GPIO_PE0 /* LCD_D0 */
 #define BB_GPIO_RESET_AP2BB            TEGRA_GPIO_PE1 /* LCD_D1 */
 #define BB_GPIO_LCD_PWR1               TEGRA_GPIO_PC1
@@ -139,4 +148,12 @@ void enterprise_bpc_mgmt_init(void);
 #define TEGRA_CUR_MON_RESISTOR         20
 #define TEGRA_CUR_MON_MIN_CORES                2
 
+/* Baseband IDs */
+
+enum tegra_bb_type {
+       TEGRA_BB_PH450 = 1,
+       TEGRA_BB_XMM6260,
+       TEGRA_BB_M7400,
+};
+
 #endif /*_MACH_TEGRA_BOARD_ENTERPRISE_H */