diff options
Diffstat (limited to 'arch/arm/mach-lpc32xx/irq.c')
| -rw-r--r-- | arch/arm/mach-lpc32xx/irq.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/arch/arm/mach-lpc32xx/irq.c b/arch/arm/mach-lpc32xx/irq.c index 4eae566dfdc7..c74de01ab5b6 100644 --- a/arch/arm/mach-lpc32xx/irq.c +++ b/arch/arm/mach-lpc32xx/irq.c | |||
| @@ -118,6 +118,10 @@ static const struct lpc32xx_event_info lpc32xx_events[NR_IRQS] = { | |||
| 118 | .event_group = &lpc32xx_event_pin_regs, | 118 | .event_group = &lpc32xx_event_pin_regs, |
| 119 | .mask = LPC32XX_CLKPWR_EXTSRC_GPI_06_BIT, | 119 | .mask = LPC32XX_CLKPWR_EXTSRC_GPI_06_BIT, |
| 120 | }, | 120 | }, |
| 121 | [IRQ_LPC32XX_GPI_28] = { | ||
| 122 | .event_group = &lpc32xx_event_pin_regs, | ||
| 123 | .mask = LPC32XX_CLKPWR_EXTSRC_GPI_28_BIT, | ||
| 124 | }, | ||
| 121 | [IRQ_LPC32XX_GPIO_00] = { | 125 | [IRQ_LPC32XX_GPIO_00] = { |
| 122 | .event_group = &lpc32xx_event_int_regs, | 126 | .event_group = &lpc32xx_event_int_regs, |
| 123 | .mask = LPC32XX_CLKPWR_INTSRC_GPIO_00_BIT, | 127 | .mask = LPC32XX_CLKPWR_INTSRC_GPIO_00_BIT, |
| @@ -305,9 +309,18 @@ static int lpc32xx_irq_wake(struct irq_data *d, unsigned int state) | |||
| 305 | 309 | ||
| 306 | if (state) | 310 | if (state) |
| 307 | eventreg |= lpc32xx_events[d->irq].mask; | 311 | eventreg |= lpc32xx_events[d->irq].mask; |
| 308 | else | 312 | else { |
| 309 | eventreg &= ~lpc32xx_events[d->irq].mask; | 313 | eventreg &= ~lpc32xx_events[d->irq].mask; |
| 310 | 314 | ||
| 315 | /* | ||
| 316 | * When disabling the wakeup, clear the latched | ||
| 317 | * event | ||
| 318 | */ | ||
| 319 | __raw_writel(lpc32xx_events[d->irq].mask, | ||
| 320 | lpc32xx_events[d->irq]. | ||
| 321 | event_group->rawstat_reg); | ||
| 322 | } | ||
| 323 | |||
| 311 | __raw_writel(eventreg, | 324 | __raw_writel(eventreg, |
| 312 | lpc32xx_events[d->irq].event_group->enab_reg); | 325 | lpc32xx_events[d->irq].event_group->enab_reg); |
| 313 | 326 | ||
| @@ -380,13 +393,15 @@ void __init lpc32xx_init_irq(void) | |||
| 380 | 393 | ||
| 381 | /* Setup SIC1 */ | 394 | /* Setup SIC1 */ |
| 382 | __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE)); | 395 | __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE)); |
| 383 | __raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE)); | 396 | __raw_writel(SIC1_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE)); |
| 384 | __raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE)); | 397 | __raw_writel(SIC1_ATR_DEFAULT, |
| 398 | LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE)); | ||
| 385 | 399 | ||
| 386 | /* Setup SIC2 */ | 400 | /* Setup SIC2 */ |
| 387 | __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE)); | 401 | __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE)); |
| 388 | __raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE)); | 402 | __raw_writel(SIC2_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE)); |
| 389 | __raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE)); | 403 | __raw_writel(SIC2_ATR_DEFAULT, |
| 404 | LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE)); | ||
| 390 | 405 | ||
| 391 | /* Configure supported IRQ's */ | 406 | /* Configure supported IRQ's */ |
| 392 | for (i = 0; i < NR_IRQS; i++) { | 407 | for (i = 0; i < NR_IRQS; i++) { |
