aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-ns9xxx/time.c
diff options
context:
space:
mode:
authorUwe Kleine-König <ukleinek@informatik.uni-freiburg.de>2007-08-07 16:08:21 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2007-10-12 18:43:11 -0400
commitbf62e8626963d0002315facb786a8833d404e21e (patch)
tree942ee4379efec27289d8c06a28b374bd0d9181b2 /arch/arm/mach-ns9xxx/time.c
parent9f1ccefe3f74e642515ba58868cfd6924056d9a8 (diff)
[ARM] 4545/1: ns9xxx: simplify irq ack'ing
Now the drivers are responsible to clear the irq in the respective device, which seems to be the normal thing to do. So the ack'ing of the timer irq moved to time.c. Signed-off-by: Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-ns9xxx/time.c')
-rw-r--r--arch/arm/mach-ns9xxx/time.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/arm/mach-ns9xxx/time.c b/arch/arm/mach-ns9xxx/time.c
index b97d0c54a388..3327d302618d 100644
--- a/arch/arm/mach-ns9xxx/time.c
+++ b/arch/arm/mach-ns9xxx/time.c
@@ -24,10 +24,24 @@ static u32 usecs_per_tick;
24static irqreturn_t 24static irqreturn_t
25ns9xxx_timer_interrupt(int irq, void *dev_id) 25ns9xxx_timer_interrupt(int irq, void *dev_id)
26{ 26{
27 int timerno = irq - IRQ_TIMER0;
28 u32 tc;
29
27 write_seqlock(&xtime_lock); 30 write_seqlock(&xtime_lock);
28 timer_tick(); 31 timer_tick();
29 write_sequnlock(&xtime_lock); 32 write_sequnlock(&xtime_lock);
30 33
34 /* clear irq */
35 tc = SYS_TC(timerno);
36 if (REGGET(tc, SYS_TCx, REN) == SYS_TCx_REN_DIS) {
37 REGSET(tc, SYS_TCx, TEN, DIS);
38 SYS_TC(timerno) = tc;
39 }
40 REGSET(tc, SYS_TCx, INTC, SET);
41 SYS_TC(timerno) = tc;
42 REGSET(tc, SYS_TCx, INTC, UNSET);
43 SYS_TC(timerno) = tc;
44
31 return IRQ_HANDLED; 45 return IRQ_HANDLED;
32} 46}
33 47