diff options
Diffstat (limited to 'arch/arm/mach-omap1/board-h2-mmc.c')
-rw-r--r-- | arch/arm/mach-omap1/board-h2-mmc.c | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/arch/arm/mach-omap1/board-h2-mmc.c b/arch/arm/mach-omap1/board-h2-mmc.c index 504ae881360f..409fa56d0a87 100644 --- a/arch/arm/mach-omap1/board-h2-mmc.c +++ b/arch/arm/mach-omap1/board-h2-mmc.c | |||
@@ -12,13 +12,74 @@ | |||
12 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/platform_device.h> | ||
16 | |||
17 | #include <linux/i2c/tps65010.h> | ||
18 | |||
15 | #include <mach/mmc.h> | 19 | #include <mach/mmc.h> |
16 | #include <mach/gpio.h> | 20 | #include <mach/gpio.h> |
17 | 21 | ||
22 | #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) | ||
23 | |||
24 | static int mmc_set_power(struct device *dev, int slot, int power_on, | ||
25 | int vdd) | ||
26 | { | ||
27 | if (power_on) | ||
28 | gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 1); | ||
29 | else | ||
30 | gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0); | ||
31 | |||
32 | return 0; | ||
33 | } | ||
34 | |||
35 | static int mmc_late_init(struct device *dev) | ||
36 | { | ||
37 | int ret; | ||
38 | |||
39 | ret = gpio_request(H2_TPS_GPIO_MMC_PWR_EN, "MMC power"); | ||
40 | if (ret < 0) | ||
41 | return ret; | ||
42 | |||
43 | gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0); | ||
44 | |||
45 | return ret; | ||
46 | } | ||
47 | |||
48 | static void mmc_shutdown(struct device *dev) | ||
49 | { | ||
50 | gpio_free(H2_TPS_GPIO_MMC_PWR_EN); | ||
51 | } | ||
52 | |||
53 | /* | ||
54 | * H2 could use the following functions tested: | ||
55 | * - mmc_get_cover_state that uses OMAP_MPUIO(1) | ||
56 | * - mmc_get_wp that uses OMAP_MPUIO(3) | ||
57 | */ | ||
58 | static struct omap_mmc_platform_data mmc1_data = { | ||
59 | .nr_slots = 1, | ||
60 | .init = mmc_late_init, | ||
61 | .shutdown = mmc_shutdown, | ||
62 | .dma_mask = 0xffffffff, | ||
63 | .slots[0] = { | ||
64 | .set_power = mmc_set_power, | ||
65 | .ocr_mask = MMC_VDD_28_29 | MMC_VDD_30_31 | | ||
66 | MMC_VDD_32_33 | MMC_VDD_33_34, | ||
67 | .name = "mmcblk", | ||
68 | }, | ||
69 | }; | ||
70 | |||
71 | static struct omap_mmc_platform_data *mmc_data[OMAP16XX_NR_MMC]; | ||
72 | |||
18 | void __init h2_mmc_init(void) | 73 | void __init h2_mmc_init(void) |
19 | { | 74 | { |
75 | mmc_data[0] = &mmc1_data; | ||
76 | omap1_init_mmc(mmc_data, OMAP16XX_NR_MMC); | ||
20 | } | 77 | } |
21 | 78 | ||
22 | void h2_mmc_slot_cover_handler(void *arg, int state) | 79 | #else |
80 | |||
81 | void __init h2_mmc_init(void) | ||
23 | { | 82 | { |
24 | } | 83 | } |
84 | |||
85 | #endif | ||