X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Farm%2Fmach-ixp4xx%2Fcommon.c;h=24ffa323895c0215ae526e37ae5e87ba26ef0d57;hb=9e1bf581d67d87a1d7fc0ea500729e3a03643a26;hp=3e24140edf840a2319f339320715211ec91c4885;hpb=8d40237c730b8be87c1b80a5d96b9c603fefa829;p=linux-2.6.git diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 3e24140ed..24ffa3238 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c @@ -221,20 +221,16 @@ static unsigned long ixp4xx_gettimeoffset(void) static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) { - write_seqlock(&xtime_lock); - /* Clear Pending Interrupt by writing '1' to it */ *IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND; /* * Catch up with the real idea of time */ - while ((*IXP4XX_OSTS - last_jiffy_time) > LATCH) { + do { timer_tick(regs); last_jiffy_time += LATCH; - } - - write_sequnlock(&xtime_lock); + } while((*IXP4XX_OSTS - last_jiffy_time) > LATCH); return IRQ_HANDLED; } @@ -245,8 +241,10 @@ static struct irqaction ixp4xx_timer_irq = { .handler = ixp4xx_timer_interrupt }; -static void __init ixp4xx_timer_init(void) +void __init ixp4xx_init_time(void) { + gettimeoffset = ixp4xx_gettimeoffset; + /* Clear Pending Interrupt by writing '1' to it */ *IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND; @@ -261,7 +259,4 @@ static void __init ixp4xx_timer_init(void) setup_irq(IRQ_IXP4XX_TIMER1, &ixp4xx_timer_irq); } -struct sys_timer ixp4xx_timer = { - .init = ixp4xx_timer_init, - .offset = ixp4xx_gettimeoffset, -}; +