1.1 --- a/stage2/irq.c Tue Jan 26 21:34:25 2016 +0100
1.2 +++ b/stage2/irq.c Thu Jan 28 23:13:02 2016 +0100
1.3 @@ -64,7 +64,7 @@
1.4 void irq_init()
1.5 {
1.6 timer_init_irq();
1.7 - /* gpio_init_irq(); */
1.8 + gpio_init_irq();
1.9 x = 0; y = 0; pixel_type = 1;
1.10 handle_error_level();
1.11 init_interrupts();
1.12 @@ -74,7 +74,6 @@
1.13 void irq_handle()
1.14 {
1.15 unsigned short i;
1.16 - u32 irqnum;
1.17
1.18 /* Check interrupt identity. */
1.19
1.20 @@ -95,15 +94,16 @@
1.21 /* GPIO interrupts. */
1.22
1.23 if (REG_INTC_IPR & (1 << GPIO_IRQ)) {
1.24 - while ((irqnum = __gpio_group_irq(3))) {
1.25 - __gpio_mask_irq(3 * 32 + irqnum);
1.26 +
1.27 + /* Check for the power button. */
1.28 +
1.29 + if (REG_GPIO_PXFLG(GPIO_POWER / 32) & (1 << (GPIO_POWER % 32))) {
1.30
1.31 /* Clear interrupt status. */
1.32
1.33 - __gpio_ack_irq(3 * 32 + irqnum);
1.34 - __gpio_unmask_irq(3 * 32 + irqnum);
1.35 + __gpio_ack_irq(GPIO_POWER);
1.36 + __intc_ack_irq(GPIO_IRQ);
1.37 }
1.38 - __intc_ack_irq(GPIO_IRQ);
1.39 }
1.40
1.41 /* Handle other interrupts, anyway. */