sh: TMU platform data for sh7706/sh7707/sh7708/sh7709
PATCH 1/1 sh: TMU platform data for sh7706/sh7707/sh7708/sh7709
From: Magnus Damm <[email protected]>
Add TMU platform data for sh7706/sh7707/sh7708/sh7709. Both clockevent and clocksource support is enabled.
Signed-off-by Magnus Damm <[email protected]>
---
arch/sh/kernel/cpu/sh3/setup-sh770x.c | 108 +++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+)
arch/sh/kernel/cpu/sh3/setup-sh770x.c +108 -0
@@ -18,6 +18,7 @@#include <linux/platform_device.h> #include <linux/serial.h> #include <linux/serial_sci.h> +#include <linux/sh_timer.h> enum {UNUSED =0 ,
@@ -144,7 +145,102 @@ static struct platform_device sci_device }, }; +static struct sh_timer_config tmu0_platform_data = { + .name ="TMU0" , + .channel_offset =0x02 , + .timer_bit =0 , + .clk ="module_clk" , + .clockevent_rating =200 , +}; + +static struct resource tmu0_resources[] = { + [0 ] = { + .name ="TMU0" , + .start =0xfffffe94 , + .end =0xfffffe9f , + .flags =IORESOURCE_MEM , + }, + [1 ] = { + .start =16 , + .flags =IORESOURCE_IRQ , + }, +}; + +static struct platform_device tmu0_device = { + .name ="sh_tmu" , + .id =0 , + .dev = { + .platform_data = &tmu0_platform_data, + }, + .resource = tmu0_resources, + .num_resources =ARRAY_SIZE (tmu0_resources), +}; + +static struct sh_timer_config tmu1_platform_data = { + .name ="TMU1" , + .channel_offset =0xe , + .timer_bit =1 , + .clk ="module_clk" , + .clocksource_rating =200 , +}; + +static struct resource tmu1_resources[] = { + [0 ] = { + .name ="TMU1" , + .start =0xfffffea0 , + .end =0xfffffeab , + .flags =IORESOURCE_MEM , + }, + [1 ] = { + .start =17 , + .flags =IORESOURCE_IRQ , + }, +}; + +static struct platform_device tmu1_device = { + .name ="sh_tmu" , + .id =1 , + .dev = { + .platform_data = &tmu1_platform_data, + }, + .resource = tmu1_resources, + .num_resources =ARRAY_SIZE (tmu1_resources), +}; + +static struct sh_timer_config tmu2_platform_data = { + .name ="TMU2" , + .channel_offset =0x1a , + .timer_bit =2 , + .clk ="module_clk" , +}; + +static struct resource tmu2_resources[] = { + [0 ] = { + .name ="TMU2" , + .start =0xfffffeac , + .end =0xfffffebb , + .flags =IORESOURCE_MEM , + }, + [1 ] = { + .start =18 , + .flags =IORESOURCE_IRQ , + }, +}; + +static struct platform_device tmu2_device = { + .name ="sh_tmu" , + .id =2 , + .dev = { + .platform_data = &tmu2_platform_data, + }, + .resource = tmu2_resources, + .num_resources =ARRAY_SIZE (tmu2_resources), +}; +static struct platform_device *sh770x_devices[]__initdata = { + &tmu0_device, + &tmu1_device, + &tmu2_device, &sci_device, &rtc_device, };
@@ -156,6 +252,18 @@ static int __init sh770x_devices_setup(v }__initcall (sh770x_devices_setup); +static struct platform_device *sh770x_early_devices[]__initdata = { + &tmu0_device, + &tmu1_device, + &tmu2_device, +}; + +void __init plat_early_device_setup (void ) +{ +early_platform_add_devices (sh770x_early_devices, +ARRAY_SIZE (sh770x_early_devices)); +} +void __init plat_irq_setup (void ) {register_intc_controller (&intc_desc);