diff options
Diffstat (limited to 'arch/arm/plat-mxc/devices/platform-spi_imx.c')
-rw-r--r-- | arch/arm/plat-mxc/devices/platform-spi_imx.c | 89 |
1 files changed, 80 insertions, 9 deletions
diff --git a/arch/arm/plat-mxc/devices/platform-spi_imx.c b/arch/arm/plat-mxc/devices/platform-spi_imx.c index 2831a6d3eb4..e48340ec331 100644 --- a/arch/arm/plat-mxc/devices/platform-spi_imx.c +++ b/arch/arm/plat-mxc/devices/platform-spi_imx.c | |||
@@ -6,25 +6,96 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <asm/sizes.h> | 9 | #include <mach/hardware.h> |
10 | #include <mach/devices-common.h> | 10 | #include <mach/devices-common.h> |
11 | 11 | ||
12 | struct platform_device *__init imx_add_spi_imx(int id, | 12 | #define imx_spi_imx_data_entry_single(soc, type, _devid, _id, hwid, _size) \ |
13 | resource_size_t iobase, resource_size_t iosize, int irq, | 13 | { \ |
14 | .devid = _devid, \ | ||
15 | .id = _id, \ | ||
16 | .iobase = soc ## _ ## type ## hwid ## _BASE_ADDR, \ | ||
17 | .iosize = _size, \ | ||
18 | .irq = soc ## _INT_ ## type ## hwid, \ | ||
19 | } | ||
20 | |||
21 | #define imx_spi_imx_data_entry(soc, type, devid, id, hwid, size) \ | ||
22 | [id] = imx_spi_imx_data_entry_single(soc, type, devid, id, hwid, size) | ||
23 | |||
24 | #ifdef CONFIG_SOC_IMX21 | ||
25 | const struct imx_spi_imx_data imx21_cspi_data[] __initconst = { | ||
26 | #define imx21_cspi_data_entry(_id, _hwid) \ | ||
27 | imx_spi_imx_data_entry(MX21, CSPI, "imx21-cspi", _id, _hwid, SZ_4K) | ||
28 | imx21_cspi_data_entry(0, 1), | ||
29 | imx21_cspi_data_entry(1, 2), | ||
30 | #endif | ||
31 | |||
32 | #ifdef CONFIG_ARCH_MX25 | ||
33 | const struct imx_spi_imx_data imx25_cspi_data[] __initconst = { | ||
34 | #define imx25_cspi_data_entry(_id, _hwid) \ | ||
35 | imx_spi_imx_data_entry(MX25, CSPI, "imx25-cspi", _id, _hwid, SZ_16K) | ||
36 | imx25_cspi_data_entry(0, 1), | ||
37 | imx25_cspi_data_entry(1, 2), | ||
38 | imx25_cspi_data_entry(2, 3), | ||
39 | }; | ||
40 | #endif /* ifdef CONFIG_ARCH_MX25 */ | ||
41 | |||
42 | #ifdef CONFIG_SOC_IMX27 | ||
43 | const struct imx_spi_imx_data imx27_cspi_data[] __initconst = { | ||
44 | #define imx27_cspi_data_entry(_id, _hwid) \ | ||
45 | imx_spi_imx_data_entry(MX27, CSPI, "imx27-cspi", _id, _hwid, SZ_4K) | ||
46 | imx27_cspi_data_entry(0, 1), | ||
47 | imx27_cspi_data_entry(1, 2), | ||
48 | imx27_cspi_data_entry(2, 3), | ||
49 | }; | ||
50 | #endif /* ifdef CONFIG_SOC_IMX27 */ | ||
51 | |||
52 | #ifdef CONFIG_ARCH_MX31 | ||
53 | const struct imx_spi_imx_data imx31_cspi_data[] __initconst = { | ||
54 | #define imx31_cspi_data_entry(_id, _hwid) \ | ||
55 | imx_spi_imx_data_entry(MX31, CSPI, "imx31-cspi", _id, _hwid, SZ_4K) | ||
56 | imx31_cspi_data_entry(0, 1), | ||
57 | imx31_cspi_data_entry(1, 2), | ||
58 | imx31_cspi_data_entry(2, 3), | ||
59 | }; | ||
60 | #endif /* ifdef CONFIG_ARCH_MX31 */ | ||
61 | |||
62 | #ifdef CONFIG_ARCH_MX35 | ||
63 | const struct imx_spi_imx_data imx35_cspi_data[] __initconst = { | ||
64 | #define imx35_cspi_data_entry(_id, _hwid) \ | ||
65 | imx_spi_imx_data_entry(MX35, CSPI, "imx35-cspi", _id, _hwid, SZ_4K) | ||
66 | imx35_cspi_data_entry(0, 1), | ||
67 | imx35_cspi_data_entry(1, 2), | ||
68 | }; | ||
69 | #endif /* ifdef CONFIG_ARCH_MX35 */ | ||
70 | |||
71 | #ifdef CONFIG_ARCH_MX51 | ||
72 | const struct imx_spi_imx_data imx51_cspi_data __initconst = | ||
73 | imx_spi_imx_data_entry_single(MX51, CSPI, "imx51-cspi", 0, , SZ_4K); | ||
74 | |||
75 | const struct imx_spi_imx_data imx51_ecspi_data[] __initconst = { | ||
76 | #define imx51_ecspi_data_entry(_id, _hwid) \ | ||
77 | imx_spi_imx_data_entry(MX51, ECSPI, "imx51-ecspi", _id, _hwid, SZ_4K) | ||
78 | imx51_ecspi_data_entry(0, 1), | ||
79 | imx51_ecspi_data_entry(1, 2), | ||
80 | }; | ||
81 | #endif /* ifdef CONFIG_ARCH_MX51 */ | ||
82 | |||
83 | struct platform_device *__init imx_add_spi_imx( | ||
84 | const struct imx_spi_imx_data *data, | ||
14 | const struct spi_imx_master *pdata) | 85 | const struct spi_imx_master *pdata) |
15 | { | 86 | { |
16 | struct resource res[] = { | 87 | struct resource res[] = { |
17 | { | 88 | { |
18 | .start = iobase, | 89 | .start = data->iobase, |
19 | .end = iobase + iosize - 1, | 90 | .end = data->iobase + data->iosize - 1, |
20 | .flags = IORESOURCE_MEM, | 91 | .flags = IORESOURCE_MEM, |
21 | }, { | 92 | }, { |
22 | .start = irq, | 93 | .start = data->irq, |
23 | .end = irq, | 94 | .end = data->irq, |
24 | .flags = IORESOURCE_IRQ, | 95 | .flags = IORESOURCE_IRQ, |
25 | }, | 96 | }, |
26 | }; | 97 | }; |
27 | 98 | ||
28 | return imx_add_platform_device("spi_imx", id, res, ARRAY_SIZE(res), | 99 | return imx_add_platform_device(data->devid, data->id, |
29 | pdata, sizeof(*pdata)); | 100 | res, ARRAY_SIZE(res), pdata, sizeof(*pdata)); |
30 | } | 101 | } |