summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Perez de Heredia <pedro.perez@digi.com>2012-02-27 02:24:17 +0100
committerPedro Perez de Heredia <pedro.perez@digi.com>2012-02-27 02:24:17 +0100
commit9fdc22b9339b1346834e3ecd07e514016f211c66 (patch)
treedbd678e7de6d212418f2abafa4d78eac09b361a4
parentf2f651fb097fed944ca6f52ad4fc11cc7979c5f4 (diff)
ccxmx53 gpio: configure wifi SD interface as gpio on remove
This commit configures the SD pins connected to the wireless module as gpios inputs when the driver is removed. This is needed to avoid some kind of current feedback that happens through the SD pins that causes that the reset level of the redpine module doesnt go low enough causing module reload problems (at least in WinCE). Configuring the pins as inputs seems to solve the problem. Signed-off-by: Pedro Perez de Heredia <pedro.perez@digi.com>
-rw-r--r--arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c40
1 files changed, 37 insertions, 3 deletions
diff --git a/arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c b/arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c
index 54cd008ff859..633bc356695d 100644
--- a/arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c
+++ b/arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c
@@ -148,7 +148,8 @@ EXPORT_SYMBOL(gpio_uart_active);
EXPORT_SYMBOL(gpio_uart_inactive);
-#if defined(CONFIG_ESDHCI_MXC_SELECT1)
+#if defined(CONFIG_ESDHCI_MXC_SELECT1) || defined(CONFIG_MACH_CCWMX53JS) || \
+ defined(CONFIG_MACH_CCWMX53JS)
static iomux_v3_cfg_t ccwmx53_mmc1_pads[] = {
MX53_PAD_SD1_CLK__ESDHC1_CLK,
MX53_PAD_SD1_CMD__ESDHC1_CMD,
@@ -226,7 +227,8 @@ static iomux_v3_cfg_t ccwmx53_mmc3_pads[] = {
void gpio_sdhc_active(int interface)
{
switch (interface) {
-#if defined(CONFIG_ESDHCI_MXC_SELECT1)
+#if defined(CONFIG_ESDHCI_MXC_SELECT1) || defined(CONFIG_MACH_CCWMX53JS) || \
+ defined(CONFIG_MACH_CCWMX53JS)
case 0:
mxc_iomux_v3_setup_multiple_pads(ccwmx53_mmc1_pads,
ARRAY_SIZE(ccwmx53_mmc1_pads));
@@ -253,7 +255,39 @@ void gpio_sdhc_active(int interface)
}
}
EXPORT_SYMBOL(gpio_sdhc_active);
-void gpio_sdhc_inactive(int module) {}
+
+#if defined(CONFIG_ESDHCI_MXC_SELECT1) || defined(CONFIG_MACH_CCWMX53JS) || \
+ defined(CONFIG_MACH_CCWMX53JS)
+static iomux_v3_cfg_t ccwmx53_mmc1_gpio_pads[] = {
+ MX53_PAD_SD1_DATA0__GPIO1_16,
+ MX53_PAD_SD1_CMD__GPIO1_18,
+ MX53_PAD_SD1_DATA0__GPIO1_16,
+#if defined(ESDHCI_MXC_SELECT1_8BIT_PORT) || defined(ESDHCI_MXC_SELECT1_4BIT_PORT)
+ MX53_PAD_SD1_DATA1__GPIO1_17,
+ MX53_PAD_SD1_DATA2__GPIO1_19,
+ MX53_PAD_SD1_DATA3__GPIO1_21,
+#endif /* (ESDHCI_MXC_SELECT1_8BIT_PORT) || (ESDHCI_MXC_SELECT1_4BIT_PORT) */
+#ifdef ESDHCI_MXC_SELECT1_8BIT_PORT
+ MX53_PAD_PATA_DATA8__GPIO2_8,
+ MX53_PAD_PATA_DATA9__GPIO2_9,
+ MX53_PAD_PATA_DATA10__GPIO2_10,
+ MX53_PAD_PATA_DATA11__GPIO2_11,
+#endif /* ESDHCI_MXC_SELECT1_8BIT_PORT */
+};
+#endif /* ESDHCI_MXC_SELECT1 */
+
+void gpio_sdhc_inactive(int interface)
+{
+ switch (interface) {
+#if defined(CONFIG_ESDHCI_MXC_SELECT1) || defined(CONFIG_MACH_CCWMX53JS) || \
+ defined(CONFIG_MACH_CCWMX53JS)
+ case 0:
+ mxc_iomux_v3_setup_multiple_pads(ccwmx53_mmc1_gpio_pads,
+ ARRAY_SIZE(ccwmx53_mmc1_gpio_pads));
+ break;
+#endif /* CONFIG_ESDHCI_MXC_SELECT1 */
+ }
+}
EXPORT_SYMBOL(gpio_sdhc_inactive);