sh: TMU platform data for sh7760
PATCH 1/1 sh: TMU platform data for sh7760
From: Magnus Damm <[email protected]>
This patch adds TMU platform data for sh7760. Both clockevent and clocksource support is enabled.
Signed-off-by Magnus Damm <[email protected]>
---
Compiles fine , but not run time tested due to lack of hardware.
arch/sh/kernel/cpu/sh4/setup-sh7760.c | 109 +++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+)
arch/sh/kernel/cpu/sh4/setup-sh7760.c +109 -0
@@ -10,6 +10,7 @@#include <linux/platform_device.h> #include <linux/init.h> #include <linux/serial.h> +#include <linux/sh_timer.h> #include <linux/serial_sci.h> #include <linux/io.h>
@@ -159,8 +160,104 @@ static struct platform_device sci_device }, }; +static struct sh_timer_config tmu0_platform_data = { + .name ="TMU0" , + .channel_offset =0x04 , + .timer_bit =0 , + .clk ="module_clk" , + .clockevent_rating =200 , +}; + +static struct resource tmu0_resources[] = { + [0 ] = { + .name ="TMU0" , + .start =0xffd80008 , + .end =0xffd80013 , + .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 =0x10 , + .timer_bit =1 , + .clk ="module_clk" , + .clocksource_rating =200 , +}; + +static struct resource tmu1_resources[] = { + [0 ] = { + .name ="TMU1" , + .start =0xffd80014 , + .end =0xffd8001f , + .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 =0x1c , + .timer_bit =2 , + .clk ="module_clk" , +}; + +static struct resource tmu2_resources[] = { + [0 ] = { + .name ="TMU2" , + .start =0xffd80020 , + .end =0xffd8002f , + .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 *sh7760_devices[]__initdata = { &sci_device, + &tmu0_device, + &tmu1_device, + &tmu2_device, };static int __init sh7760_devices_setup (void )
@@ -170,6 +267,18 @@ static int __init sh7760_devices_setup(v }__initcall (sh7760_devices_setup); +static struct platform_device *sh7760_early_devices[]__initdata = { + &tmu0_device, + &tmu1_device, + &tmu2_device, +}; + +void __init plat_early_device_setup (void ) +{ +early_platform_add_devices (sh7760_early_devices, +ARRAY_SIZE (sh7760_early_devices)); +} +#define INTC_ICR 0xffd00000UL#define INTC_ICR_IRLM (1 << 7)