aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/irqchip
diff options
context:
space:
mode:
authorBoris BREZILLON <boris.brezillon@free-electrons.com>2014-07-10 14:25:41 -0400
committerJason Cooper <jason@lakedaemon.net>2014-07-17 09:39:03 -0400
commit6704d12d688192366f3a70e6f8a85cb5a869cd5a (patch)
treea7b716611e60bdaa33f97361ae0e78a2913202be /drivers/irqchip
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>
Diffstat (limited to 'drivers/irqchip')
-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 b15b5667991c..a82869e9fb26 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 = {
211 .xlate = aic_irq_domain_xlate, 211 .xlate = aic_irq_domain_xlate,
212}; 212};
213 213
214static void __init at91sam9_aic_irq_fixup(struct device_node *root)
215{
216 aic_common_rtc_irq_fixup(root);
217}
218
219static const struct of_device_id __initdata aic_irq_fixups[] = {
220 { .compatible = "atmel,at91sam9g45", .data = at91sam9_aic_irq_fixup },
221 { .compatible = "atmel,at91sam9n12", .data = at91sam9_aic_irq_fixup },
222 { .compatible = "atmel,at91sam9rl", .data = at91sam9_aic_irq_fixup },
223 { .compatible = "atmel,at91sam9x5", .data = at91sam9_aic_irq_fixup },
224 { /* sentinel */ },
225};
226
214static int __init aic_of_init(struct device_node *node, 227static int __init aic_of_init(struct device_node *node,
215 struct device_node *parent) 228 struct device_node *parent)
216{ 229{
@@ -225,6 +238,8 @@ static int __init aic_of_init(struct device_node *node,
225 if (IS_ERR(domain)) 238 if (IS_ERR(domain))
226 return PTR_ERR(domain); 239 return PTR_ERR(domain);
227 240
241 aic_common_irq_fixup(aic_irq_fixups);
242
228 aic_domain = domain; 243 aic_domain = domain;
229 gc = irq_get_domain_generic_chip(domain, 0); 244 gc = irq_get_domain_generic_chip(domain, 0);
230 245
diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index c9c753adc15d..edb227081524 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 = {
290 .xlate = aic5_irq_domain_xlate, 290 .xlate = aic5_irq_domain_xlate,
291}; 291};
292 292
293static void __init sama5d3_aic_irq_fixup(struct device_node *root)
294{
295 aic_common_rtc_irq_fixup(root);
296}
297
298static const struct of_device_id __initdata aic5_irq_fixups[] = {
299 { .compatible = "atmel,sama5d3", .data = sama5d3_aic_irq_fixup },
300 { /* sentinel */ },
301};
302
293static int __init aic5_of_init(struct device_node *node, 303static int __init aic5_of_init(struct device_node *node,
294 struct device_node *parent, 304 struct device_node *parent,
295 int nirqs) 305 int nirqs)
@@ -310,6 +320,8 @@ static int __init aic5_of_init(struct device_node *node,
310 if (IS_ERR(domain)) 320 if (IS_ERR(domain))
311 return PTR_ERR(domain); 321 return PTR_ERR(domain);
312 322
323 aic_common_irq_fixup(aic5_irq_fixups);
324
313 aic5_domain = domain; 325 aic5_domain = domain;
314 nchips = aic5_domain->revmap_size / 32; 326 nchips = aic5_domain->revmap_size / 32;
315 for (i = 0; i < nchips; i++) { 327 for (i = 0; i < nchips; i++) {