aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2013-12-06 04:59:29 -0500
committerSimon Horman <horms+renesas@verge.net.au>2013-12-24 07:09:10 -0500
commit135d0e602a2f2700bcbde8315000e21cbdc4208e (patch)
treea211b89c6973ab41dcb94826d2b1fa9b22270365
parentecbcd715f098bf4b870ae5bd0f9b572987b3b219 (diff)
ARM: shmobile: r8a7791: Don't define SCIF platform data in an array
The SCIF driver is transitioning to platform resources. Board code will thus need to define an array of resources for each SCIF device. This is incompatible with the macro-based SCIF platform data definition as an array. Rework the macro to define platform data as individual structures. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
-rw-r--r--arch/arm/mach-shmobile/setup-r8a7791.c125
1 files changed, 52 insertions, 73 deletions
diff --git a/arch/arm/mach-shmobile/setup-r8a7791.c b/arch/arm/mach-shmobile/setup-r8a7791.c
index cddca99b434f..3fe0d7de08fc 100644
--- a/arch/arm/mach-shmobile/setup-r8a7791.c
+++ b/arch/arm/mach-shmobile/setup-r8a7791.c
@@ -84,66 +84,45 @@ void __init r8a7791_pinmux_init(void)
84 r8a7791_register_gpio(7); 84 r8a7791_register_gpio(7);
85} 85}
86 86
87#define SCIF_COMMON(scif_type, baseaddr, irq) \ 87#define __R8A7791_SCIF(scif_type, algo, index, baseaddr, irq) \
88 .type = scif_type, \ 88static struct plat_sci_port scif##index##_platform_data = { \
89 .mapbase = baseaddr, \ 89 .type = scif_type, \
90 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, \ 90 .mapbase = baseaddr, \
91 .irqs = SCIx_IRQ_MUXED(irq) 91 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, \
92 92 .scbrr_algo_id = algo, \
93#define SCIFA_DATA(index, baseaddr, irq) \ 93 .scscr = SCSCR_RE | SCSCR_TE, \
94[index] = { \ 94 .irqs = SCIx_IRQ_MUXED(irq), \
95 SCIF_COMMON(PORT_SCIFA, baseaddr, irq), \
96 .scbrr_algo_id = SCBRR_ALGO_4, \
97 .scscr = SCSCR_RE | SCSCR_TE, \
98} 95}
99 96
100#define SCIFB_DATA(index, baseaddr, irq) \ 97#define R8A7791_SCIF(index, baseaddr, irq) \
101[index] = { \ 98 __R8A7791_SCIF(PORT_SCIF, SCBRR_ALGO_2, index, baseaddr, irq)
102 SCIF_COMMON(PORT_SCIFB, baseaddr, irq), \ 99
103 .scbrr_algo_id = SCBRR_ALGO_4, \ 100#define R8A7791_SCIFA(index, baseaddr, irq) \
104 .scscr = SCSCR_RE | SCSCR_TE, \ 101 __R8A7791_SCIF(PORT_SCIFA, SCBRR_ALGO_4, index, baseaddr, irq)
105} 102
106 103#define R8A7791_SCIFB(index, baseaddr, irq) \
107#define SCIF_DATA(index, baseaddr, irq) \ 104 __R8A7791_SCIF(PORT_SCIFB, SCBRR_ALGO_4, index, baseaddr, irq)
108[index] = { \ 105
109 SCIF_COMMON(PORT_SCIF, baseaddr, irq), \ 106R8A7791_SCIFA(0, 0xe6c40000, gic_spi(144)); /* SCIFA0 */
110 .scbrr_algo_id = SCBRR_ALGO_2, \ 107R8A7791_SCIFA(1, 0xe6c50000, gic_spi(145)); /* SCIFA1 */
111 .scscr = SCSCR_RE | SCSCR_TE, \ 108R8A7791_SCIFB(2, 0xe6c20000, gic_spi(148)); /* SCIFB0 */
112} 109R8A7791_SCIFB(3, 0xe6c30000, gic_spi(149)); /* SCIFB1 */
113 110R8A7791_SCIFB(4, 0xe6ce0000, gic_spi(150)); /* SCIFB2 */
114#define HSCIF_DATA(index, baseaddr, irq) \ 111R8A7791_SCIFA(5, 0xe6c60000, gic_spi(151)); /* SCIFA2 */
115[index] = { \ 112R8A7791_SCIF(6, 0xe6e60000, gic_spi(152)); /* SCIF0 */
116 SCIF_COMMON(PORT_HSCIF, baseaddr, irq), \ 113R8A7791_SCIF(7, 0xe6e68000, gic_spi(153)); /* SCIF1 */
117 .scbrr_algo_id = SCBRR_ALGO_6, \ 114R8A7791_SCIF(8, 0xe6e58000, gic_spi(22)); /* SCIF2 */
118 .scscr = SCSCR_RE | SCSCR_TE, \ 115R8A7791_SCIF(9, 0xe6ea8000, gic_spi(23)); /* SCIF3 */
119} 116R8A7791_SCIF(10, 0xe6ee0000, gic_spi(24)); /* SCIF4 */
120 117R8A7791_SCIF(11, 0xe6ee8000, gic_spi(25)); /* SCIF5 */
121enum { SCIFA0, SCIFA1, SCIFB0, SCIFB1, SCIFB2, SCIFA2, SCIF0, SCIF1, 118R8A7791_SCIFA(12, 0xe6c70000, gic_spi(29)); /* SCIFA3 */
122 SCIF2, SCIF3, SCIF4, SCIF5, SCIFA3, SCIFA4, SCIFA5 }; 119R8A7791_SCIFA(13, 0xe6c78000, gic_spi(30)); /* SCIFA4 */
123 120R8A7791_SCIFA(14, 0xe6c80000, gic_spi(31)); /* SCIFA5 */
124static const struct plat_sci_port scif[] __initconst = { 121
125 SCIFA_DATA(SCIFA0, 0xe6c40000, gic_spi(144)), /* SCIFA0 */ 122#define r8a7791_register_scif(index) \
126 SCIFA_DATA(SCIFA1, 0xe6c50000, gic_spi(145)), /* SCIFA1 */ 123 platform_device_register_data(&platform_bus, "sh-sci", index, \
127 SCIFB_DATA(SCIFB0, 0xe6c20000, gic_spi(148)), /* SCIFB0 */ 124 &scif##index##_platform_data, \
128 SCIFB_DATA(SCIFB1, 0xe6c30000, gic_spi(149)), /* SCIFB1 */ 125 sizeof(scif##index##_platform_data))
129 SCIFB_DATA(SCIFB2, 0xe6ce0000, gic_spi(150)), /* SCIFB2 */
130 SCIFA_DATA(SCIFA2, 0xe6c60000, gic_spi(151)), /* SCIFA2 */
131 SCIF_DATA(SCIF0, 0xe6e60000, gic_spi(152)), /* SCIF0 */
132 SCIF_DATA(SCIF1, 0xe6e68000, gic_spi(153)), /* SCIF1 */
133 SCIF_DATA(SCIF2, 0xe6e58000, gic_spi(22)), /* SCIF2 */
134 SCIF_DATA(SCIF3, 0xe6ea8000, gic_spi(23)), /* SCIF3 */
135 SCIF_DATA(SCIF4, 0xe6ee0000, gic_spi(24)), /* SCIF4 */
136 SCIF_DATA(SCIF5, 0xe6ee8000, gic_spi(25)), /* SCIF5 */
137 SCIFA_DATA(SCIFA3, 0xe6c70000, gic_spi(29)), /* SCIFA3 */
138 SCIFA_DATA(SCIFA4, 0xe6c78000, gic_spi(30)), /* SCIFA4 */
139 SCIFA_DATA(SCIFA5, 0xe6c80000, gic_spi(31)), /* SCIFA5 */
140};
141
142static inline void r8a7791_register_scif(int idx)
143{
144 platform_device_register_data(&platform_bus, "sh-sci", idx, &scif[idx],
145 sizeof(struct plat_sci_port));
146}
147 126
148static const struct sh_timer_config cmt00_platform_data __initconst = { 127static const struct sh_timer_config cmt00_platform_data __initconst = {
149 .name = "CMT00", 128 .name = "CMT00",
@@ -202,21 +181,21 @@ static const struct resource thermal_resources[] __initconst = {
202 181
203void __init r8a7791_add_dt_devices(void) 182void __init r8a7791_add_dt_devices(void)
204{ 183{
205 r8a7791_register_scif(SCIFA0); 184 r8a7791_register_scif(0);
206 r8a7791_register_scif(SCIFA1); 185 r8a7791_register_scif(1);
207 r8a7791_register_scif(SCIFB0); 186 r8a7791_register_scif(2);
208 r8a7791_register_scif(SCIFB1); 187 r8a7791_register_scif(3);
209 r8a7791_register_scif(SCIFB2); 188 r8a7791_register_scif(4);
210 r8a7791_register_scif(SCIFA2); 189 r8a7791_register_scif(5);
211 r8a7791_register_scif(SCIF0); 190 r8a7791_register_scif(6);
212 r8a7791_register_scif(SCIF1); 191 r8a7791_register_scif(7);
213 r8a7791_register_scif(SCIF2); 192 r8a7791_register_scif(8);
214 r8a7791_register_scif(SCIF3); 193 r8a7791_register_scif(9);
215 r8a7791_register_scif(SCIF4); 194 r8a7791_register_scif(10);
216 r8a7791_register_scif(SCIF5); 195 r8a7791_register_scif(11);
217 r8a7791_register_scif(SCIFA3); 196 r8a7791_register_scif(12);
218 r8a7791_register_scif(SCIFA4); 197 r8a7791_register_scif(13);
219 r8a7791_register_scif(SCIFA5); 198 r8a7791_register_scif(14);
220 r8a7791_register_cmt(00); 199 r8a7791_register_cmt(00);
221} 200}
222 201