X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Farm%2Fmach-lh7a40x%2Ftime.c;h=51e1c814b40058972ad49b4571a13cf9f8b694a0;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=61ada24c78a7d93cd7085db75bd4c197c9c8ac2f;hpb=5fc42a6ed0ec81088c37caadb45898ae6cd0ad2c;p=linux-2.6.git diff --git a/arch/arm/mach-lh7a40x/time.c b/arch/arm/mach-lh7a40x/time.c index 61ada24c7..51e1c814b 100644 --- a/arch/arm/mach-lh7a40x/time.c +++ b/arch/arm/mach-lh7a40x/time.c @@ -20,14 +20,15 @@ #include #include +#include "common.h" #if HZ < 100 -# define TIMER_CONTROL TIMER_CONTROL1 -# define TIMER_LOAD TIMER_LOAD1 +# define TIMER_CONTROL TIMER_CONTROL2 +# define TIMER_LOAD TIMER_LOAD2 # define TIMER_CONSTANT (508469/HZ) # define TIMER_MODE (TIMER_C_ENABLE | TIMER_C_PERIODIC | TIMER_C_508KHZ) -# define TIMER_EOI TIMER_EOI1 -# define TIMER_IRQ IRQ_T1UI +# define TIMER_EOI TIMER_EOI2 +# define TIMER_IRQ IRQ_T2UI #else # define TIMER_CONTROL TIMER_CONTROL3 # define TIMER_LOAD TIMER_LOAD3 @@ -40,9 +41,13 @@ static irqreturn_t lh7a40x_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) { + write_seqlock(&xtime_lock); + TIMER_EOI = 0; timer_tick(regs); + write_sequnlock(&xtime_lock); + return IRQ_HANDLED; } @@ -52,7 +57,7 @@ static struct irqaction lh7a40x_timer_irq = { .handler = lh7a40x_timer_interrupt }; -void __init lh7a40x_init_time(void) +static void __init lh7a40x_timer_init(void) { /* Stop/disable all timers */ TIMER_CONTROL1 = 0; @@ -65,3 +70,6 @@ void __init lh7a40x_init_time(void) TIMER_CONTROL = TIMER_MODE; } +struct sys_timer lh7a40x_timer = { + .init = &lh7a40x_timer_init, +};