ARM: OMAP3: Add support for configuring MMC pins as GPIO pins
authorTony Lindgren <tony@atomide.com>
Wed, 20 May 2015 16:23:43 +0000 (09:23 -0700)
committerTony Lindgren <tony@atomide.com>
Wed, 20 May 2015 16:23:43 +0000 (09:23 -0700)
Some devices are using the MMC1 pins 4..8 as GPIO pins, and in
this case they need to be configured for 1.8V IO voltage if not
done by the bootloader as otherwise some devices like smsc911x
won't work properly.

Let's also make sure this register is saved and restored for
idle.

Cc: Tim Nordell <tim.nordell@logicpd.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/control.c
arch/arm/mach-omap2/control.h
arch/arm/mach-omap2/pdata-quirks.c

index af95a624fe71ea2a6d4f56f2ee11b2d2d51230c6..f008930277edeb4b43c1be595d4571120ad8b0eb 100644 (file)
@@ -112,6 +112,7 @@ struct omap3_control_regs {
        u32 csirxfe;
        u32 iva2_bootaddr;
        u32 iva2_bootmod;
+       u32 wkup_ctrl;
        u32 debobs_0;
        u32 debobs_1;
        u32 debobs_2;
@@ -455,6 +456,7 @@ void omap3_control_save_context(void)
                        omap_ctrl_readl(OMAP343X_CONTROL_IVA2_BOOTADDR);
        control_context.iva2_bootmod =
                        omap_ctrl_readl(OMAP343X_CONTROL_IVA2_BOOTMOD);
+       control_context.wkup_ctrl = omap_ctrl_readl(OMAP34XX_CONTROL_WKUP_CTRL);
        control_context.debobs_0 = omap_ctrl_readl(OMAP343X_CONTROL_DEBOBS(0));
        control_context.debobs_1 = omap_ctrl_readl(OMAP343X_CONTROL_DEBOBS(1));
        control_context.debobs_2 = omap_ctrl_readl(OMAP343X_CONTROL_DEBOBS(2));
@@ -512,6 +514,7 @@ void omap3_control_restore_context(void)
                                        OMAP343X_CONTROL_IVA2_BOOTADDR);
        omap_ctrl_writel(control_context.iva2_bootmod,
                                        OMAP343X_CONTROL_IVA2_BOOTMOD);
+       omap_ctrl_writel(control_context.wkup_ctrl, OMAP34XX_CONTROL_WKUP_CTRL);
        omap_ctrl_writel(control_context.debobs_0, OMAP343X_CONTROL_DEBOBS(0));
        omap_ctrl_writel(control_context.debobs_1, OMAP343X_CONTROL_DEBOBS(1));
        omap_ctrl_writel(control_context.debobs_2, OMAP343X_CONTROL_DEBOBS(2));
index 80d2b7d8e36ed56e76dfb585fb04995e5b04a18b..ec406bc2c6d4a4524b329415fcbe361c9ca88c0a 100644 (file)
 #define OMAP343X_PADCONF_ETK_D15       OMAP343X_PADCONF_ETK(17)
 
 /* 34xx GENERAL_WKUP register offsets */
+#define OMAP34XX_CONTROL_WKUP_CTRL     (OMAP343X_CONTROL_GENERAL_WKUP - 0x4)
+#define OMAP36XX_GPIO_IO_PWRDNZ                BIT(6)
+
 #define OMAP343X_CONTROL_WKUP_DEBOBSMUX(i) (OMAP343X_CONTROL_GENERAL_WKUP + \
                                                0x008 + (i))
 #define OMAP343X_CONTROL_WKUP_DEBOBS0 (OMAP343X_CONTROL_GENERAL_WKUP + 0x008)
index af11511dda50bd239dbba1aa6710d15c022e2e77..821171cf6b7dfbed55ced2ac437afdd783c453ed 100644 (file)
@@ -44,6 +44,27 @@ static void __init omap2420_n8x0_legacy_init(void)
 #endif
 
 #ifdef CONFIG_ARCH_OMAP3
+/*
+ * Configures GPIOs 126, 127 and 129 to 1.8V mode instead of 3.0V
+ * mode for MMC1 in case bootloader did not configure things.
+ * Note that if the pins are used for MMC1, pbias-regulator
+ * manages the IO voltage.
+ */
+static void __init omap3_gpio126_127_129(void)
+{
+       u32 reg;
+
+       reg = omap_ctrl_readl(OMAP343X_CONTROL_PBIAS_LITE);
+       reg &= ~OMAP343X_PBIASLITEVMODE1;
+       reg |= OMAP343X_PBIASLITEPWRDNZ1;
+       omap_ctrl_writel(reg, OMAP343X_CONTROL_PBIAS_LITE);
+       if (cpu_is_omap3630()) {
+               reg = omap_ctrl_readl(OMAP34XX_CONTROL_WKUP_CTRL);
+               reg |= OMAP36XX_GPIO_IO_PWRDNZ;
+               omap_ctrl_writel(reg, OMAP34XX_CONTROL_WKUP_CTRL);
+       }
+}
+
 static void __init hsmmc2_internal_input_clk(void)
 {
        u32 reg;
@@ -356,6 +377,7 @@ static struct pdata_init pdata_quirks[] __initdata = {
        { "nokia,omap3-n950", hsmmc2_internal_input_clk, },
        { "isee,omap3-igep0020-rev-f", omap3_igep0020_rev_f_legacy_init, },
        { "isee,omap3-igep0030-rev-g", omap3_igep0030_rev_g_legacy_init, },
+       { "logicpd,dm3730-torpedo-devkit", omap3_gpio126_127_129, },
        { "ti,omap3-evm-37xx", omap3_evm_legacy_init, },
        { "ti,am3517-evm", am3517_evm_legacy_init, },
        { "technexion,omap3-tao3530", omap3_tao3530_legacy_init, },
This page took 0.02922 seconds and 5 git commands to generate.