irqchip: atmel-aic: Define irq fixups for atmel SoCs
authorBoris BREZILLON <boris.brezillon@free-electrons.com>
Thu, 10 Jul 2014 18:25:41 +0000 (20:25 +0200)
committerJason Cooper <jason@lakedaemon.net>
Thu, 17 Jul 2014 13:39:03 +0000 (13:39 +0000)
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>
drivers/irqchip/irq-atmel-aic.c
drivers/irqchip/irq-atmel-aic5.c

index b15b5667991cbdcfa94f0f34de25fb4888d11e9f..a82869e9fb264eeb131a5d6c60a77b33438118e9 100644 (file)
@@ -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);
 
index c9c753adc15d49452645a7632d6eda6745bd28cd..edb2270815246cf8aece1406fdab20ec40de2b53 100644 (file)
@@ -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++) {