static irqreturn_t hwbutton_handler(int irq, void *data) { struct hwbutton_interrupt *hirq = data; unsigned long cic_ext = *CIC_EXT_CFG_REG; if (CIC_EXT_IS_ACTIVE_HI(cic_ext, hirq->eirq)) { /* Interrupt: pin is now HI */ CIC_EXT_SET_ACTIVE_LO(cic_ext, hirq->eirq); hirq->handle_hi(hirq->data); } else { /* Interrupt: pin is now LO */ CIC_EXT_SET_ACTIVE_HI(cic_ext, hirq->eirq); hirq->handle_lo(hirq->data); } /* * Invert the POLARITY of this level interrupt to ack the interrupt * Thus next state change will invoke the opposite message */ *CIC_EXT_CFG_REG = cic_ext; return IRQ_HANDLED; }
static irqreturn_t hwbutton_handler(int irq, void *data) { struct hwbutton_interrupt *hirq = data; unsigned long cic_ext = *CIC_EXT_CFG_REG; if (CIC_EXT_IS_ACTIVE_HI(cic_ext, hirq->eirq)) { /* */ CIC_EXT_SET_ACTIVE_LO(cic_ext, hirq->eirq); hirq->handle_hi(hirq->data); } else { /* */ CIC_EXT_SET_ACTIVE_HI(cic_ext, hirq->eirq); hirq->handle_lo(hirq->data); } /* */ *CIC_EXT_CFG_REG = cic_ext; return IRQ_HANDLED; }