aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-pxa/irq.c')
-rw-r--r--arch/arm/mach-pxa/irq.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c
index 6112af431fa4..1beb40f692fc 100644
--- a/arch/arm/mach-pxa/irq.c
+++ b/arch/arm/mach-pxa/irq.c
@@ -164,8 +164,11 @@ static int pxa_irq_suspend(struct sys_device *dev, pm_message_t state)
164 saved_icmr[i] = _ICMR(irq); 164 saved_icmr[i] = _ICMR(irq);
165 _ICMR(irq) = 0; 165 _ICMR(irq) = 0;
166 } 166 }
167 for (i = 0; i < pxa_internal_irq_nr; i++) 167
168 saved_ipr[i] = IPR(i); 168 if (cpu_is_pxa27x() || cpu_is_pxa3xx()) {
169 for (i = 0; i < pxa_internal_irq_nr; i++)
170 saved_ipr[i] = IPR(i);
171 }
169 172
170 return 0; 173 return 0;
171} 174}
@@ -174,12 +177,15 @@ static int pxa_irq_resume(struct sys_device *dev)
174{ 177{
175 int i, irq = PXA_IRQ(0); 178 int i, irq = PXA_IRQ(0);
176 179
180 if (cpu_is_pxa27x() || cpu_is_pxa3xx()) {
181 for (i = 0; i < pxa_internal_irq_nr; i++)
182 IPR(i) = saved_ipr[i];
183 }
184
177 for (i = 0; irq < PXA_IRQ(pxa_internal_irq_nr); i++, irq += 32) { 185 for (i = 0; irq < PXA_IRQ(pxa_internal_irq_nr); i++, irq += 32) {
178 _ICMR(irq) = saved_icmr[i]; 186 _ICMR(irq) = saved_icmr[i];
179 _ICLR(irq) = 0; 187 _ICLR(irq) = 0;
180 } 188 }
181 for (i = 0; i < pxa_internal_irq_nr; i++)
182 IPR(i) = saved_ipr[i];
183 189
184 ICCR = 1; 190 ICCR = 1;
185 return 0; 191 return 0;