diff options
author | Luotao Fu <l.fu@pengutronix.de> | 2009-06-24 15:13:46 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2009-07-01 09:17:34 +0200 |
commit | ae1d49ece17509f6db171c235ca9741a63d56d84 (patch) | |
tree | fb54928c90e3ca2322eb9e2e9c9fa94f21a612e1 | |
parent | ca46ef4afcaaafa50e4c5dfc239f9aa880aa7146 (diff) | |
download | linux-2.6-ae1d49ece17509f6db171c235ca9741a63d56d84.tar.gz linux-2.6-ae1d49ece17509f6db171c235ca9741a63d56d84.tar.xz |
pca100:add card detection to sdhc support
Signed-off-by: Luotao Fu <l.fu@pengutronix.de>
-rw-r--r-- | arch/arm/mach-mx2/pca100.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/arch/arm/mach-mx2/pca100.c b/arch/arm/mach-mx2/pca100.c index 043d8e97b39..d7c08472510 100644 --- a/arch/arm/mach-mx2/pca100.c +++ b/arch/arm/mach-mx2/pca100.c @@ -27,6 +27,7 @@ #include <linux/spi/spi.h> #include <linux/spi/eeprom.h> #include <linux/delay.h> +#include <linux/irq.h> #include <asm/mach/arch.h> #include <asm/mach-types.h> @@ -47,6 +48,7 @@ #include <mach/imxfb.h> #include <mach/mxc_ehci.h> #include <mach/ulpi.h> +#include <mach/mmc.h> #include "devices.h" @@ -331,6 +333,29 @@ static struct spi_imx_master pca100_spi_0_data = { .num_chipselect = ARRAY_SIZE(pca100_spi_cs), }; +static int pca100_sdhc2_init(struct device *dev, irq_handler_t detect_irq, void *data) +{ + int ret; + + ret = request_irq(IRQ_GPIOC(29), detect_irq, IRQF_TRIGGER_LOW, + "imx-mmc-detect", data); + if (ret) + printk(KERN_ERR + "pca100: Failed to reuest irq for sd/mmc detection\n"); + + return ret; +} + +static void pca100_sdhc2_exit(struct device *dev, void *data) +{ + free_irq(IRQ_GPIOC(29), data); +} + +static struct imxmmc_platform_data sdhc_pdata = { + .init = pca100_sdhc2_init, + .exit = pca100_sdhc2_exit, +}; + static void __init pca100_init(void) { int ret; @@ -342,7 +367,9 @@ static void __init pca100_init(void) mxc_register_device(&mxc_fb_device, &pca100_fb_data); mxc_register_device(&mxc_uart_device0, &uart_pdata); - mxc_register_device(&mxc_sdhc_device1, NULL); + + mxc_gpio_mode(GPIO_PORTC | 29 | GPIO_GPIO | GPIO_IN); + mxc_register_device(&mxc_sdhc_device1, &sdhc_pdata); mxc_register_device(&mxc_nand_device, &pca100_nand_board_info); |