X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Farm%2Fcommon%2Ftime-acorn.c;h=486add853fb88fcaf515afd2e7fc6cb1efbaac13;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=eb06282962eb9d26cbce5c6c99b7a123480ba7c8;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/arch/arm/common/time-acorn.c b/arch/arm/common/time-acorn.c index eb0628296..486add853 100644 --- a/arch/arm/common/time-acorn.c +++ b/arch/arm/common/time-acorn.c @@ -15,6 +15,7 @@ */ #include #include +#include #include #include @@ -22,7 +23,7 @@ #include -static unsigned long ioctime_gettimeoffset(void) +unsigned long ioc_timer_gettimeoffset(void) { unsigned int count1, count2, status; long offset; @@ -62,6 +63,34 @@ void __init ioctime_init(void) ioc_writeb(LATCH & 255, IOC_T0LTCHL); ioc_writeb(LATCH >> 8, IOC_T0LTCHH); ioc_writeb(0, IOC_T0GO); +} + +static irqreturn_t +ioc_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + write_seqlock(&xtime_lock); + timer_tick(regs); + write_sequnlock(&xtime_lock); + return IRQ_HANDLED; +} + +static struct irqaction ioc_timer_irq = { + .name = "timer", + .flags = SA_INTERRUPT, + .handler = ioc_timer_interrupt +}; - gettimeoffset = ioctime_gettimeoffset; +/* + * Set up timer interrupt. + */ +static void __init ioc_timer_init(void) +{ + ioctime_init(); + setup_irq(IRQ_TIMER, &ioc_timer_irq); } + +struct sys_timer ioc_timer = { + .init = ioc_timer_init, + .offset = ioc_timer_gettimeoffset, +}; +