diff options
author | Andrew Victor <andrew@sanpeople.com> | 2006-11-30 04:01:47 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-11-30 17:51:36 -0500 |
commit | 1f4fd0a0d28fabf965815755f1a74ef91dfb5ca6 (patch) | |
tree | 09562e8467136cf545b5631a257a0e9d53a31a89 /arch/arm/mach-at91rm9200/irq.c | |
parent | 20127f6863990e1313178debe8c9cfe32d43b1dc (diff) |
[ARM] 3946/1: AT91: at91_arch_reset and at91_extern_irq
The external interrupt sources are different on the various AT91
processors. This patch introduces the global 'at91_extern_irq' variable
that contains a bitset of the available external interrupt sources.
The processor reset mechanism also differs on the various AT91
processors. This patch also adds a global 'at91_arch_reset' callback
(from system.h) into the processor-specific code to perform the reset.
Signed-off-by: Andrew Victor <andrew@sanpeople.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-at91rm9200/irq.c')
-rw-r--r-- | arch/arm/mach-at91rm9200/irq.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/arm/mach-at91rm9200/irq.c b/arch/arm/mach-at91rm9200/irq.c index 3e488117ca91..2cea07a34a85 100644 --- a/arch/arm/mach-at91rm9200/irq.c +++ b/arch/arm/mach-at91rm9200/irq.c | |||
@@ -47,6 +47,10 @@ static void at91_aic_unmask_irq(unsigned int irq) | |||
47 | at91_sys_write(AT91_AIC_IECR, 1 << irq); | 47 | at91_sys_write(AT91_AIC_IECR, 1 << irq); |
48 | } | 48 | } |
49 | 49 | ||
50 | unsigned int at91_extern_irq; | ||
51 | |||
52 | #define is_extern_irq(irq) ((1 << (irq)) & at91_extern_irq) | ||
53 | |||
50 | static int at91_aic_set_type(unsigned irq, unsigned type) | 54 | static int at91_aic_set_type(unsigned irq, unsigned type) |
51 | { | 55 | { |
52 | unsigned int smr, srctype; | 56 | unsigned int smr, srctype; |
@@ -59,14 +63,16 @@ static int at91_aic_set_type(unsigned irq, unsigned type) | |||
59 | srctype = AT91_AIC_SRCTYPE_RISING; | 63 | srctype = AT91_AIC_SRCTYPE_RISING; |
60 | break; | 64 | break; |
61 | case IRQT_LOW: | 65 | case IRQT_LOW: |
62 | if ((irq > AT91_ID_FIQ) && (irq < AT91RM9200_ID_IRQ0)) /* only supported on external interrupts */ | 66 | if ((irq == AT91_ID_FIQ) || is_extern_irq(irq)) /* only supported on external interrupts */ |
67 | srctype = AT91_AIC_SRCTYPE_LOW; | ||
68 | else | ||
63 | return -EINVAL; | 69 | return -EINVAL; |
64 | srctype = AT91_AIC_SRCTYPE_LOW; | ||
65 | break; | 70 | break; |
66 | case IRQT_FALLING: | 71 | case IRQT_FALLING: |
67 | if ((irq > AT91_ID_FIQ) && (irq < AT91RM9200_ID_IRQ0)) /* only supported on external interrupts */ | 72 | if ((irq == AT91_ID_FIQ) || is_extern_irq(irq)) /* only supported on external interrupts */ |
73 | srctype = AT91_AIC_SRCTYPE_FALLING; | ||
74 | else | ||
68 | return -EINVAL; | 75 | return -EINVAL; |
69 | srctype = AT91_AIC_SRCTYPE_FALLING; | ||
70 | break; | 76 | break; |
71 | default: | 77 | default: |
72 | return -EINVAL; | 78 | return -EINVAL; |