diff options
author | Arve Hjønnevåg <arve@android.com> | 2010-09-27 17:42:21 -0700 |
---|---|---|
committer | Daniel Thompson <daniel.thompson@linaro.org> | 2014-05-12 17:12:47 +0100 |
commit | ae6341f7719151db78c24605194543367fba92f7 (patch) | |
tree | a4482811cbc7cb1207bba1ae0c3a57608c403a43 | |
parent | 9254909730262457dc99bfab80c47fb7ee560421 (diff) |
ARM: VIC: Add vic_set_fiq function to select if an interrupt should generate an IRQ or FIQ
Change-Id: I1ac9b992b7fe31d392578334d47227363bcac685
Signed-off-by: Arve Hjønnevåg <arve@android.com>
-rw-r--r-- | drivers/irqchip/irq-vic.c | 23 | ||||
-rw-r--r-- | include/linux/irqchip/arm-vic.h | 1 |
2 files changed, 24 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-vic.c b/drivers/irqchip/irq-vic.c index 7d35287f9e90..f31222278b11 100644 --- a/drivers/irqchip/irq-vic.c +++ b/drivers/irqchip/irq-vic.c @@ -337,6 +337,29 @@ static void vic_unmask_irq(struct irq_data *d) writel(1 << irq, base + VIC_INT_ENABLE); } +static DEFINE_SPINLOCK(vic_intselect_lock); +int vic_set_fiq(unsigned int irq, bool enable) +{ + u32 int_select; + u32 mask; + unsigned long irq_flags; + void __iomem *base = irq_get_chip_data(irq); + irq &= 31; + mask = 1 << irq; + + spin_lock_irqsave(&vic_intselect_lock, irq_flags); + int_select = readl(base + VIC_INT_SELECT); + if (enable) + int_select |= mask; + else + int_select &= ~mask; + writel(int_select, base + VIC_INT_SELECT); + spin_unlock_irqrestore(&vic_intselect_lock, irq_flags); + + return 0; +} +EXPORT_SYMBOL(vic_set_fiq); + #if defined(CONFIG_PM) static struct vic_device *vic_from_irq(unsigned int irq) { diff --git a/include/linux/irqchip/arm-vic.h b/include/linux/irqchip/arm-vic.h index ba46c794b4e5..61ee4c95a20d 100644 --- a/include/linux/irqchip/arm-vic.h +++ b/include/linux/irqchip/arm-vic.h @@ -34,5 +34,6 @@ void __vic_init(void __iomem *base, int parent_irq, int irq_start, void vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, u32 resume_sources); int vic_init_cascaded(void __iomem *base, unsigned int parent_irq, u32 vic_sources, u32 resume_sources); +int vic_set_fiq(unsigned int irq, bool enable); #endif |