diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-11-18 10:53:52 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-11-18 10:53:52 +0900 |
commit | 260af56271f79da0e37faa5a99b1786b221297e5 (patch) | |
tree | d76a2609f940b88083314d5f9131c73115bd4dcb /arch/arm/mach-pxa/irq.c | |
parent | 1dca899e95d27475c9036ce1cf857a72852b9c53 (diff) | |
parent | 648f15345add88a7eea724365fe1217a8d8a1e16 (diff) | |
download | blackbird-op-linux-260af56271f79da0e37faa5a99b1786b221297e5.tar.gz blackbird-op-linux-260af56271f79da0e37faa5a99b1786b221297e5.zip |
Merge branch 'sh/stable-updates'
Diffstat (limited to 'arch/arm/mach-pxa/irq.c')
-rw-r--r-- | arch/arm/mach-pxa/irq.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c index d694ce289668..6112af431fa4 100644 --- a/arch/arm/mach-pxa/irq.c +++ b/arch/arm/mach-pxa/irq.c @@ -25,6 +25,8 @@ #include "generic.h" +#define MAX_INTERNAL_IRQS 128 + #define IRQ_BIT(n) (((n) - PXA_IRQ(0)) & 0x1f) #define _ICMR(n) (*((((n) - PXA_IRQ(0)) & ~0x1f) ? &ICMR2 : &ICMR)) #define _ICLR(n) (*((((n) - PXA_IRQ(0)) & ~0x1f) ? &ICLR2 : &ICLR)) @@ -122,6 +124,8 @@ void __init pxa_init_irq(int irq_nr, set_wake_t fn) { int irq, i; + BUG_ON(irq_nr > MAX_INTERNAL_IRQS); + pxa_internal_irq_nr = irq_nr; for (irq = PXA_IRQ(0); irq < PXA_IRQ(irq_nr); irq += 32) { @@ -149,7 +153,8 @@ void __init pxa_init_irq(int irq_nr, set_wake_t fn) } #ifdef CONFIG_PM -static unsigned long saved_icmr[2]; +static unsigned long saved_icmr[MAX_INTERNAL_IRQS/32]; +static unsigned long saved_ipr[MAX_INTERNAL_IRQS]; static int pxa_irq_suspend(struct sys_device *dev, pm_message_t state) { @@ -159,6 +164,8 @@ static int pxa_irq_suspend(struct sys_device *dev, pm_message_t state) saved_icmr[i] = _ICMR(irq); _ICMR(irq) = 0; } + for (i = 0; i < pxa_internal_irq_nr; i++) + saved_ipr[i] = IPR(i); return 0; } @@ -171,6 +178,8 @@ static int pxa_irq_resume(struct sys_device *dev) _ICMR(irq) = saved_icmr[i]; _ICLR(irq) = 0; } + for (i = 0; i < pxa_internal_irq_nr; i++) + IPR(i) = saved_ipr[i]; ICCR = 1; return 0; |