diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-05-08 08:57:04 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-05-08 08:57:04 -0400 |
commit | c3d480ded1584dc17f6e82f49af4155380a51dda (patch) | |
tree | eea59347ee5db059b884e0efd2f4fd4280050d24 | |
parent | c29418c2ae15ee9171bc136ad261c497b95a46fc (diff) |
sh: TMU platform data for SH7786.
Wires up all 12 TMU channels, with TMU0 and 1 used as clockevent and
clocksource respectively.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/setup-sh7786.c | 393 |
1 files changed, 393 insertions, 0 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 90e8cfff55fd..2c464bf5a899 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c | |||
@@ -3,6 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2009 Renesas Solutions Corp. | 4 | * Copyright (C) 2009 Renesas Solutions Corp. |
5 | * Kuninori Morimoto <morimoto.kuninori@renesas.com> | 5 | * Kuninori Morimoto <morimoto.kuninori@renesas.com> |
6 | * Paul Mundt <paul.mundt@renesas.com> | ||
6 | * | 7 | * |
7 | * Based on SH7785 Setup | 8 | * Based on SH7785 Setup |
8 | * | 9 | * |
@@ -19,6 +20,7 @@ | |||
19 | #include <linux/io.h> | 20 | #include <linux/io.h> |
20 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
21 | #include <linux/dma-mapping.h> | 22 | #include <linux/dma-mapping.h> |
23 | #include <linux/sh_timer.h> | ||
22 | #include <asm/mmzone.h> | 24 | #include <asm/mmzone.h> |
23 | 25 | ||
24 | static struct plat_sci_port sci_platform_data[] = { | 26 | static struct plat_sci_port sci_platform_data[] = { |
@@ -69,6 +71,368 @@ static struct platform_device sci_device = { | |||
69 | }, | 71 | }, |
70 | }; | 72 | }; |
71 | 73 | ||
74 | static struct sh_timer_config tmu0_platform_data = { | ||
75 | .name = "TMU0", | ||
76 | .channel_offset = 0x04, | ||
77 | .timer_bit = 0, | ||
78 | .clk = "module_clk", | ||
79 | .clockevent_rating = 200, | ||
80 | }; | ||
81 | |||
82 | static struct resource tmu0_resources[] = { | ||
83 | [0] = { | ||
84 | .name = "TMU0", | ||
85 | .start = 0xffd80008, | ||
86 | .end = 0xffd80013, | ||
87 | .flags = IORESOURCE_MEM, | ||
88 | }, | ||
89 | [1] = { | ||
90 | .start = 16, | ||
91 | .flags = IORESOURCE_IRQ, | ||
92 | }, | ||
93 | }; | ||
94 | |||
95 | static struct platform_device tmu0_device = { | ||
96 | .name = "sh_tmu", | ||
97 | .id = 0, | ||
98 | .dev = { | ||
99 | .platform_data = &tmu0_platform_data, | ||
100 | }, | ||
101 | .resource = tmu0_resources, | ||
102 | .num_resources = ARRAY_SIZE(tmu0_resources), | ||
103 | }; | ||
104 | |||
105 | static struct sh_timer_config tmu1_platform_data = { | ||
106 | .name = "TMU1", | ||
107 | .channel_offset = 0x10, | ||
108 | .timer_bit = 1, | ||
109 | .clk = "module_clk", | ||
110 | .clocksource_rating = 200, | ||
111 | }; | ||
112 | |||
113 | static struct resource tmu1_resources[] = { | ||
114 | [0] = { | ||
115 | .name = "TMU1", | ||
116 | .start = 0xffd80014, | ||
117 | .end = 0xffd8001f, | ||
118 | .flags = IORESOURCE_MEM, | ||
119 | }, | ||
120 | [1] = { | ||
121 | .start = 17, | ||
122 | .flags = IORESOURCE_IRQ, | ||
123 | }, | ||
124 | }; | ||
125 | |||
126 | static struct platform_device tmu1_device = { | ||
127 | .name = "sh_tmu", | ||
128 | .id = 1, | ||
129 | .dev = { | ||
130 | .platform_data = &tmu1_platform_data, | ||
131 | }, | ||
132 | .resource = tmu1_resources, | ||
133 | .num_resources = ARRAY_SIZE(tmu1_resources), | ||
134 | }; | ||
135 | |||
136 | static struct sh_timer_config tmu2_platform_data = { | ||
137 | .name = "TMU2", | ||
138 | .channel_offset = 0x1c, | ||
139 | .timer_bit = 2, | ||
140 | .clk = "module_clk", | ||
141 | }; | ||
142 | |||
143 | static struct resource tmu2_resources[] = { | ||
144 | [0] = { | ||
145 | .name = "TMU2", | ||
146 | .start = 0xffd80020, | ||
147 | .end = 0xffd8002f, | ||
148 | .flags = IORESOURCE_MEM, | ||
149 | }, | ||
150 | [1] = { | ||
151 | .start = 18, | ||
152 | .flags = IORESOURCE_IRQ, | ||
153 | }, | ||
154 | }; | ||
155 | |||
156 | static struct platform_device tmu2_device = { | ||
157 | .name = "sh_tmu", | ||
158 | .id = 2, | ||
159 | .dev = { | ||
160 | .platform_data = &tmu2_platform_data, | ||
161 | }, | ||
162 | .resource = tmu2_resources, | ||
163 | .num_resources = ARRAY_SIZE(tmu2_resources), | ||
164 | }; | ||
165 | |||
166 | static struct sh_timer_config tmu3_platform_data = { | ||
167 | .name = "TMU3", | ||
168 | .channel_offset = 0x04, | ||
169 | .timer_bit = 0, | ||
170 | .clk = "module_clk", | ||
171 | }; | ||
172 | |||
173 | static struct resource tmu3_resources[] = { | ||
174 | [0] = { | ||
175 | .name = "TMU3", | ||
176 | .start = 0xffda0008, | ||
177 | .end = 0xffda0013, | ||
178 | .flags = IORESOURCE_MEM, | ||
179 | }, | ||
180 | [1] = { | ||
181 | .start = 20, | ||
182 | .flags = IORESOURCE_IRQ, | ||
183 | }, | ||
184 | }; | ||
185 | |||
186 | static struct platform_device tmu3_device = { | ||
187 | .name = "sh_tmu", | ||
188 | .id = 3, | ||
189 | .dev = { | ||
190 | .platform_data = &tmu3_platform_data, | ||
191 | }, | ||
192 | .resource = tmu3_resources, | ||
193 | .num_resources = ARRAY_SIZE(tmu3_resources), | ||
194 | }; | ||
195 | |||
196 | static struct sh_timer_config tmu4_platform_data = { | ||
197 | .name = "TMU4", | ||
198 | .channel_offset = 0x10, | ||
199 | .timer_bit = 1, | ||
200 | .clk = "module_clk", | ||
201 | }; | ||
202 | |||
203 | static struct resource tmu4_resources[] = { | ||
204 | [0] = { | ||
205 | .name = "TMU4", | ||
206 | .start = 0xffda0014, | ||
207 | .end = 0xffda001f, | ||
208 | .flags = IORESOURCE_MEM, | ||
209 | }, | ||
210 | [1] = { | ||
211 | .start = 21, | ||
212 | .flags = IORESOURCE_IRQ, | ||
213 | }, | ||
214 | }; | ||
215 | |||
216 | static struct platform_device tmu4_device = { | ||
217 | .name = "sh_tmu", | ||
218 | .id = 4, | ||
219 | .dev = { | ||
220 | .platform_data = &tmu4_platform_data, | ||
221 | }, | ||
222 | .resource = tmu4_resources, | ||
223 | .num_resources = ARRAY_SIZE(tmu4_resources), | ||
224 | }; | ||
225 | |||
226 | static struct sh_timer_config tmu5_platform_data = { | ||
227 | .name = "TMU5", | ||
228 | .channel_offset = 0x1c, | ||
229 | .timer_bit = 2, | ||
230 | .clk = "module_clk", | ||
231 | }; | ||
232 | |||
233 | static struct resource tmu5_resources[] = { | ||
234 | [0] = { | ||
235 | .name = "TMU5", | ||
236 | .start = 0xffda0020, | ||
237 | .end = 0xffda002b, | ||
238 | .flags = IORESOURCE_MEM, | ||
239 | }, | ||
240 | [1] = { | ||
241 | .start = 22, | ||
242 | .flags = IORESOURCE_IRQ, | ||
243 | }, | ||
244 | }; | ||
245 | |||
246 | static struct platform_device tmu5_device = { | ||
247 | .name = "sh_tmu", | ||
248 | .id = 5, | ||
249 | .dev = { | ||
250 | .platform_data = &tmu5_platform_data, | ||
251 | }, | ||
252 | .resource = tmu5_resources, | ||
253 | .num_resources = ARRAY_SIZE(tmu5_resources), | ||
254 | }; | ||
255 | |||
256 | static struct sh_timer_config tmu6_platform_data = { | ||
257 | .name = "TMU6", | ||
258 | .channel_offset = 0x04, | ||
259 | .timer_bit = 0, | ||
260 | .clk = "module_clk", | ||
261 | }; | ||
262 | |||
263 | static struct resource tmu6_resources[] = { | ||
264 | [0] = { | ||
265 | .name = "TMU6", | ||
266 | .start = 0xffdc0008, | ||
267 | .end = 0xffdc0013, | ||
268 | .flags = IORESOURCE_MEM, | ||
269 | }, | ||
270 | [1] = { | ||
271 | .start = 45, | ||
272 | .flags = IORESOURCE_IRQ, | ||
273 | }, | ||
274 | }; | ||
275 | |||
276 | static struct platform_device tmu6_device = { | ||
277 | .name = "sh_tmu", | ||
278 | .id = 6, | ||
279 | .dev = { | ||
280 | .platform_data = &tmu6_platform_data, | ||
281 | }, | ||
282 | .resource = tmu6_resources, | ||
283 | .num_resources = ARRAY_SIZE(tmu6_resources), | ||
284 | }; | ||
285 | |||
286 | static struct sh_timer_config tmu7_platform_data = { | ||
287 | .name = "TMU7", | ||
288 | .channel_offset = 0x10, | ||
289 | .timer_bit = 1, | ||
290 | .clk = "module_clk", | ||
291 | }; | ||
292 | |||
293 | static struct resource tmu7_resources[] = { | ||
294 | [0] = { | ||
295 | .name = "TMU7", | ||
296 | .start = 0xffdc0014, | ||
297 | .end = 0xffdc001f, | ||
298 | .flags = IORESOURCE_MEM, | ||
299 | }, | ||
300 | [1] = { | ||
301 | .start = 45, | ||
302 | .flags = IORESOURCE_IRQ, | ||
303 | }, | ||
304 | }; | ||
305 | |||
306 | static struct platform_device tmu7_device = { | ||
307 | .name = "sh_tmu", | ||
308 | .id = 7, | ||
309 | .dev = { | ||
310 | .platform_data = &tmu7_platform_data, | ||
311 | }, | ||
312 | .resource = tmu7_resources, | ||
313 | .num_resources = ARRAY_SIZE(tmu7_resources), | ||
314 | }; | ||
315 | |||
316 | static struct sh_timer_config tmu8_platform_data = { | ||
317 | .name = "TMU8", | ||
318 | .channel_offset = 0x1c, | ||
319 | .timer_bit = 2, | ||
320 | .clk = "module_clk", | ||
321 | }; | ||
322 | |||
323 | static struct resource tmu8_resources[] = { | ||
324 | [0] = { | ||
325 | .name = "TMU8", | ||
326 | .start = 0xffdc0020, | ||
327 | .end = 0xffdc002b, | ||
328 | .flags = IORESOURCE_MEM, | ||
329 | }, | ||
330 | [1] = { | ||
331 | .start = 45, | ||
332 | .flags = IORESOURCE_IRQ, | ||
333 | }, | ||
334 | }; | ||
335 | |||
336 | static struct platform_device tmu8_device = { | ||
337 | .name = "sh_tmu", | ||
338 | .id = 8, | ||
339 | .dev = { | ||
340 | .platform_data = &tmu8_platform_data, | ||
341 | }, | ||
342 | .resource = tmu8_resources, | ||
343 | .num_resources = ARRAY_SIZE(tmu8_resources), | ||
344 | }; | ||
345 | |||
346 | static struct sh_timer_config tmu9_platform_data = { | ||
347 | .name = "TMU9", | ||
348 | .channel_offset = 0x04, | ||
349 | .timer_bit = 0, | ||
350 | .clk = "module_clk", | ||
351 | }; | ||
352 | |||
353 | static struct resource tmu9_resources[] = { | ||
354 | [0] = { | ||
355 | .name = "TMU9", | ||
356 | .start = 0xffde0008, | ||
357 | .end = 0xffde0013, | ||
358 | .flags = IORESOURCE_MEM, | ||
359 | }, | ||
360 | [1] = { | ||
361 | .start = 46, | ||
362 | .flags = IORESOURCE_IRQ, | ||
363 | }, | ||
364 | }; | ||
365 | |||
366 | static struct platform_device tmu9_device = { | ||
367 | .name = "sh_tmu", | ||
368 | .id = 9, | ||
369 | .dev = { | ||
370 | .platform_data = &tmu9_platform_data, | ||
371 | }, | ||
372 | .resource = tmu9_resources, | ||
373 | .num_resources = ARRAY_SIZE(tmu9_resources), | ||
374 | }; | ||
375 | |||
376 | static struct sh_timer_config tmu10_platform_data = { | ||
377 | .name = "TMU10", | ||
378 | .channel_offset = 0x10, | ||
379 | .timer_bit = 1, | ||
380 | .clk = "module_clk", | ||
381 | }; | ||
382 | |||
383 | static struct resource tmu10_resources[] = { | ||
384 | [0] = { | ||
385 | .name = "TMU10", | ||
386 | .start = 0xffde0014, | ||
387 | .end = 0xffde001f, | ||
388 | .flags = IORESOURCE_MEM, | ||
389 | }, | ||
390 | [1] = { | ||
391 | .start = 46, | ||
392 | .flags = IORESOURCE_IRQ, | ||
393 | }, | ||
394 | }; | ||
395 | |||
396 | static struct platform_device tmu10_device = { | ||
397 | .name = "sh_tmu", | ||
398 | .id = 10, | ||
399 | .dev = { | ||
400 | .platform_data = &tmu10_platform_data, | ||
401 | }, | ||
402 | .resource = tmu10_resources, | ||
403 | .num_resources = ARRAY_SIZE(tmu10_resources), | ||
404 | }; | ||
405 | |||
406 | static struct sh_timer_config tmu11_platform_data = { | ||
407 | .name = "TMU11", | ||
408 | .channel_offset = 0x1c, | ||
409 | .timer_bit = 2, | ||
410 | .clk = "module_clk", | ||
411 | }; | ||
412 | |||
413 | static struct resource tmu11_resources[] = { | ||
414 | [0] = { | ||
415 | .name = "TMU11", | ||
416 | .start = 0xffde0020, | ||
417 | .end = 0xffde002b, | ||
418 | .flags = IORESOURCE_MEM, | ||
419 | }, | ||
420 | [1] = { | ||
421 | .start = 46, | ||
422 | .flags = IORESOURCE_IRQ, | ||
423 | }, | ||
424 | }; | ||
425 | |||
426 | static struct platform_device tmu11_device = { | ||
427 | .name = "sh_tmu", | ||
428 | .id = 11, | ||
429 | .dev = { | ||
430 | .platform_data = &tmu11_platform_data, | ||
431 | }, | ||
432 | .resource = tmu11_resources, | ||
433 | .num_resources = ARRAY_SIZE(tmu11_resources), | ||
434 | }; | ||
435 | |||
72 | static struct resource usb_ohci_resources[] = { | 436 | static struct resource usb_ohci_resources[] = { |
73 | [0] = { | 437 | [0] = { |
74 | .start = 0xffe70400, | 438 | .start = 0xffe70400, |
@@ -94,6 +458,21 @@ static struct platform_device usb_ohci_device = { | |||
94 | .resource = usb_ohci_resources, | 458 | .resource = usb_ohci_resources, |
95 | }; | 459 | }; |
96 | 460 | ||
461 | static struct platform_device *sh7786_early_devices[] __initdata = { | ||
462 | &tmu0_device, | ||
463 | &tmu1_device, | ||
464 | &tmu2_device, | ||
465 | &tmu3_device, | ||
466 | &tmu4_device, | ||
467 | &tmu5_device, | ||
468 | &tmu6_device, | ||
469 | &tmu7_device, | ||
470 | &tmu8_device, | ||
471 | &tmu9_device, | ||
472 | &tmu10_device, | ||
473 | &tmu11_device, | ||
474 | }; | ||
475 | |||
97 | static struct platform_device *sh7786_devices[] __initdata = { | 476 | static struct platform_device *sh7786_devices[] __initdata = { |
98 | &sci_device, | 477 | &sci_device, |
99 | &usb_ohci_device, | 478 | &usb_ohci_device, |
@@ -156,12 +535,26 @@ static void __init sh7786_usb_setup(void) | |||
156 | 535 | ||
157 | static int __init sh7786_devices_setup(void) | 536 | static int __init sh7786_devices_setup(void) |
158 | { | 537 | { |
538 | int ret; | ||
539 | |||
159 | sh7786_usb_setup(); | 540 | sh7786_usb_setup(); |
541 | |||
542 | ret = platform_add_devices(sh7786_early_devices, | ||
543 | ARRAY_SIZE(sh7786_early_devices)); | ||
544 | if (unlikely(ret != 0)) | ||
545 | return ret; | ||
546 | |||
160 | return platform_add_devices(sh7786_devices, | 547 | return platform_add_devices(sh7786_devices, |
161 | ARRAY_SIZE(sh7786_devices)); | 548 | ARRAY_SIZE(sh7786_devices)); |
162 | } | 549 | } |
163 | device_initcall(sh7786_devices_setup); | 550 | device_initcall(sh7786_devices_setup); |
164 | 551 | ||
552 | void __init plat_early_device_setup(void) | ||
553 | { | ||
554 | early_platform_add_devices(sh7786_early_devices, | ||
555 | ARRAY_SIZE(sh7786_early_devices)); | ||
556 | } | ||
557 | |||
165 | enum { | 558 | enum { |
166 | UNUSED = 0, | 559 | UNUSED = 0, |
167 | 560 | ||