summaryrefslogtreecommitdiff
path: root/drivers/irqchip/irq-bcm2835.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/irqchip/irq-bcm2835.c')
-rw-r--r--drivers/irqchip/irq-bcm2835.c22
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);