summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBoris BREZILLON <boris.brezillon@free-electrons.com>2014-07-10 20:25:41 +0200
committerJason Cooper <jason@lakedaemon.net>2014-07-17 13:39:03 +0000
commit6704d12d688192366f3a70e6f8a85cb5a869cd5a (patch)
treea7b716611e60bdaa33f97361ae0e78a2913202be
parent3d61467f9bab36aee786f762730b73565dbef3bf (diff)
irqchip: atmel-aic: Define irq fixups for atmel SoCs
Define SoCs that need irq fixups before enabling the AIC irqchip. At the moment we're only fixing irq generated by the RTC block, but other fixups will be added later on. Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com> Link: https://lkml.kernel.org/r/1405016741-2407-4-git-send-email-boris.brezillon@free-electrons.com Signed-off-by: Jason Cooper <jason@lakedaemon.net>
-rw-r--r--drivers/irqchip/irq-atmel-aic.c15
-rw-r--r--drivers/irqchip/irq-atmel-aic5.c12
2 files changed, 27 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c
index b15b5667991..a82869e9fb2 100644
--- a/drivers/irqchip/irq-atmel-aic.c
+++ b/drivers/irqchip/irq-atmel-aic.c
@@ -211,6 +211,19 @@ static const struct irq_domain_ops aic_irq_ops = {
.xlate = aic_irq_domain_xlate,
};
+static void __init at91sam9_aic_irq_fixup(struct device_node *root)
+{
+ aic_common_rtc_irq_fixup(root);
+}
+
+static const struct of_device_id __initdata aic_irq_fixups[] = {
+ { .compatible = "atmel,at91sam9g45", .data = at91sam9_aic_irq_fixup },
+ { .compatible = "atmel,at91sam9n12", .data = at91sam9_aic_irq_fixup },
+ { .compatible = "atmel,at91sam9rl", .data = at91sam9_aic_irq_fixup },
+ { .compatible = "atmel,at91sam9x5", .data = at91sam9_aic_irq_fixup },
+ { /* sentinel */ },
+};
+
static int __init aic_of_init(struct device_node *node,
struct device_node *parent)
{
@@ -225,6 +238,8 @@ static int __init aic_of_init(struct device_node *node,
if (IS_ERR(domain))
return PTR_ERR(domain);
+ aic_common_irq_fixup(aic_irq_fixups);
+
aic_domain = domain;
gc = irq_get_domain_generic_chip(domain, 0);
diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index c9c753adc15..edb22708152 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -290,6 +290,16 @@ static const struct irq_domain_ops aic5_irq_ops = {
.xlate = aic5_irq_domain_xlate,
};
+static void __init sama5d3_aic_irq_fixup(struct device_node *root)
+{
+ aic_common_rtc_irq_fixup(root);
+}
+
+static const struct of_device_id __initdata aic5_irq_fixups[] = {
+ { .compatible = "atmel,sama5d3", .data = sama5d3_aic_irq_fixup },
+ { /* sentinel */ },
+};
+
static int __init aic5_of_init(struct device_node *node,
struct device_node *parent,
int nirqs)
@@ -310,6 +320,8 @@ static int __init aic5_of_init(struct device_node *node,
if (IS_ERR(domain))
return PTR_ERR(domain);
+ aic_common_irq_fixup(aic5_irq_fixups);
+
aic5_domain = domain;
nchips = aic5_domain->revmap_size / 32;
for (i = 0; i < nchips; i++) {