aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2010-09-09 15:02:02 -0400
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>2010-09-27 09:46:31 -0400
commit35bab0589b9a71533b37280eefa430c21dc102fe (patch)
tree891a4b6c506f46ed596272d34d65e6d4990e459a
parenta8a05b855291defb1d97a1c3681480e4ca330254 (diff)
ARM: imx: change the way spi-imx devices are registered
Group soc specific data in a global struct instead of repeating it for each call to imxXX_add_spi_imxX. The structs holding the actual data are placed in .init.constdata and so don't do much harm. Compared to the previous approach this reduces code size to call imx_add_spi_imx. Acked-by: Jason Wang <jason77.wang@gmail.com> Acked-by: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
-rw-r--r--arch/arm/mach-imx/devices-imx21.h9
-rw-r--r--arch/arm/mach-imx/devices-imx27.h12
-rw-r--r--arch/arm/mach-mx25/devices-imx25.h12
-rw-r--r--arch/arm/mach-mx3/devices-imx31.h12
-rw-r--r--arch/arm/mach-mx3/devices-imx35.h9
-rw-r--r--arch/arm/plat-mxc/devices/platform-spi_imx.c76
-rw-r--r--arch/arm/plat-mxc/include/mach/devices-common.h10
7 files changed, 103 insertions, 37 deletions
diff --git a/arch/arm/mach-imx/devices-imx21.h b/arch/arm/mach-imx/devices-imx21.h
index 42788e99d127..2b45d3316267 100644
--- a/arch/arm/mach-imx/devices-imx21.h
+++ b/arch/arm/mach-imx/devices-imx21.h
@@ -24,7 +24,8 @@
24#define imx21_add_mxc_nand(pdata) \ 24#define imx21_add_mxc_nand(pdata) \
25 imx_add_mxc_nand_v1(MX21_NFC_BASE_ADDR, MX21_INT_NANDFC, pdata) 25 imx_add_mxc_nand_v1(MX21_NFC_BASE_ADDR, MX21_INT_NANDFC, pdata)
26 26
27#define imx21_add_spi_imx0(pdata) \ 27extern const struct imx_spi_imx_data imx21_cspi_data[] __initconst;
28 imx_add_spi_imx(0, MX21_CSPI1_BASE_ADDR, SZ_4K, MX21_INT_CSPI1, pdata) 28#define imx21_add_cspi(id, pdata) \
29#define imx21_add_spi_imx1(pdata) \ 29 imx_add_spi_imx(&imx21_cspi_data[id], pdata)
30 imx_add_spi_imx(1, MX21_CSPI2_BASE_ADDR, SZ_4K, MX21_INT_CSPI2, pdata) 30#define imx21_add_spi_imx0(pdata) imx21_add_cspi(0, pdata)
31#define imx21_add_spi_imx1(pdata) imx21_add_cspi(1, pdata)
diff --git a/arch/arm/mach-imx/devices-imx27.h b/arch/arm/mach-imx/devices-imx27.h
index 65e7bb7ec2e8..04bfcf0f63d2 100644
--- a/arch/arm/mach-imx/devices-imx27.h
+++ b/arch/arm/mach-imx/devices-imx27.h
@@ -30,9 +30,9 @@
30#define imx27_add_mxc_nand(pdata) \ 30#define imx27_add_mxc_nand(pdata) \
31 imx_add_mxc_nand_v1(MX27_NFC_BASE_ADDR, MX27_INT_NANDFC, pdata) 31 imx_add_mxc_nand_v1(MX27_NFC_BASE_ADDR, MX27_INT_NANDFC, pdata)
32 32
33#define imx27_add_spi_imx0(pdata) \ 33extern const struct imx_spi_imx_data imx27_cspi_data[] __initconst;
34 imx_add_spi_imx(0, MX27_CSPI1_BASE_ADDR, SZ_4K, MX27_INT_CSPI1, pdata) 34#define imx27_add_cspi(id, pdata) \
35#define imx27_add_spi_imx1(pdata) \ 35 imx_add_spi_imx(&imx27_cspi_data[id], pdata)
36 imx_add_spi_imx(1, MX27_CSPI2_BASE_ADDR, SZ_4K, MX27_INT_CSPI2, pdata) 36#define imx27_add_spi_imx0(pdata) imx27_add_cspi(0, pdata)
37#define imx27_add_spi_imx2(pdata) \ 37#define imx27_add_spi_imx1(pdata) imx27_add_cspi(1, pdata)
38 imx_add_spi_imx(2, MX27_CSPI3_BASE_ADDR, SZ_4K, MX27_INT_CSPI3, pdata) 38#define imx27_add_spi_imx2(pdata) imx27_add_cspi(2, pdata)
diff --git a/arch/arm/mach-mx25/devices-imx25.h b/arch/arm/mach-mx25/devices-imx25.h
index d86a7c3ca8b0..34a706105064 100644
--- a/arch/arm/mach-mx25/devices-imx25.h
+++ b/arch/arm/mach-mx25/devices-imx25.h
@@ -35,9 +35,9 @@
35#define imx25_add_mxc_nand(pdata) \ 35#define imx25_add_mxc_nand(pdata) \
36 imx_add_mxc_nand_v21(MX25_NFC_BASE_ADDR, MX25_INT_NANDFC, pdata) 36 imx_add_mxc_nand_v21(MX25_NFC_BASE_ADDR, MX25_INT_NANDFC, pdata)
37 37
38#define imx25_add_spi_imx0(pdata) \ 38extern const struct imx_spi_imx_data imx25_spi_imx_data[] __initconst;
39 imx_add_spi_imx(0, MX25_CSPI1_BASE_ADDR, SZ_16K, MX25_INT_CSPI1, pdata) 39#define imx25_add_spi_imx(id, pdata) \
40#define imx25_add_spi_imx1(pdata) \ 40 imx_add_spi_imx(&imx25_spi_imx_data[id], pdata)
41 imx_add_spi_imx(1, MX25_CSPI2_BASE_ADDR, SZ_16K, MX25_INT_CSPI2, pdata) 41#define imx25_add_spi_imx0(pdata) imx25_add_spi_imx(0, pdata)
42#define imx25_add_spi_imx2(pdata) \ 42#define imx25_add_spi_imx1(pdata) imx25_add_spi_imx(1, pdata)
43 imx_add_spi_imx(2, MX25_CSPI3_BASE_ADDR, SZ_16K, MX25_INT_CSPI3, pdata) 43#define imx25_add_spi_imx2(pdata) imx25_add_spi_imx(2, pdata)
diff --git a/arch/arm/mach-mx3/devices-imx31.h b/arch/arm/mach-mx3/devices-imx31.h
index 3b1a44a20585..7b4d022a59fa 100644
--- a/arch/arm/mach-mx3/devices-imx31.h
+++ b/arch/arm/mach-mx3/devices-imx31.h
@@ -30,9 +30,9 @@
30#define imx31_add_mxc_nand(pdata) \ 30#define imx31_add_mxc_nand(pdata) \
31 imx_add_mxc_nand_v1(MX31_NFC_BASE_ADDR, MX31_INT_NANDFC, pdata) 31 imx_add_mxc_nand_v1(MX31_NFC_BASE_ADDR, MX31_INT_NANDFC, pdata)
32 32
33#define imx31_add_spi_imx0(pdata) \ 33extern const struct imx_spi_imx_data imx31_cspi_data[] __initconst;
34 imx_add_spi_imx(0, MX31_CSPI1_BASE_ADDR, SZ_4K, MX31_INT_CSPI1, pdata) 34#define imx31_add_cspi(id, pdata) \
35#define imx31_add_spi_imx1(pdata) \ 35 imx_add_spi_imx(&imx31_cspi_data[id], pdata)
36 imx_add_spi_imx(1, MX31_CSPI2_BASE_ADDR, SZ_4K, MX31_INT_CSPI2, pdata) 36#define imx31_add_spi_imx0(pdata) imx31_add_cspi(0, pdata)
37#define imx31_add_spi_imx2(pdata) \ 37#define imx31_add_spi_imx1(pdata) imx31_add_cspi(1, pdata)
38 imx_add_spi_imx(2, MX31_CSPI3_BASE_ADDR, SZ_4K, MX31_INT_CSPI3, pdata) 38#define imx31_add_spi_imx2(pdata) imx31_add_cspi(2, pdata)
diff --git a/arch/arm/mach-mx3/devices-imx35.h b/arch/arm/mach-mx3/devices-imx35.h
index f6a431a4c3d2..af0bc1f86237 100644
--- a/arch/arm/mach-mx3/devices-imx35.h
+++ b/arch/arm/mach-mx3/devices-imx35.h
@@ -31,7 +31,8 @@
31#define imx35_add_mxc_nand(pdata) \ 31#define imx35_add_mxc_nand(pdata) \
32 imx_add_mxc_nand_v21(MX35_NFC_BASE_ADDR, MX35_INT_NANDFC, pdata) 32 imx_add_mxc_nand_v21(MX35_NFC_BASE_ADDR, MX35_INT_NANDFC, pdata)
33 33
34#define imx35_add_spi_imx0(pdata) \ 34extern const struct imx_spi_imx_data imx35_cspi_data[] __initconst;
35 imx_add_spi_imx(0, MX35_CSPI1_BASE_ADDR, SZ_4K, MX35_INT_CSPI1, pdata) 35#define imx35_add_cspi(id, pdata) \
36#define imx35_add_spi_imx1(pdata) \ 36 imx_add_spi_imx(&imx35_cspi_data[id], pdata)
37 imx_add_spi_imx(1, MX35_CSPI2_BASE_ADDR, SZ_4K, MX35_INT_CSPI2, pdata) 37#define imx35_add_spi_imx0(pdata) imx35_add_cspi(0, pdata)
38#define imx35_add_spi_imx1(pdata) imx35_add_cspi(1, pdata)
diff --git a/arch/arm/plat-mxc/devices/platform-spi_imx.c b/arch/arm/plat-mxc/devices/platform-spi_imx.c
index 2831a6d3eb4b..412a81f24101 100644
--- a/arch/arm/plat-mxc/devices/platform-spi_imx.c
+++ b/arch/arm/plat-mxc/devices/platform-spi_imx.c
@@ -6,25 +6,83 @@
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
12struct 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 .id = _id, \
15 .iobase = soc ## _ ## type ## hwid ## _BASE_ADDR, \
16 .iosize = _size, \
17 .irq = soc ## _INT_ ## type ## hwid, \
18 }
19
20#define imx_spi_imx_data_entry(soc, type, devid, id, hwid, size) \
21 [id] = imx_spi_imx_data_entry_single(soc, type, devid, id, hwid, size)
22
23#ifdef CONFIG_SOC_IMX21
24const struct imx_spi_imx_data imx21_cspi_data[] __initconst = {
25#define imx21_cspi_data_entry(_id, _hwid) \
26 imx_spi_imx_data_entry(MX21, CSPI, "imx21-cspi", _id, _hwid, SZ_4K)
27 imx21_cspi_data_entry(0, 1),
28 imx21_cspi_data_entry(1, 2),
29#endif
30
31#ifdef CONFIG_ARCH_MX25
32const struct imx_spi_imx_data imx25_cspi_data[] __initconst = {
33#define imx25_cspi_data_entry(_id, _hwid) \
34 imx_spi_imx_data_entry(MX25, CSPI, "imx25-cspi", _id, _hwid, SZ_16K)
35 imx25_cspi_data_entry(0, 1),
36 imx25_cspi_data_entry(1, 2),
37 imx25_cspi_data_entry(2, 3),
38};
39#endif /* ifdef CONFIG_ARCH_MX25 */
40
41#ifdef CONFIG_SOC_IMX27
42const struct imx_spi_imx_data imx27_cspi_data[] __initconst = {
43#define imx27_cspi_data_entry(_id, _hwid) \
44 imx_spi_imx_data_entry(MX27, CSPI, "imx27-cspi", _id, _hwid, SZ_4K)
45 imx27_cspi_data_entry(0, 1),
46 imx27_cspi_data_entry(1, 2),
47 imx27_cspi_data_entry(2, 3),
48};
49#endif /* ifdef CONFIG_SOC_IMX27 */
50
51#ifdef CONFIG_ARCH_MX31
52const struct imx_spi_imx_data imx31_cspi_data[] __initconst = {
53#define imx31_cspi_data_entry(_id, _hwid) \
54 imx_spi_imx_data_entry(MX31, CSPI, "imx31-cspi", _id, _hwid, SZ_4K)
55 imx31_cspi_data_entry(0, 1),
56 imx31_cspi_data_entry(1, 2),
57 imx31_cspi_data_entry(2, 3),
58};
59#endif /* ifdef CONFIG_ARCH_MX31 */
60
61#ifdef CONFIG_ARCH_MX35
62const struct imx_spi_imx_data imx35_cspi_data[] __initconst = {
63#define imx35_cspi_data_entry(_id, _hwid) \
64 imx_spi_imx_data_entry(MX35, CSPI, "imx35-cspi", _id, _hwid, SZ_4K)
65 imx35_cspi_data_entry(0, 1),
66 imx35_cspi_data_entry(1, 2),
67};
68#endif /* ifdef CONFIG_ARCH_MX35 */
69
70struct platform_device *__init imx_add_spi_imx(
71 const struct imx_spi_imx_data *data,
14 const struct spi_imx_master *pdata) 72 const struct spi_imx_master *pdata)
15{ 73{
16 struct resource res[] = { 74 struct resource res[] = {
17 { 75 {
18 .start = iobase, 76 .start = data->iobase,
19 .end = iobase + iosize - 1, 77 .end = data->iobase + data->iosize - 1,
20 .flags = IORESOURCE_MEM, 78 .flags = IORESOURCE_MEM,
21 }, { 79 }, {
22 .start = irq, 80 .start = data->irq,
23 .end = irq, 81 .end = data->irq,
24 .flags = IORESOURCE_IRQ, 82 .flags = IORESOURCE_IRQ,
25 }, 83 },
26 }; 84 };
27 85
28 return imx_add_platform_device("spi_imx", id, res, ARRAY_SIZE(res), 86 return imx_add_platform_device("spi_imx", data->id,
29 pdata, sizeof(*pdata)); 87 res, ARRAY_SIZE(res), pdata, sizeof(*pdata));
30} 88}
diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/plat-mxc/include/mach/devices-common.h
index 4a170a8da26c..e654287f0ba8 100644
--- a/arch/arm/plat-mxc/include/mach/devices-common.h
+++ b/arch/arm/plat-mxc/include/mach/devices-common.h
@@ -43,6 +43,12 @@ struct platform_device *__init imx_add_mxc_nand_v21(resource_size_t iobase,
43 int irq, const struct mxc_nand_platform_data *pdata); 43 int irq, const struct mxc_nand_platform_data *pdata);
44 44
45#include <mach/spi.h> 45#include <mach/spi.h>
46struct platform_device *__init imx_add_spi_imx(int id, 46struct imx_spi_imx_data {
47 resource_size_t iobase, resource_size_t iosize, int irq, 47 int id;
48 resource_size_t iobase;
49 resource_size_t iosize;
50 int irq;
51};
52struct platform_device *__init imx_add_spi_imx(
53 const struct imx_spi_imx_data *data,
48 const struct spi_imx_master *pdata); 54 const struct spi_imx_master *pdata);