commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=0c074a2a13cbb6e09880a150e1f5b8a2e2d55c06 branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk
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
