diff options
-rw-r--r-- | arch/arm/mach-shmobile/setup-r8a7791.c | 125 |
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, \ | 88 | static 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), \ | 106 | R8A7791_SCIFA(0, 0xe6c40000, gic_spi(144)); /* SCIFA0 */ |
110 | .scbrr_algo_id = SCBRR_ALGO_2, \ | 107 | R8A7791_SCIFA(1, 0xe6c50000, gic_spi(145)); /* SCIFA1 */ |
111 | .scscr = SCSCR_RE | SCSCR_TE, \ | 108 | R8A7791_SCIFB(2, 0xe6c20000, gic_spi(148)); /* SCIFB0 */ |
112 | } | 109 | R8A7791_SCIFB(3, 0xe6c30000, gic_spi(149)); /* SCIFB1 */ |
113 | 110 | R8A7791_SCIFB(4, 0xe6ce0000, gic_spi(150)); /* SCIFB2 */ | |
114 | #define HSCIF_DATA(index, baseaddr, irq) \ | 111 | R8A7791_SCIFA(5, 0xe6c60000, gic_spi(151)); /* SCIFA2 */ |
115 | [index] = { \ | 112 | R8A7791_SCIF(6, 0xe6e60000, gic_spi(152)); /* SCIF0 */ |
116 | SCIF_COMMON(PORT_HSCIF, baseaddr, irq), \ | 113 | R8A7791_SCIF(7, 0xe6e68000, gic_spi(153)); /* SCIF1 */ |
117 | .scbrr_algo_id = SCBRR_ALGO_6, \ | 114 | R8A7791_SCIF(8, 0xe6e58000, gic_spi(22)); /* SCIF2 */ |
118 | .scscr = SCSCR_RE | SCSCR_TE, \ | 115 | R8A7791_SCIF(9, 0xe6ea8000, gic_spi(23)); /* SCIF3 */ |
119 | } | 116 | R8A7791_SCIF(10, 0xe6ee0000, gic_spi(24)); /* SCIF4 */ |
120 | 117 | R8A7791_SCIF(11, 0xe6ee8000, gic_spi(25)); /* SCIF5 */ | |
121 | enum { SCIFA0, SCIFA1, SCIFB0, SCIFB1, SCIFB2, SCIFA2, SCIF0, SCIF1, | 118 | R8A7791_SCIFA(12, 0xe6c70000, gic_spi(29)); /* SCIFA3 */ |
122 | SCIF2, SCIF3, SCIF4, SCIF5, SCIFA3, SCIFA4, SCIFA5 }; | 119 | R8A7791_SCIFA(13, 0xe6c78000, gic_spi(30)); /* SCIFA4 */ |
123 | 120 | R8A7791_SCIFA(14, 0xe6c80000, gic_spi(31)); /* SCIFA5 */ | |
124 | static 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 | |||
142 | static 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 | ||
148 | static const struct sh_timer_config cmt00_platform_data __initconst = { | 127 | static 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 | ||
203 | void __init r8a7791_add_dt_devices(void) | 182 | void __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 | ||