From 3c77df70138b11db40f5fb77793447bb556d77f5 Mon Sep 17 00:00:00 2001
From: lars <lars@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Sat, 21 Aug 2010 15:58:44 +0000
Subject: [ifxmips] Danube: Fix irq ack

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22748 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 .../files-2.6.33/arch/mips/ifxmips/danube/irq.c    | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

(limited to 'target')

diff --git a/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c b/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c
index 18b8d01d4..ce198e321 100644
--- a/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c
+++ b/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c
@@ -55,6 +55,26 @@ ifxmips_mask_and_ack_irq(unsigned int irq_nr)
 }
 EXPORT_SYMBOL(ifxmips_mask_and_ack_irq);
 
+static void
+ifxmips_ack_irq(unsigned int irq_nr)
+{
+	int i;
+	u32 *isr = IFXMIPS_ICU_IM0_ISR;
+
+	irq_nr -= INT_NUM_IRQ0;
+	for (i = 0; i <= 4; i++)
+	{
+		if (irq_nr < INT_NUM_IM_OFFSET)
+		{
+			ifxmips_w32((1 << irq_nr), isr);
+			return;
+		}
+		isr += IFXMIPS_ICU_OFFSET;
+		irq_nr -= INT_NUM_IM_OFFSET;
+	}
+}
+
+
 void
 ifxmips_enable_irq(unsigned int irq_nr)
 {
@@ -96,7 +116,7 @@ ifxmips_irq_type = {
 	.enable = ifxmips_enable_irq,
 	.disable = ifxmips_disable_irq,
 	.unmask = ifxmips_enable_irq,
-	.ack = ifxmips_end_irq,
+	.ack = ifxmips_ack_irq,
 	.mask = ifxmips_disable_irq,
 	.mask_ack = ifxmips_mask_and_ack_irq,
 	.end = ifxmips_end_irq,
-- 
cgit v1.2.3