diff options
author | Daniel Mack <daniel@caiaq.de> | 2009-11-19 06:02:07 -0500 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2009-11-19 11:11:01 -0500 |
commit | 364cd540f036f106d886a9c51ae05e9a9bacf051 (patch) | |
tree | d839d21fefe3f51efc64c419d90a24177465564e /arch/arm/mach-mx3/mx31lite-db.c | |
parent | b7d91a62cb402a3d24a15dca9d2b0c309c4227b4 (diff) |
ARM: MX3: add MMC/SDHC support to mx31lite-db.c
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-mx3/mx31lite-db.c')
-rw-r--r-- | arch/arm/mach-mx3/mx31lite-db.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/arch/arm/mach-mx3/mx31lite-db.c b/arch/arm/mach-mx3/mx31lite-db.c index 751d15ec0b03..45abae1da335 100644 --- a/arch/arm/mach-mx3/mx31lite-db.c +++ b/arch/arm/mach-mx3/mx31lite-db.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <mach/imx-uart.h> | 38 | #include <mach/imx-uart.h> |
39 | #include <mach/iomux-mx3.h> | 39 | #include <mach/iomux-mx3.h> |
40 | #include <mach/board-mx31lite.h> | 40 | #include <mach/board-mx31lite.h> |
41 | #include <mach/mmc.h> | ||
41 | 42 | ||
42 | #include "devices.h" | 43 | #include "devices.h" |
43 | 44 | ||
@@ -61,11 +62,80 @@ static struct imxuart_platform_data uart_pdata __initdata = { | |||
61 | .flags = IMXUART_HAVE_RTSCTS, | 62 | .flags = IMXUART_HAVE_RTSCTS, |
62 | }; | 63 | }; |
63 | 64 | ||
65 | /* MMC */ | ||
66 | |||
67 | static int gpio_det, gpio_wp; | ||
68 | |||
69 | #define MMC_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \ | ||
70 | PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU) | ||
71 | |||
72 | static int mxc_mmc1_get_ro(struct device *dev) | ||
73 | { | ||
74 | return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_LCS0)); | ||
75 | } | ||
76 | |||
77 | static int mxc_mmc1_init(struct device *dev, | ||
78 | irq_handler_t detect_irq, void *data) | ||
79 | { | ||
80 | int ret; | ||
81 | |||
82 | gpio_det = IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1); | ||
83 | gpio_wp = IOMUX_TO_GPIO(MX31_PIN_GPIO1_6); | ||
84 | |||
85 | mxc_iomux_set_pad(MX31_PIN_SD1_DATA0, MMC_PAD_CFG); | ||
86 | mxc_iomux_set_pad(MX31_PIN_SD1_DATA1, MMC_PAD_CFG); | ||
87 | mxc_iomux_set_pad(MX31_PIN_SD1_DATA2, MMC_PAD_CFG); | ||
88 | mxc_iomux_set_pad(MX31_PIN_SD1_DATA3, MMC_PAD_CFG); | ||
89 | mxc_iomux_set_pad(MX31_PIN_SD1_CLK, MMC_PAD_CFG); | ||
90 | mxc_iomux_set_pad(MX31_PIN_SD1_CMD, MMC_PAD_CFG); | ||
91 | |||
92 | ret = gpio_request(gpio_det, "MMC detect"); | ||
93 | if (ret) | ||
94 | return ret; | ||
95 | |||
96 | ret = gpio_request(gpio_wp, "MMC w/p"); | ||
97 | if (ret) | ||
98 | goto exit_free_det; | ||
99 | |||
100 | gpio_direction_input(gpio_det); | ||
101 | gpio_direction_input(gpio_wp); | ||
102 | |||
103 | ret = request_irq(IOMUX_TO_IRQ(MX31_PIN_DCD_DCE1), detect_irq, | ||
104 | IRQF_DISABLED | IRQF_TRIGGER_FALLING, | ||
105 | "MMC detect", data); | ||
106 | if (ret) | ||
107 | goto exit_free_wp; | ||
108 | |||
109 | return 0; | ||
110 | |||
111 | exit_free_wp: | ||
112 | gpio_free(gpio_wp); | ||
113 | |||
114 | exit_free_det: | ||
115 | gpio_free(gpio_det); | ||
116 | |||
117 | return ret; | ||
118 | } | ||
119 | |||
120 | static void mxc_mmc1_exit(struct device *dev, void *data) | ||
121 | { | ||
122 | gpio_free(gpio_det); | ||
123 | gpio_free(gpio_wp); | ||
124 | free_irq(IOMUX_TO_IRQ(MX31_PIN_GPIO1_1), data); | ||
125 | } | ||
126 | |||
127 | static struct imxmmc_platform_data mmc_pdata = { | ||
128 | .get_ro = mxc_mmc1_get_ro, | ||
129 | .init = mxc_mmc1_init, | ||
130 | .exit = mxc_mmc1_exit, | ||
131 | }; | ||
132 | |||
64 | void __init mx31lite_db_init(void) | 133 | void __init mx31lite_db_init(void) |
65 | { | 134 | { |
66 | mxc_iomux_setup_multiple_pins(litekit_db_board_pins, | 135 | mxc_iomux_setup_multiple_pins(litekit_db_board_pins, |
67 | ARRAY_SIZE(litekit_db_board_pins), | 136 | ARRAY_SIZE(litekit_db_board_pins), |
68 | "development board pins"); | 137 | "development board pins"); |
69 | mxc_register_device(&mxc_uart_device0, &uart_pdata); | 138 | mxc_register_device(&mxc_uart_device0, &uart_pdata); |
139 | mxc_register_device(&mxcsdhc_device0, &mmc_pdata); | ||
70 | } | 140 | } |
71 | 141 | ||