diff options
Diffstat (limited to 'arch/sh/kernel/cpu/sh4a/setup-shx3.c')
| -rw-r--r-- | arch/sh/kernel/cpu/sh4a/setup-shx3.c | 209 | 
1 files changed, 207 insertions, 2 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/setup-shx3.c b/arch/sh/kernel/cpu/sh4a/setup-shx3.c index bd35f32534b..53c65fd9cce 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-shx3.c +++ b/arch/sh/kernel/cpu/sh4a/setup-shx3.c @@ -1,7 +1,7 @@  /* - * SH-X3 Setup + * SH-X3 Prototype Setup   * - *  Copyright (C) 2007  Paul Mundt + *  Copyright (C) 2007 - 2009  Paul Mundt   *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive @@ -12,6 +12,7 @@  #include <linux/serial.h>  #include <linux/serial_sci.h>  #include <linux/io.h> +#include <linux/sh_timer.h>  #include <asm/mmzone.h>  static struct plat_sci_port sci_platform_data[] = { @@ -48,17 +49,221 @@ static struct platform_device sci_device = {  	},  }; +static struct sh_timer_config tmu0_platform_data = { +	.name = "TMU0", +	.channel_offset = 0x04, +	.timer_bit = 0, +	.clk = "peripheral_clk", +	.clockevent_rating = 200, +}; + +static struct resource tmu0_resources[] = { +	[0] = { +		.name	= "TMU0", +		.start	= 0xffc10008, +		.end	= 0xffc10013, +		.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 = "peripheral_clk", +	.clocksource_rating = 200, +}; + +static struct resource tmu1_resources[] = { +	[0] = { +		.name	= "TMU1", +		.start	= 0xffc10014, +		.end	= 0xffc1001f, +		.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 = "peripheral_clk", +}; + +static struct resource tmu2_resources[] = { +	[0] = { +		.name	= "TMU2", +		.start	= 0xffc10020, +		.end	= 0xffc1002f, +		.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 sh_timer_config tmu3_platform_data = { +	.name = "TMU3", +	.channel_offset = 0x04, +	.timer_bit = 0, +	.clk = "peripheral_clk", +}; + +static struct resource tmu3_resources[] = { +	[0] = { +		.name	= "TMU3", +		.start	= 0xffc20008, +		.end	= 0xffc20013, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= 19, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device tmu3_device = { +	.name		= "sh_tmu", +	.id		= 3, +	.dev = { +		.platform_data	= &tmu3_platform_data, +	}, +	.resource	= tmu3_resources, +	.num_resources	= ARRAY_SIZE(tmu3_resources), +}; + +static struct sh_timer_config tmu4_platform_data = { +	.name = "TMU4", +	.channel_offset = 0x10, +	.timer_bit = 1, +	.clk = "peripheral_clk", +}; + +static struct resource tmu4_resources[] = { +	[0] = { +		.name	= "TMU4", +		.start	= 0xffc20014, +		.end	= 0xffc2001f, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= 20, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device tmu4_device = { +	.name		= "sh_tmu", +	.id		= 4, +	.dev = { +		.platform_data	= &tmu4_platform_data, +	}, +	.resource	= tmu4_resources, +	.num_resources	= ARRAY_SIZE(tmu4_resources), +}; + +static struct sh_timer_config tmu5_platform_data = { +	.name = "TMU5", +	.channel_offset = 0x1c, +	.timer_bit = 2, +	.clk = "peripheral_clk", +}; + +static struct resource tmu5_resources[] = { +	[0] = { +		.name	= "TMU5", +		.start	= 0xffc20020, +		.end	= 0xffc2002b, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= 21, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device tmu5_device = { +	.name		= "sh_tmu", +	.id		= 5, +	.dev = { +		.platform_data	= &tmu5_platform_data, +	}, +	.resource	= tmu5_resources, +	.num_resources	= ARRAY_SIZE(tmu5_resources), +}; + +static struct platform_device *shx3_early_devices[] __initdata = { +	&tmu0_device, +	&tmu1_device, +	&tmu2_device, +	&tmu3_device, +	&tmu4_device, +	&tmu5_device, +}; +  static struct platform_device *shx3_devices[] __initdata = {  	&sci_device,  };  static int __init shx3_devices_setup(void)  { +	int ret; + +	ret = platform_add_devices(shx3_early_devices, +				   ARRAY_SIZE(shx3_early_devices)); +	if (unlikely(ret != 0)) +		return ret; +  	return platform_add_devices(shx3_devices,  				    ARRAY_SIZE(shx3_devices));  }  __initcall(shx3_devices_setup); +void __init plat_early_device_setup(void) +{ +	early_platform_add_devices(shx3_early_devices, +				   ARRAY_SIZE(shx3_early_devices)); +} +  enum {  	UNUSED = 0,  |