diff options
author | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 18:40:39 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 18:40:39 -0500 |
commit | ea14fad0d416354a4e9bb1a04f32acba706f9548 (patch) | |
tree | 2c8acc5331f189aef1d40ddce3f40d6be9314e77 /arch/arm/mach-at91rm9200/irq.c | |
parent | 6ee7e78e7c78d871409ad4df30551c9355be7d0e (diff) | |
parent | 6705cda24fad1cb0ac82ac4f312df8ec735b39b0 (diff) |
Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (76 commits)
[ARM] 4002/1: S3C24XX: leave parent IRQs unmasked
[ARM] 4001/1: S3C24XX: shorten reboot time
[ARM] 3983/2: remove unused argument to __bug()
[ARM] 4000/1: Osiris: add third serial port in
[ARM] 3999/1: RX3715: suspend to RAM support
[ARM] 3998/1: VR1000: LED platform devices
[ARM] 3995/1: iop13xx: add iop13xx support
[ARM] 3968/1: iop13xx: add iop13xx_defconfig
[ARM] Update mach-types
[ARM] Allow gcc to optimise arm_add_memory a little more
[ARM] 3991/1: i.MX/MX1 high resolution time source
[ARM] 3990/1: i.MX/MX1 more precise PLL decode
[ARM] 3986/1: H1940: suspend to RAM support
[ARM] 3985/1: ixp4xx clocksource cleanup
[ARM] 3984/1: ixp4xx/nslu2: Fix disk LED numbering (take 2)
[ARM] 3994/1: ixp23xx: fix handling of pci master aborts
[ARM] 3981/1: sched_clock for PXA2xx
[ARM] 3980/1: extend the ARM Versatile sched_clock implementation from 32 to 63 bit
[ARM] 3979/1: extend the SA11x0 sched_clock implementation from 32 to 63 bit period
[ARM] 3978/1: macro to provide a 63-bit value from a 32-bit hardware counter
...
Diffstat (limited to 'arch/arm/mach-at91rm9200/irq.c')
-rw-r--r-- | arch/arm/mach-at91rm9200/irq.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/arch/arm/mach-at91rm9200/irq.c b/arch/arm/mach-at91rm9200/irq.c index 3e488117ca91..2148daafd29c 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; |
@@ -139,7 +145,7 @@ void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS]) | |||
139 | at91_sys_write(AT91_AIC_SMR(i), AT91_AIC_SRCTYPE_LOW | priority[i]); | 145 | at91_sys_write(AT91_AIC_SMR(i), AT91_AIC_SRCTYPE_LOW | priority[i]); |
140 | 146 | ||
141 | set_irq_chip(i, &at91_aic_chip); | 147 | set_irq_chip(i, &at91_aic_chip); |
142 | set_irq_handler(i, do_level_IRQ); | 148 | set_irq_handler(i, handle_level_irq); |
143 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); | 149 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); |
144 | 150 | ||
145 | /* Perform 8 End Of Interrupt Command to make sure AIC will not Lock out nIRQ */ | 151 | /* Perform 8 End Of Interrupt Command to make sure AIC will not Lock out nIRQ */ |