X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Farm%2Fmach-clps711x%2Ftime.c;h=428493dd4687a73c6512ba1a3ec4ed2716e8407a;hb=refs%2Fheads%2Fvserver;hp=58da84effd5e658c3db46221f8b660843bcf4fe2;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/arch/arm/mach-clps711x/time.c b/arch/arm/mach-clps711x/time.c index 58da84eff..428493dd4 100644 --- a/arch/arm/mach-clps711x/time.c +++ b/arch/arm/mach-clps711x/time.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -47,19 +48,21 @@ static unsigned long clps711x_gettimeoffset(void) * IRQ handler for the timer */ static irqreturn_t -p720t_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) +p720t_timer_interrupt(int irq, void *dev_id) { - timer_tick(regs); + write_seqlock(&xtime_lock); + timer_tick(); + write_sequnlock(&xtime_lock); return IRQ_HANDLED; } static struct irqaction clps711x_timer_irq = { .name = "CLPS711x Timer Tick", - .flags = SA_INTERRUPT, - .handler = p720t_timer_interrupt + .flags = IRQF_DISABLED | IRQF_TIMER, + .handler = p720t_timer_interrupt, }; -void __init clps711x_init_time(void) +static void __init clps711x_timer_init(void) { struct timespec tv; unsigned int syscon; @@ -71,9 +74,13 @@ void __init clps711x_init_time(void) clps_writel(LATCH-1, TC2D); /* 512kHz / 100Hz - 1 */ setup_irq(IRQ_TC2OI, &clps711x_timer_irq); - gettimeoffset = clps711x_gettimeoffset; tv.tv_nsec = 0; tv.tv_sec = clps_readl(RTCDR); do_settimeofday(&tv); } + +struct sys_timer clps711x_timer = { + .init = clps711x_timer_init, + .offset = clps711x_gettimeoffset, +};