diff options
Diffstat (limited to 'drivers/irqchip/irq-bcm2835.c')
-rw-r--r-- | drivers/irqchip/irq-bcm2835.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/irqchip/irq-bcm2835.c b/drivers/irqchip/irq-bcm2835.c index 1693b8e..16c78f1 100644 --- a/drivers/irqchip/irq-bcm2835.c +++ b/drivers/irqchip/irq-bcm2835.c @@ -49,11 +49,9 @@ #include <linux/of_address.h> #include <linux/of_irq.h> #include <linux/irqdomain.h> +#include <linux/irqchip/bcm2835.h> #include <asm/exception.h> -#include <asm/mach/irq.h> - -#include "irqchip.h" /* Put the bank and irq (32 bits) into the hwirq */ #define MAKE_HWIRQ(b, n) ((b << 5) | (n)) @@ -95,8 +93,6 @@ struct armctrl_ic { }; static struct armctrl_ic intc __read_mostly; -static asmlinkage void __exception_irq_entry bcm2835_handle_irq( - struct pt_regs *regs); static void armctrl_mask_irq(struct irq_data *d) { @@ -168,11 +164,19 @@ static int __init armctrl_of_init(struct device_node *node, set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); } } - - set_handle_irq(bcm2835_handle_irq); return 0; } +static struct of_device_id irq_of_match[] __initconst = { + { .compatible = "brcm,bcm2835-armctrl-ic", .data = armctrl_of_init }, + { } +}; + +void __init bcm2835_init_irq(void) +{ + of_irq_init(irq_of_match); +} + /* * Handle each interrupt across the entire interrupt controller. This reads the * status register before handling each interrupt, which is necessary given that @@ -196,7 +200,7 @@ static void armctrl_handle_shortcut(int bank, struct pt_regs *regs, handle_IRQ(irq_linear_revmap(intc.domain, irq), regs); } -static asmlinkage void __exception_irq_entry bcm2835_handle_irq( +asmlinkage void __exception_irq_entry bcm2835_handle_irq( struct pt_regs *regs) { u32 stat, irq; @@ -218,5 +222,3 @@ static asmlinkage void __exception_irq_entry bcm2835_handle_irq( } } } - -IRQCHIP_DECLARE(bcm2835_armctrl_ic, "brcm,bcm2835-armctrl-ic", armctrl_of_init); |