X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Farm%2Fmach-ebsa110%2Fcore.c;h=ef362d44949d41d678128f3c713f8e43acc81c51;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=07c556392a0344e9ca16958c4947cdbd06822bf5;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c index 07c556392..ef362d449 100644 --- a/arch/arm/mach-ebsa110/core.c +++ b/arch/arm/mach-ebsa110/core.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -151,6 +152,8 @@ ebsa110_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) { u32 count; + write_seqlock(&xtime_lock); + /* latch and read timer 1 */ __raw_writeb(0x40, PIT_CTRL); count = __raw_readb(PIT_T1); @@ -163,6 +166,8 @@ ebsa110_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) timer_tick(regs); + write_sequnlock(&xtime_lock); + return IRQ_HANDLED; } @@ -175,7 +180,7 @@ static struct irqaction ebsa110_timer_irq = { /* * Set up timer interrupt. */ -static void __init ebsa110_init_time(void) +static void __init ebsa110_timer_init(void) { /* * Timer 1, mode 2, LSB/MSB @@ -184,11 +189,49 @@ static void __init ebsa110_init_time(void) __raw_writeb(COUNT & 0xff, PIT_T1); __raw_writeb(COUNT >> 8, PIT_T1); - gettimeoffset = ebsa110_gettimeoffset; - setup_irq(IRQ_EBSA110_TIMER0, &ebsa110_timer_irq); } +static struct sys_timer ebsa110_timer = { + .init = ebsa110_timer_init, + .offset = ebsa110_gettimeoffset, +}; + +static struct plat_serial8250_port serial_platform_data[] = { + { + .iobase = 0x3f8, + .irq = 1, + .uartclk = 1843200, + .regshift = 0, + .iotype = UPIO_PORT, + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, + }, + { + .iobase = 0x2f8, + .irq = 2, + .uartclk = 1843200, + .regshift = 0, + .iotype = UPIO_PORT, + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, + }, + { }, +}; + +static struct platform_device serial_device = { + .name = "serial8250", + .id = 0, + .dev = { + .platform_data = serial_platform_data, + }, +}; + +static int __init ebsa110_init(void) +{ + return platform_device_register(&serial_device); +} + +arch_initcall(ebsa110_init); + MACHINE_START(EBSA110, "EBSA110") MAINTAINER("Russell King") BOOT_MEM(0x00000000, 0xe0000000, 0xe0000000) @@ -198,5 +241,5 @@ MACHINE_START(EBSA110, "EBSA110") SOFT_REBOOT MAPIO(ebsa110_map_io) INITIRQ(ebsa110_init_irq) - INITTIME(ebsa110_init_time) + .timer = &ebsa110_timer, MACHINE_END