Commit 6704d12d authored by Boris BREZILLON's avatar Boris BREZILLON Committed by Jason Cooper

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: default avatarBoris BREZILLON <boris.brezillon@free-electrons.com>
Link: https://lkml.kernel.org/r/1405016741-2407-4-git-send-email-boris.brezillon@free-electrons.comSigned-off-by: default avatarJason Cooper <jason@lakedaemon.net>
parent 3d61467f
...@@ -211,6 +211,19 @@ static const struct irq_domain_ops aic_irq_ops = { ...@@ -211,6 +211,19 @@ static const struct irq_domain_ops aic_irq_ops = {
.xlate = aic_irq_domain_xlate, .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, static int __init aic_of_init(struct device_node *node,
struct device_node *parent) struct device_node *parent)
{ {
...@@ -225,6 +238,8 @@ static int __init aic_of_init(struct device_node *node, ...@@ -225,6 +238,8 @@ static int __init aic_of_init(struct device_node *node,
if (IS_ERR(domain)) if (IS_ERR(domain))
return PTR_ERR(domain); return PTR_ERR(domain);
aic_common_irq_fixup(aic_irq_fixups);
aic_domain = domain; aic_domain = domain;
gc = irq_get_domain_generic_chip(domain, 0); gc = irq_get_domain_generic_chip(domain, 0);
......
...@@ -290,6 +290,16 @@ static const struct irq_domain_ops aic5_irq_ops = { ...@@ -290,6 +290,16 @@ static const struct irq_domain_ops aic5_irq_ops = {
.xlate = aic5_irq_domain_xlate, .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, static int __init aic5_of_init(struct device_node *node,
struct device_node *parent, struct device_node *parent,
int nirqs) int nirqs)
...@@ -310,6 +320,8 @@ static int __init aic5_of_init(struct device_node *node, ...@@ -310,6 +320,8 @@ static int __init aic5_of_init(struct device_node *node,
if (IS_ERR(domain)) if (IS_ERR(domain))
return PTR_ERR(domain); return PTR_ERR(domain);
aic_common_irq_fixup(aic5_irq_fixups);
aic5_domain = domain; aic5_domain = domain;
nchips = aic5_domain->revmap_size / 32; nchips = aic5_domain->revmap_size / 32;
for (i = 0; i < nchips; i++) { for (i = 0; i < nchips; i++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment