summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuotao Fu <l.fu@pengutronix.de>2009-06-24 15:13:46 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2009-07-01 09:17:34 +0200
commitae1d49ece17509f6db171c235ca9741a63d56d84 (patch)
treefb54928c90e3ca2322eb9e2e9c9fa94f21a612e1
parentca46ef4afcaaafa50e4c5dfc239f9aa880aa7146 (diff)
downloadlinux-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.c29
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);