Commit | Line | Data |
---|---|---|
124bf94a UKK |
1 | /* |
2 | * Copyright (C) 2010 Pengutronix, Wolfram Sang <w.sang@pengutronix.de> | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify it under | |
5 | * the terms of the GNU General Public License version 2 as published by the | |
6 | * Free Software Foundation. | |
7 | */ | |
8 | ||
82906b13 | 9 | #include <linux/platform_data/mmc-esdhc-imx.h> |
50f2de61 SG |
10 | |
11 | #include "../hardware.h" | |
e0557c0d | 12 | #include "devices-common.h" |
124bf94a | 13 | |
57ed3314 | 14 | #define imx_sdhci_esdhc_imx_data_entry_single(soc, _devid, _id, hwid) \ |
124bf94a | 15 | { \ |
57ed3314 | 16 | .devid = _devid, \ |
124bf94a UKK |
17 | .id = _id, \ |
18 | .iobase = soc ## _ESDHC ## hwid ## _BASE_ADDR, \ | |
19 | .irq = soc ## _INT_ESDHC ## hwid, \ | |
20 | } | |
21 | ||
57ed3314 SG |
22 | #define imx_sdhci_esdhc_imx_data_entry(soc, devid, id, hwid) \ |
23 | [id] = imx_sdhci_esdhc_imx_data_entry_single(soc, devid, id, hwid) | |
124bf94a UKK |
24 | |
25 | #ifdef CONFIG_SOC_IMX25 | |
26 | const struct imx_sdhci_esdhc_imx_data | |
27 | imx25_sdhci_esdhc_imx_data[] __initconst = { | |
28 | #define imx25_sdhci_esdhc_imx_data_entry(_id, _hwid) \ | |
57ed3314 | 29 | imx_sdhci_esdhc_imx_data_entry(MX25, "sdhci-esdhc-imx25", _id, _hwid) |
124bf94a UKK |
30 | imx25_sdhci_esdhc_imx_data_entry(0, 1), |
31 | imx25_sdhci_esdhc_imx_data_entry(1, 2), | |
32 | }; | |
33 | #endif /* ifdef CONFIG_SOC_IMX25 */ | |
34 | ||
35 | #ifdef CONFIG_SOC_IMX35 | |
36 | const struct imx_sdhci_esdhc_imx_data | |
37 | imx35_sdhci_esdhc_imx_data[] __initconst = { | |
38 | #define imx35_sdhci_esdhc_imx_data_entry(_id, _hwid) \ | |
57ed3314 | 39 | imx_sdhci_esdhc_imx_data_entry(MX35, "sdhci-esdhc-imx35", _id, _hwid) |
124bf94a UKK |
40 | imx35_sdhci_esdhc_imx_data_entry(0, 1), |
41 | imx35_sdhci_esdhc_imx_data_entry(1, 2), | |
42 | imx35_sdhci_esdhc_imx_data_entry(2, 3), | |
43 | }; | |
44 | #endif /* ifdef CONFIG_SOC_IMX35 */ | |
45 | ||
d94ed128 | 46 | #ifdef CONFIG_SOC_IMX51 |
124bf94a UKK |
47 | const struct imx_sdhci_esdhc_imx_data |
48 | imx51_sdhci_esdhc_imx_data[] __initconst = { | |
49 | #define imx51_sdhci_esdhc_imx_data_entry(_id, _hwid) \ | |
57ed3314 | 50 | imx_sdhci_esdhc_imx_data_entry(MX51, "sdhci-esdhc-imx51", _id, _hwid) |
124bf94a UKK |
51 | imx51_sdhci_esdhc_imx_data_entry(0, 1), |
52 | imx51_sdhci_esdhc_imx_data_entry(1, 2), | |
53 | imx51_sdhci_esdhc_imx_data_entry(2, 3), | |
54 | imx51_sdhci_esdhc_imx_data_entry(3, 4), | |
55 | }; | |
d94ed128 | 56 | #endif /* ifdef CONFIG_SOC_IMX51 */ |
124bf94a | 57 | |
410d3458 YS |
58 | #ifdef CONFIG_SOC_IMX53 |
59 | const struct imx_sdhci_esdhc_imx_data | |
60 | imx53_sdhci_esdhc_imx_data[] __initconst = { | |
61 | #define imx53_sdhci_esdhc_imx_data_entry(_id, _hwid) \ | |
57ed3314 | 62 | imx_sdhci_esdhc_imx_data_entry(MX53, "sdhci-esdhc-imx53", _id, _hwid) |
410d3458 YS |
63 | imx53_sdhci_esdhc_imx_data_entry(0, 1), |
64 | imx53_sdhci_esdhc_imx_data_entry(1, 2), | |
65 | imx53_sdhci_esdhc_imx_data_entry(2, 3), | |
66 | imx53_sdhci_esdhc_imx_data_entry(3, 4), | |
67 | }; | |
68 | #endif /* ifdef CONFIG_SOC_IMX53 */ | |
69 | ||
913413c3 SG |
70 | static const struct esdhc_platform_data default_esdhc_pdata __initconst = { |
71 | .wp_type = ESDHC_WP_NONE, | |
72 | .cd_type = ESDHC_CD_NONE, | |
73 | }; | |
74 | ||
124bf94a UKK |
75 | struct platform_device *__init imx_add_sdhci_esdhc_imx( |
76 | const struct imx_sdhci_esdhc_imx_data *data, | |
77 | const struct esdhc_platform_data *pdata) | |
78 | { | |
79 | struct resource res[] = { | |
80 | { | |
81 | .start = data->iobase, | |
82 | .end = data->iobase + SZ_16K - 1, | |
83 | .flags = IORESOURCE_MEM, | |
84 | }, { | |
85 | .start = data->irq, | |
86 | .end = data->irq, | |
87 | .flags = IORESOURCE_IRQ, | |
88 | }, | |
89 | }; | |
90 | ||
913413c3 SG |
91 | /* |
92 | * If machine does not provide pdata, use the default one | |
93 | * which means no WP/CD support | |
94 | */ | |
95 | if (!pdata) | |
96 | pdata = &default_esdhc_pdata; | |
97 | ||
57ed3314 | 98 | return imx_add_platform_device(data->devid, data->id, res, |
124bf94a UKK |
99 | ARRAY_SIZE(res), pdata, sizeof(*pdata)); |
100 | } |