[ARM] 4534/1: AT91x40 interrupt support
authorGreg Ungerer <gerg@snapgear.com>
Mon, 30 Jul 2007 01:38:57 +0000 (02:38 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 12 Oct 2007 22:43:05 +0000 (23:43 +0100)
Interrupt setup support for the Atmel AT91x40 CPU family.

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Acked-by: Andrew Victor <andrew@sanpeople.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-at91/at91x40.c [new file with mode: 0644]

diff --git a/arch/arm/mach-at91/at91x40.c b/arch/arm/mach-at91/at91x40.c
new file mode 100644 (file)
index 0000000..1de121f
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * arch/arm/mach-at91/at91x40.c
+ *
+ * (C) Copyright 2007, Greg Ungerer <gerg@snapgear.com>
+ * Copyright (C) 2005 SAN People
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/irq.h>
+#include <asm/mach/arch.h>
+#include <asm/arch/at91x40.h>
+#include <asm/arch/at91_st.h>
+#include "generic.h"
+
+/*
+ * This is used in the gpio code, stub locally.
+ */
+int clk_enable(struct clk *clk)
+{
+       return 0;
+}
+
+void __init at91x40_initialize(unsigned long main_clock)
+{
+       at91_extern_irq = (1 << AT91X40_ID_IRQ0) | (1 << AT91X40_ID_IRQ1)
+                       | (1 << AT91X40_ID_IRQ2);
+}
+
+/*
+ * The default interrupt priority levels (0 = lowest, 7 = highest).
+ */
+static unsigned int at91x40_default_irq_priority[NR_AIC_IRQS] __initdata = {
+       7,      /* Advanced Interrupt Controller (FIQ) */
+       0,      /* System Peripherals */
+       0,      /* USART 0 */
+       0,      /* USART 1 */
+       2,      /* Timer Counter 0 */
+       2,      /* Timer Counter 1 */
+       2,      /* Timer Counter 2 */
+       0,      /* Watchdog timer */
+       0,      /* Parallel IO Controller A */
+       0,      /* Reserved */
+       0,      /* Reserved */
+       0,      /* Reserved */
+       0,      /* Reserved */
+       0,      /* Reserved */
+       0,      /* Reserved */
+       0,      /* Reserved */
+       0,      /* External IRQ0 */
+       0,      /* External IRQ1 */
+       0,      /* External IRQ2 */
+};
+
+void __init at91x40_init_interrupts(unsigned int priority[NR_AIC_IRQS])
+{
+       if (!priority)
+               priority = at91x40_default_irq_priority;
+
+       at91_aic_init(priority);
+}
+