1.1 --- a/stage2/board-nanonote.c Tue Jan 26 21:34:25 2016 +0100
1.2 +++ b/stage2/board-nanonote.c Thu Jan 28 23:13:02 2016 +0100
1.3 @@ -150,7 +150,7 @@
1.4 __gpio_as_irq_rise_edge(GPIO_KEYIN_BASE + i);
1.5 }
1.6 */
1.7 - __gpio_as_irq_rise_edge(GPIO_POWER);
1.8 + __gpio_as_irq_fall_edge(GPIO_POWER);
1.9 __intc_unmask_irq(GPIO_IRQ);
1.10 }
1.11
2.1 --- a/stage2/irq.c Tue Jan 26 21:34:25 2016 +0100
2.2 +++ b/stage2/irq.c Thu Jan 28 23:13:02 2016 +0100
2.3 @@ -64,7 +64,7 @@
2.4 void irq_init()
2.5 {
2.6 timer_init_irq();
2.7 - /* gpio_init_irq(); */
2.8 + gpio_init_irq();
2.9 x = 0; y = 0; pixel_type = 1;
2.10 handle_error_level();
2.11 init_interrupts();
2.12 @@ -74,7 +74,6 @@
2.13 void irq_handle()
2.14 {
2.15 unsigned short i;
2.16 - u32 irqnum;
2.17
2.18 /* Check interrupt identity. */
2.19
2.20 @@ -95,15 +94,16 @@
2.21 /* GPIO interrupts. */
2.22
2.23 if (REG_INTC_IPR & (1 << GPIO_IRQ)) {
2.24 - while ((irqnum = __gpio_group_irq(3))) {
2.25 - __gpio_mask_irq(3 * 32 + irqnum);
2.26 +
2.27 + /* Check for the power button. */
2.28 +
2.29 + if (REG_GPIO_PXFLG(GPIO_POWER / 32) & (1 << (GPIO_POWER % 32))) {
2.30
2.31 /* Clear interrupt status. */
2.32
2.33 - __gpio_ack_irq(3 * 32 + irqnum);
2.34 - __gpio_unmask_irq(3 * 32 + irqnum);
2.35 + __gpio_ack_irq(GPIO_POWER);
2.36 + __intc_ack_irq(GPIO_IRQ);
2.37 }
2.38 - __intc_ack_irq(GPIO_IRQ);
2.39 }
2.40
2.41 /* Handle other interrupts, anyway. */