static irqreturn_t gpio_interrupt(int irq, void *ignored) { int state; if (!ssb_chipco_irq_status(&bcm47xx_bus.ssb.chipco, SSB_CHIPCO_IRQ_GPIO)) return IRQ_NONE; state = gpio_get_value(WGT634U_GPIO_RESET); gpio_polarity(WGT634U_GPIO_RESET, state); if (!state) { printk(KERN_INFO "Reset button pressed"); ctrl_alt_del(); } return IRQ_HANDLED; }
static irqreturn_t gpio_interrupt(int irq, void *ignored) { int state; /* Interrupts are shared, check if the current one is a GPIO interrupt. */ if (!ssb_chipco_irq_status(&bcm47xx_bus.ssb.chipco, SSB_CHIPCO_IRQ_GPIO)) return IRQ_NONE; state = gpio_get_value(WGT634U_GPIO_RESET); /* Interrupt are level triggered, revert the interrupt polarity to clear the interrupt. */ gpio_polarity(WGT634U_GPIO_RESET, state); if (!state) { printk(KERN_INFO "Reset button pressed"); ctrl_alt_del(); } return IRQ_HANDLED; }