public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH] ARM: ixp4xx: Add "ask" handler for timer interrupts
@ 2012-12-01  7:33 Alexander Shiyan
  2012-12-01 13:05 ` Jason Cooper
  2012-12-01 21:25 ` Arnd Bergmann
  0 siblings, 2 replies; 17+ messages in thread
From: Alexander Shiyan @ 2012-12-01  7:33 UTC (permalink / raw)
  To: linux-arm-kernel

Rather than modify the EOI flags directly in the timer interrupt,
let's deal with these flags in the "ask" procedure.

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
 arch/arm/mach-ixp4xx/common.c      |   34 +++++++++++++++++++++++++---------
 drivers/input/misc/ixp4xx-beeper.c |    3 ---
 2 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c
index 8c0c0e2..27046ec 100644
--- a/arch/arm/mach-ixp4xx/common.c
+++ b/arch/arm/mach-ixp4xx/common.c
@@ -202,10 +202,28 @@ static void ixp4xx_irq_mask(struct irq_data *d)
 
 static void ixp4xx_irq_ack(struct irq_data *d)
 {
-	int line = (d->irq < 32) ? irq2gpio[d->irq] : -1;
+	int line;
 
-	if (line >= 0)
-		*IXP4XX_GPIO_GPISR = (1 << line);
+	switch (d->irq) {
+	case IRQ_IXP4XX_TIMER1:
+		*IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND;
+		break;
+	case IRQ_IXP4XX_TIMER2:
+		*IXP4XX_OSST = IXP4XX_OSST_TIMER_2_PEND;
+		break;
+	case IRQ_IXP4XX_TIMESTAMP:
+		*IXP4XX_OSST = IXP4XX_OSST_TIMER_TS_PEND;
+		break;
+	case IRQ_IXP4XX_WDOG:
+		*IXP4XX_OSST = IXP4XX_OSST_TIMER_WDOG_PEND;
+		break;
+	default:
+		line = (d->irq < 32) ? irq2gpio[d->irq] : -1;
+
+		if (line >= 0)
+			*IXP4XX_GPIO_GPISR = (1 << line);
+		break;
+	}
 }
 
 /*
@@ -247,6 +265,10 @@ void __init ixp4xx_init_irq(void)
 	/* Disable all interrupt */
 	*IXP4XX_ICMR = 0x0; 
 
+	/* Clear Timer Pending Interrupts */
+	*IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND | IXP4XX_OSST_TIMER_2_PEND |
+		       IXP4XX_OSST_TIMER_TS_PEND | IXP4XX_OSST_TIMER_WDOG_PEND;
+
 	if (cpu_is_ixp46x() || cpu_is_ixp43x()) {
 		/* Route upper 32 sources to IRQ instead of FIQ */
 		*IXP4XX_ICLR2 = 0x00;
@@ -274,9 +296,6 @@ static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id)
 {
 	struct clock_event_device *evt = dev_id;
 
-	/* Clear Pending Interrupt by writing '1' to it */
-	*IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND;
-
 	evt->event_handler(evt);
 
 	return IRQ_HANDLED;
@@ -294,9 +313,6 @@ void __init ixp4xx_timer_init(void)
 	/* Reset/disable counter */
 	*IXP4XX_OSRT1 = 0;
 
-	/* Clear Pending Interrupt by writing '1' to it */
-	*IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND;
-
 	/* Reset time-stamp counter */
 	*IXP4XX_OSTS = 0;
 
diff --git a/drivers/input/misc/ixp4xx-beeper.c b/drivers/input/misc/ixp4xx-beeper.c
index 6ab3dec..2923e47 100644
--- a/drivers/input/misc/ixp4xx-beeper.c
+++ b/drivers/input/misc/ixp4xx-beeper.c
@@ -78,9 +78,6 @@ static int ixp4xx_spkr_event(struct input_dev *dev, unsigned int type, unsigned
 
 static irqreturn_t ixp4xx_spkr_interrupt(int irq, void *dev_id)
 {
-	/* clear interrupt */
-	*IXP4XX_OSST = IXP4XX_OSST_TIMER_2_PEND;
-
 	/* flip the beeper output */
 	*IXP4XX_GPIO_GPOUTR ^= (1 << (unsigned int) dev_id);
 
-- 
1.7.8.6

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2012-12-03 23:40 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-01  7:33 [PATCH] ARM: ixp4xx: Add "ask" handler for timer interrupts Alexander Shiyan
2012-12-01 13:05 ` Jason Cooper
2012-12-01 13:14   ` Re[2]: " Alexander Shiyan
2012-12-01 15:41     ` Jason Cooper
2012-12-01 21:25 ` Arnd Bergmann
2012-12-01 21:45   ` Jason Cooper
2012-12-02  0:11     ` Arnd Bergmann
2012-12-02  6:02       ` Re[2]: " Alexander Shiyan
2012-12-02 13:13         ` Arnd Bergmann
2012-12-02 13:55           ` Re[4]: " Alexander Shiyan
2012-12-03 23:40             ` Arnd Bergmann
2012-12-02  8:09       ` [PATCH 1/2] ARM: ixp4xx: Moving the timer flags control in ixp4xx_irq_ack() procedure Alexander Shiyan
2012-12-02  8:09         ` [PATCH 2/2] ARM: ixp4xx: Using gpiolib rather than a private GPIO API Alexander Shiyan
2012-12-02 13:25           ` Arnd Bergmann
2012-12-02 13:24         ` [PATCH 1/2] ARM: ixp4xx: Moving the timer flags control in ixp4xx_irq_ack() procedure Arnd Bergmann
2012-12-02 13:37         ` Mikael Pettersson
2012-12-02 13:50           ` Re[2]: " Alexander Shiyan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox