diff options
Diffstat (limited to 'arch/sh/kernel/cpu/sh2a/setup-sh7201.c')
-rw-r--r-- | arch/sh/kernel/cpu/sh2a/setup-sh7201.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7201.c b/arch/sh/kernel/cpu/sh2a/setup-sh7201.c index 00f42f9e3f5c..772358b7685e 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-sh7201.c +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7201.c | |||
@@ -12,6 +12,8 @@ | |||
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/serial.h> | 13 | #include <linux/serial.h> |
14 | #include <linux/serial_sci.h> | 14 | #include <linux/serial_sci.h> |
15 | #include <linux/sh_timer.h> | ||
16 | #include <linux/io.h> | ||
15 | 17 | ||
16 | enum { | 18 | enum { |
17 | UNUSED = 0, | 19 | UNUSED = 0, |
@@ -249,9 +251,105 @@ static struct platform_device rtc_device = { | |||
249 | .resource = rtc_resources, | 251 | .resource = rtc_resources, |
250 | }; | 252 | }; |
251 | 253 | ||
254 | static struct sh_timer_config mtu2_0_platform_data = { | ||
255 | .name = "MTU2_0", | ||
256 | .channel_offset = -0x80, | ||
257 | .timer_bit = 0, | ||
258 | .clk = "module_clk", | ||
259 | .clockevent_rating = 200, | ||
260 | }; | ||
261 | |||
262 | static struct resource mtu2_0_resources[] = { | ||
263 | [0] = { | ||
264 | .name = "MTU2_0", | ||
265 | .start = 0xfffe4300, | ||
266 | .end = 0xfffe4326, | ||
267 | .flags = IORESOURCE_MEM, | ||
268 | }, | ||
269 | [1] = { | ||
270 | .start = 108, | ||
271 | .flags = IORESOURCE_IRQ, | ||
272 | }, | ||
273 | }; | ||
274 | |||
275 | static struct platform_device mtu2_0_device = { | ||
276 | .name = "sh_mtu2", | ||
277 | .id = 0, | ||
278 | .dev = { | ||
279 | .platform_data = &mtu2_0_platform_data, | ||
280 | }, | ||
281 | .resource = mtu2_0_resources, | ||
282 | .num_resources = ARRAY_SIZE(mtu2_0_resources), | ||
283 | }; | ||
284 | |||
285 | static struct sh_timer_config mtu2_1_platform_data = { | ||
286 | .name = "MTU2_1", | ||
287 | .channel_offset = -0x100, | ||
288 | .timer_bit = 1, | ||
289 | .clk = "module_clk", | ||
290 | .clockevent_rating = 200, | ||
291 | }; | ||
292 | |||
293 | static struct resource mtu2_1_resources[] = { | ||
294 | [0] = { | ||
295 | .name = "MTU2_1", | ||
296 | .start = 0xfffe4380, | ||
297 | .end = 0xfffe4390, | ||
298 | .flags = IORESOURCE_MEM, | ||
299 | }, | ||
300 | [1] = { | ||
301 | .start = 116, | ||
302 | .flags = IORESOURCE_IRQ, | ||
303 | }, | ||
304 | }; | ||
305 | |||
306 | static struct platform_device mtu2_1_device = { | ||
307 | .name = "sh_mtu2", | ||
308 | .id = 1, | ||
309 | .dev = { | ||
310 | .platform_data = &mtu2_1_platform_data, | ||
311 | }, | ||
312 | .resource = mtu2_1_resources, | ||
313 | .num_resources = ARRAY_SIZE(mtu2_1_resources), | ||
314 | }; | ||
315 | |||
316 | static struct sh_timer_config mtu2_2_platform_data = { | ||
317 | .name = "MTU2_2", | ||
318 | .channel_offset = 0x80, | ||
319 | .timer_bit = 2, | ||
320 | .clk = "module_clk", | ||
321 | .clockevent_rating = 200, | ||
322 | }; | ||
323 | |||
324 | static struct resource mtu2_2_resources[] = { | ||
325 | [0] = { | ||
326 | .name = "MTU2_2", | ||
327 | .start = 0xfffe4000, | ||
328 | .end = 0xfffe400a, | ||
329 | .flags = IORESOURCE_MEM, | ||
330 | }, | ||
331 | [1] = { | ||
332 | .start = 124, | ||
333 | .flags = IORESOURCE_IRQ, | ||
334 | }, | ||
335 | }; | ||
336 | |||
337 | static struct platform_device mtu2_2_device = { | ||
338 | .name = "sh_mtu2", | ||
339 | .id = 2, | ||
340 | .dev = { | ||
341 | .platform_data = &mtu2_2_platform_data, | ||
342 | }, | ||
343 | .resource = mtu2_2_resources, | ||
344 | .num_resources = ARRAY_SIZE(mtu2_2_resources), | ||
345 | }; | ||
346 | |||
252 | static struct platform_device *sh7201_devices[] __initdata = { | 347 | static struct platform_device *sh7201_devices[] __initdata = { |
253 | &sci_device, | 348 | &sci_device, |
254 | &rtc_device, | 349 | &rtc_device, |
350 | &mtu2_0_device, | ||
351 | &mtu2_1_device, | ||
352 | &mtu2_2_device, | ||
255 | }; | 353 | }; |
256 | 354 | ||
257 | static int __init sh7201_devices_setup(void) | 355 | static int __init sh7201_devices_setup(void) |
@@ -265,3 +363,20 @@ void __init plat_irq_setup(void) | |||
265 | { | 363 | { |
266 | register_intc_controller(&intc_desc); | 364 | register_intc_controller(&intc_desc); |
267 | } | 365 | } |
366 | |||
367 | static struct platform_device *sh7201_early_devices[] __initdata = { | ||
368 | &mtu2_0_device, | ||
369 | &mtu2_1_device, | ||
370 | &mtu2_2_device, | ||
371 | }; | ||
372 | |||
373 | #define STBCR3 0xfffe0408 | ||
374 | |||
375 | void __init plat_early_device_setup(void) | ||
376 | { | ||
377 | /* enable MTU2 clock */ | ||
378 | __raw_writeb(__raw_readb(STBCR3) & ~0x20, STBCR3); | ||
379 | |||
380 | early_platform_add_devices(sh7201_early_devices, | ||
381 | ARRAY_SIZE(sh7201_early_devices)); | ||
382 | } | ||