commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=0870ae4ab0409fd6319a388069735c1ddd1d2808
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/2012R2

Signed-off-by: Steven Miao <[email protected]>
---
 arch/blackfin/include/asm/icc.h     |    1 +
 arch/blackfin/mach-bf561/icc.c      |   10 ++++++
 arch/blackfin/mach-bf609/icc.c      |   59 +++++++++++++++++++++++++++++++++++
 drivers/staging/icc/core/protocol.c |   51 +-----------------------------
 4 files changed, 72 insertions(+), 49 deletions(-)

diff --git a/arch/blackfin/include/asm/icc.h b/arch/blackfin/include/asm/icc.h
index 21e1b35..7a1f802 100644
--- a/arch/blackfin/include/asm/icc.h
+++ b/arch/blackfin/include/asm/icc.h
@@ -30,5 +30,6 @@ struct icc_peri_resource {
 void platform_send_ipi(cpumask_t callmap, int irq);
 void platform_send_ipi_cpu(unsigned int cpu, int irq);
 void platform_clear_ipi(unsigned int cpu, int irq);
+int platform_res_manage_request_irq(uint16_t subid, unsigned int cpu);
 extern struct icc_peri_resource icc_peri_array[];
 #endif
diff --git a/arch/blackfin/mach-bf561/icc.c b/arch/blackfin/mach-bf561/icc.c
index 0580179..ac74f14 100644
--- a/arch/blackfin/mach-bf561/icc.c
+++ b/arch/blackfin/mach-bf561/icc.c
@@ -34,3 +34,13 @@ void platform_clear_ipi(unsigned int cpu, int irq)
 	bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | (1 << (offset + cpu)));
 	SSYNC();
 }
+
+int platform_res_manage_request_irq(uint16_t subid, unsigned int cpu)
+{
+	return 0;
+}
+
+void platform_res_manage_free_irq(uint16_t subid)
+{
+	return 0;
+}
diff --git a/arch/blackfin/mach-bf609/icc.c b/arch/blackfin/mach-bf609/icc.c
index 271ba50..96314e2 100644
--- a/arch/blackfin/mach-bf609/icc.c
+++ b/arch/blackfin/mach-bf609/icc.c
@@ -2,8 +2,11 @@
 #include <linux/kernel.h>
 #include <linux/interrupt.h>
 #include <linux/delay.h>
+#include <linux/irq.h>
+#include <linux/gpio.h>
 #include <mach/pm.h>
 #include <asm/icc.h>
+#include <asm/irq_handler.h>
 
 void platform_send_ipi_cpu(unsigned int cpu, int irq)
 {
@@ -29,3 +32,59 @@ void platform_clear_ipi(unsigned int cpu, int irq)
 {
 	BUG_ON(cpu >= 2);
 }
+
+static irqreturn_t coreb_resource_manage_dummy(int irq, void *dev_id)
+{
+	return 1;
+}
+
+int platform_res_manage_request_irq(uint16_t subid, unsigned int cpu)
+{
+	int i, n;
+	int ret;
+	unsigned int bank, bank_base;
+
+	if (((subid - IRQ_PINT0) >= 0) && ((subid - IRQ_PINT0) < NR_PINT_SYS_IRQS)) {
+		bank = subid - IRQ_PINT0;
+		bank_base = GPIO_IRQ_BASE + (bank << 4);
+		for (i = 0; i < GPIO_BANKSIZE; i++) {
+			ret = request_irq(bank_base + i,
+				coreb_resource_manage_dummy,
+					0, "coreb dummy", NULL);
+			if (ret) {
+				n = i;
+				for (i = 0; i < n; i++)
+					free_irq(bank_base + i, NULL);
+				return ret;
+			}
+		}
+		icc_irq_set_affinity(IRQ_PINT0 + bank, cpumask_of(cpu));
+	} else {
+		ret = request_irq(subid, coreb_resource_manage_dummy,
+				0, "coreb dummy", NULL);
+		if (ret) {
+			printk(KERN_DEBUG "request irq %d failed\n", subid);
+			return ret;
+		}
+		icc_irq_set_affinity(subid, cpumask_of(cpu));
+	}
+
+	return 0;
+}
+
+void platform_res_manage_free_irq(uint16_t subid)
+{
+	int i;
+	unsigned int bank, bank_base;
+
+	if (((subid - IRQ_PINT0) >= 0) && ((subid - IRQ_PINT0) < NR_PINT_SYS_IRQS)) {
+		bank = subid - IRQ_PINT0;
+		bank_base = GPIO_IRQ_BASE + (bank << 4);
+		for (i = 0; i < GPIO_BANKSIZE; i++)
+			free_irq(bank_base + i, NULL);
+		icc_irq_set_affinity(IRQ_PINT0 + bank, cpumask_of(0));
+	} else {
+		free_irq(subid, NULL);
+		icc_irq_set_affinity(subid, cpumask_of(0));
+	}
+}
diff --git a/drivers/staging/icc/core/protocol.c b/drivers/staging/icc/core/protocol.c
index ecb5ee8..a2ec26c 100644
--- a/drivers/staging/icc/core/protocol.c
+++ b/drivers/staging/icc/core/protocol.c
@@ -25,7 +25,6 @@
 #include <asm/icc.h>
 #include <asm/dma.h>
 #include <asm/portmux.h>
-#include <asm/irq_handler.h>
 
 #define DRIVER_NAME "icc"
 
@@ -1255,60 +1254,14 @@ void res_manage_free_gpio(uint16_t subid)
 	gpio_free(subid);
 }
 
-static irqreturn_t coreb_resource_manage_dummy(int irq, void *dev_id)
-{
-	return 1;
-}
-
 int res_manage_request_irq(uint16_t subid, unsigned int cpu)
 {
-	int i, n;
-	int ret;
-	unsigned int bank, bank_base;
-
-	if (((subid - IRQ_PINT0) >= 0) && ((subid - IRQ_PINT0) < NR_PINT_SYS_IRQS)) {
-		bank = subid - IRQ_PINT0;
-		bank_base = GPIO_IRQ_BASE + (bank << 4);
-		for (i = 0; i < GPIO_BANKSIZE; i++) {
-			ret = request_irq(bank_base + i,
-				coreb_resource_manage_dummy,
-					0, "coreb dummy", NULL);
-			if (ret) {
-				n = i;
-				for (i = 0; i < n; i++)
-					free_irq(bank_base + i, NULL);
-				return ret;
-			}
-		}
-		icc_irq_set_affinity(IRQ_PINT0 + bank, cpumask_of(cpu));
-	} else {
-		ret = request_irq(subid, coreb_resource_manage_dummy,
-				0, "coreb dummy", NULL);
-		if (ret) {
-			sm_debug("Fail to request IRQ\n");
-			return ret;
-		}
-		icc_irq_set_affinity(subid, cpumask_of(cpu));
-	}
-
-	return 0;
+	return platform_res_manage_request_irq(subid, cpu);
 }
 
 void res_manage_free_irq(uint16_t subid)
 {
-	int i, n;
-	unsigned int bank, bank_base;
-
-	if (((subid - IRQ_PINT0) >= 0) && ((subid - IRQ_PINT0) < NR_PINT_SYS_IRQS)) {
-		bank = subid - IRQ_PINT0;
-		bank_base = GPIO_IRQ_BASE + (bank << 4);
-		for (i = 0; i < GPIO_BANKSIZE; i++)
-			free_irq(bank_base + i, NULL);
-		icc_irq_set_affinity(IRQ_PINT0 + bank, cpumask_of(0));
-	} else {
-		free_irq(subid, NULL);
-		icc_irq_set_affinity(subid, cpumask_of(0));
-	}
+	return res_manage_free_irq(subid);
 }
 
 int res_manage_request_dma(uint16_t subid)
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to