[PATCH 111/133] [Jaunty SRU] ARM.imx51 Freescale:ENGR00113061 [MX51] Enable the eSDHC slot2 on 2.6.28
Brad Figg
brad.figg at canonical.com
Thu Jul 9 16:49:41 UTC 2009
From: Richard Zhu <r65037 at freescale.com>
Enable the eSDHC slot2 on 2.6.28 + BB20/25 platforms.
Signed-off-by: Richard Zhu <r65037 at freescale.com>
Signed-off-by: Brad Figg <brad.figg at canonical.com>
---
arch/arm/mach-mx51/mx51_babbage.c | 22 +++++++++++--
arch/arm/mach-mx51/mx51_babbage_gpio.c | 48 +++++++++++++++++++++++++++++
arch/arm/plat-mxc/include/mach/hardware.h | 7 +++-
3 files changed, 73 insertions(+), 4 deletions(-)
diff --git a/arch/arm/mach-mx51/mx51_babbage.c b/arch/arm/mach-mx51/mx51_babbage.c
index 2ef209e..42473ee 100644
--- a/arch/arm/mach-mx51/mx51_babbage.c
+++ b/arch/arm/mach-mx51/mx51_babbage.c
@@ -358,6 +358,8 @@ static int sdhc_write_protect(struct device *dev)
if (to_platform_device(dev)->id == 0)
rc = mxc_get_gpio_datain(MX51_PIN_GPIO1_1);
+ else
+ rc = mxc_get_gpio_datain(MX51_PIN_GPIO1_5);
return rc;
}
@@ -370,7 +372,13 @@ static unsigned int sdhc_get_card_det_status(struct device *dev)
ret = mxc_get_gpio_datain(MX51_PIN_GPIO1_0);
return ret;
} else { /* config the det pin for SDHC2 */
- return 0;
+ if (board_is_babbage_2_5() == 1)
+ /* BB2.5 */
+ ret = mxc_get_gpio_datain(MX51_PIN_GPIO1_6);
+ else
+ /* BB2.0 */
+ ret = mxc_get_gpio_datain(MX51_PIN_GPIO1_4);
+ return ret;
}
}
@@ -422,8 +430,8 @@ static struct resource mxcsdhc2_resources[] = {
.flags = IORESOURCE_IRQ,
},
[2] = {
- .start = 0,
- .end = 0,
+ .start = IOMUX_TO_IRQ(MX51_PIN_GPIO1_4),
+ .end = IOMUX_TO_IRQ(MX51_PIN_GPIO1_4),
.flags = IORESOURCE_IRQ,
},
};
@@ -454,6 +462,14 @@ static struct platform_device mxcsdhc2_device = {
static inline void mxc_init_mmc(void)
{
+ if (board_is_babbage_2_5() == 1) {
+ /* BB2.5 */
+ mxcsdhc2_resources[2].start =
+ IOMUX_TO_IRQ(MX51_PIN_GPIO1_6); /* SD2 CD */
+ mxcsdhc2_resources[2].end =
+ IOMUX_TO_IRQ(MX51_PIN_GPIO1_6); /* SD2 CD */
+ }
+
(void)platform_device_register(&mxcsdhc1_device);
(void)platform_device_register(&mxcsdhc2_device);
}
diff --git a/arch/arm/mach-mx51/mx51_babbage_gpio.c b/arch/arm/mach-mx51/mx51_babbage_gpio.c
index d971ba5..1f9e492 100644
--- a/arch/arm/mach-mx51/mx51_babbage_gpio.c
+++ b/arch/arm/mach-mx51/mx51_babbage_gpio.c
@@ -350,6 +350,47 @@ static struct mxc_iomux_pin_cfg __initdata mxc_iomux_pins[] = {
(PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU),
},
{
+ MX51_PIN_SD2_CMD, IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION,
+ (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
+ },
+ {
+ MX51_PIN_SD2_CLK, IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION,
+ (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
+ },
+ {
+ MX51_PIN_SD2_DATA0, IOMUX_CONFIG_ALT0,
+ (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
+ },
+ {
+ MX51_PIN_SD2_DATA1, IOMUX_CONFIG_ALT0,
+ (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
+ },
+ {
+ MX51_PIN_SD2_DATA2, IOMUX_CONFIG_ALT0,
+ (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
+ },
+ {
+ MX51_PIN_SD2_DATA3, IOMUX_CONFIG_ALT0,
+ (PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | PAD_CTL_SRE_FAST),
+ },
+ {
+ MX51_PIN_GPIO1_4, IOMUX_CONFIG_GPIO | IOMUX_CONFIG_SION,
+ (PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU),
+ },
+ {
+ MX51_PIN_GPIO1_5, IOMUX_CONFIG_GPIO | IOMUX_CONFIG_SION,
+ (PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU),
+ },
+ {
+ MX51_PIN_GPIO1_6, IOMUX_CONFIG_GPIO | IOMUX_CONFIG_SION,
+ (PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU),
+ },
+ { /* Detect pin GPIO BB2.0 and BB2.5 */
+ MX51_PIN_UART3_RXD, IOMUX_CONFIG_ALT3,
+ (PAD_CTL_HYS_NONE | PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER |
+ PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST),
+ },
+ {
MX51_PIN_UART1_RXD, IOMUX_CONFIG_ALT0,
(PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_PULL |
PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST),
@@ -450,6 +491,13 @@ void __init mx51_babbage_io_init(void)
mxc_set_gpio_direction(MX51_PIN_GPIO1_8, 1);
mxc_set_gpio_direction(MX51_PIN_GPIO1_0, 1); /* SD1 CD */
mxc_set_gpio_direction(MX51_PIN_GPIO1_1, 1); /* SD1 WP */
+ if (board_is_babbage_2_5() == 1)
+ /* BB2.5 */
+ mxc_set_gpio_direction(MX51_PIN_GPIO1_6, 1); /* SD2 CD */
+ else
+ /* BB2.0 */
+ mxc_set_gpio_direction(MX51_PIN_GPIO1_4, 1); /* SD2 CD */
+ mxc_set_gpio_direction(MX51_PIN_GPIO1_5, 1); /* SD2 WP */
/* reset FEC PHY */
mxc_set_gpio_direction(MX51_PIN_EIM_A20, 0);
diff --git a/arch/arm/plat-mxc/include/mach/hardware.h b/arch/arm/plat-mxc/include/mach/hardware.h
index 469b7fc..61bea0e 100644
--- a/arch/arm/plat-mxc/include/mach/hardware.h
+++ b/arch/arm/plat-mxc/include/mach/hardware.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2008 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright 2004-2009 Freescale Semiconductor, Inc. All Rights Reserved.
*/
/*
@@ -82,8 +82,13 @@ static inline int type## _rev (int rev) \
#ifdef CONFIG_ARCH_MX51
#include <mach/mx51.h>
#define cpu_is_mx51() (1)
+#define board_is_mx51(rev) ((system_rev & rev) ? 1 : 0)
+/* BB25:Bit8 is set to 1, BB20: Bit8 is set to 0 */
+#define board_is_babbage_2_5() ((system_rev & 0x1FF) >> 8)
#else
#define cpu_is_mx51() (0)
+#define board_is_mx51(rev) (0)
+#define board_is_babbage_2_5() (0)
#endif
#ifdef CONFIG_ARCH_MX21
--
1.6.0.4
More information about the kernel-team
mailing list