Skip to content

Commit

Permalink
irqchip: atmel-aic: Implement RTC irq fixup
Browse files Browse the repository at this point in the history
Provide an implementation to fix RTC irqs before enabling the irqchip.

This was previously done in arch/arm/mach-at91/sysirq_mask.c but as we're
trying to use standard implementation (IRQCHIP_DECLARE and automatic call
of irqchip_init within arch/arm/kernel/irq.c) we need to do those fixups
in the irqchip driver.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Link: https://lkml.kernel.org/r/1405016741-2407-3-git-send-email-boris.brezillon@free-electrons.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
  • Loading branch information
Boris BREZILLON authored and Jason Cooper committed Jul 17, 2014
1 parent b2f579b commit 3d61467
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
28 changes: 28 additions & 0 deletions drivers/irqchip/irq-atmel-aic-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,34 @@ static void __init aic_common_ext_irq_of_init(struct irq_domain *domain)
}
}

#define AT91_RTC_IDR 0x24
#define AT91_RTC_IMR 0x28
#define AT91_RTC_IRQ_MASK 0x1f

void __init aic_common_rtc_irq_fixup(struct device_node *root)
{
struct device_node *np;
void __iomem *regs;

np = of_find_compatible_node(root, NULL, "atmel,at91rm9200-rtc");
if (!np)
np = of_find_compatible_node(root, NULL,
"atmel,at91sam9x5-rtc");

if (!np)
return;

regs = of_iomap(np, 0);
of_node_put(np);

if (!regs)
return;

writel(AT91_RTC_IRQ_MASK, regs + AT91_RTC_IDR);

iounmap(regs);
}

void __init aic_common_irq_fixup(const struct of_device_id *matches)
{
struct device_node *root = of_find_node_by_path("/");
Expand Down
2 changes: 2 additions & 0 deletions drivers/irqchip/irq-atmel-aic-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ struct irq_domain *__init aic_common_of_init(struct device_node *node,
const struct irq_domain_ops *ops,
const char *name, int nirqs);

void __init aic_common_rtc_irq_fixup(struct device_node *root);

void __init aic_common_irq_fixup(const struct of_device_id *matches);

#endif /* __IRQ_ATMEL_AIC_COMMON_H */

0 comments on commit 3d61467

Please sign in to comment.