arm: tegra: enterprise: Power down CEC and CLK_32K_OUT/BLINK pads
Daniel Solomon [Wed, 9 Nov 2011 23:31:26 +0000 (15:31 -0800)]
- Disabling HDMI CEC, which is generally not supported by T30.
- Clear APBDEV_PMC_DPD_PADS_ORIDE_0_BLINK at boot time
- Pull down CLK_32K_OUT/BLINK

Bug 898597

Cherry-picked From: http://git-master/r/#change,63408
Signed-off-by: Daniel Solomon <daniels@nvidia.com>

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

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

index 6b10ac4..146631e 100644 (file)
@@ -110,6 +110,18 @@ static __initdata struct tegra_drive_pingroup_config enterprise_drive_pinmux[] =
                .ioreset        = TEGRA_PIN_IO_RESET_DEFAULT,   \
        }
 
+#define CEC_PINMUX(_pingroup, _mux, _pupd, _tri, _io, _lock, _od) \
+       {                                                       \
+               .pingroup       = TEGRA_PINGROUP_##_pingroup,   \
+               .func           = TEGRA_MUX_##_mux,             \
+               .pupd           = TEGRA_PUPD_##_pupd,           \
+               .tristate       = TEGRA_TRI_##_tri,             \
+               .io             = TEGRA_PIN_##_io,              \
+               .lock           = TEGRA_PIN_LOCK_##_lock,       \
+               .od             = TEGRA_PIN_OD_##_od,           \
+               .ioreset        = TEGRA_PIN_IO_RESET_DEFAULT,   \
+       }
+
 #define VI_PINMUX(_pingroup, _mux, _pupd, _tri, _io, _lock, _ioreset) \
        {                                                       \
                .pingroup       = TEGRA_PINGROUP_##_pingroup,   \
@@ -276,7 +288,7 @@ static __initdata struct tegra_pingroup_config enterprise_pinmux[] = {
        DEFAULT_PINMUX(KB_COL4,         KBC,             PULL_UP,   NORMAL,     INPUT),
        DEFAULT_PINMUX(KB_COL5,         KBC,             PULL_UP,   NORMAL,     INPUT),
        DEFAULT_PINMUX(GPIO_PV0,        RSVD,            PULL_UP,   NORMAL,     INPUT),
-       DEFAULT_PINMUX(CLK_32K_OUT,     BLINK,           NORMAL,    NORMAL,     OUTPUT),
+       DEFAULT_PINMUX(CLK_32K_OUT,     BLINK,           PULL_DOWN, TRISTATE,   OUTPUT),
        DEFAULT_PINMUX(SYS_CLK_REQ,     SYSCLK,          NORMAL,    NORMAL,     OUTPUT),
        DEFAULT_PINMUX(OWR,             OWR,             NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(DAP1_FS,         I2S0,            NORMAL,    NORMAL,     INPUT),
@@ -315,7 +327,7 @@ static __initdata struct tegra_pingroup_config enterprise_pinmux[] = {
        DEFAULT_PINMUX(PEX_L2_PRSNT_N,  PCIE,            NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(PEX_L2_RST_N,    PCIE,            NORMAL,    NORMAL,     OUTPUT),
        DEFAULT_PINMUX(PEX_L2_CLKREQ_N, PCIE,            NORMAL,    NORMAL,     INPUT),
-       DEFAULT_PINMUX(HDMI_CEC,        CEC,             NORMAL,    NORMAL,     INPUT),
+       CEC_PINMUX(HDMI_CEC,            CEC,             NORMAL,    TRISTATE,   OUTPUT, DEFAULT, DISABLE),
        DEFAULT_PINMUX(HDMI_INT,        RSVD0,           NORMAL,    TRISTATE,   INPUT),
 
        /* Gpios */
@@ -349,6 +361,7 @@ static __initdata struct tegra_pingroup_config enterprise_unused_pinmux[] = {
        DEFAULT_PINMUX(CLK2_REQ,       DAP,              PULL_DOWN,    TRISTATE,  OUTPUT),
        DEFAULT_PINMUX(CLK3_OUT,       EXTPERIPH3,       PULL_DOWN,    TRISTATE,  OUTPUT),
        DEFAULT_PINMUX(CLK3_REQ,       DEV3,             PULL_DOWN,    TRISTATE,  OUTPUT),
+       DEFAULT_PINMUX(CLK_32K_OUT,     BLINK,           PULL_DOWN,    TRISTATE,  OUTPUT),
        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),
@@ -426,6 +439,7 @@ static __initdata struct pin_info_low_power_mode enterprise_unused_gpio_pins[] =
        PIN_GPIO_LPM("CLK2_REQ",     TEGRA_GPIO_PCC5,  0, 0),
        PIN_GPIO_LPM("CLK3_OUT",     TEGRA_GPIO_PEE0,  0, 0),
        PIN_GPIO_LPM("CLK3_REQ",     TEGRA_GPIO_PEE1,  0, 0),
+       PIN_GPIO_LPM("CLK_32K_OUT",  TEGRA_GPIO_PA0,   0, 0),
        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),
index 8a79773..470a8b1 100644 (file)
@@ -44,6 +44,9 @@
 #define PMC_CTRL               0x0
 #define PMC_CTRL_INTR_LOW      (1 << 17)
 
+#define PMC_DPD_PADS_ORIDE             0x01c
+#define PMC_DPD_PADS_ORIDE_BLINK       (1 << 20)
+
 /************************ TPS80031 based regulator ****************/
 static struct regulator_consumer_supply tps80031_vio_supply[] = {
        REGULATOR_SUPPLY("vio_1v8", NULL),
@@ -492,6 +495,7 @@ int __init enterprise_regulator_init(void)
 {
        void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE);
        u32 pmc_ctrl;
+       u32 pmc_dpd_pads;
 
        /* configure the power management controller to trigger PMU
         * interrupts when low */
@@ -499,6 +503,9 @@ int __init enterprise_regulator_init(void)
        pmc_ctrl = readl(pmc + PMC_CTRL);
        writel(pmc_ctrl | PMC_CTRL_INTR_LOW, pmc + PMC_CTRL);
 
+       pmc_dpd_pads = readl(pmc + PMC_DPD_PADS_ORIDE);
+       writel(pmc_dpd_pads & ~PMC_DPD_PADS_ORIDE_BLINK , pmc + PMC_DPD_PADS_ORIDE);
+
        /* Disable battery charging if power adapter is connected. */
        if (get_power_supply_type() == POWER_SUPPLY_TYPE_MAINS) {
                bcharger_pdata.num_consumer_supplies = 0;