/*mask/disable INT static void sapphire_gpio_irq_mask(unsigned int irq)*/ static void sapphire_gpio_irq_disable(unsigned int irq) { unsigned long flags; uint8_t reg_val; local_irq_save(flags); reg_val = readb(CPLD_INT_MASK_REG(irq)) & ~SAPPHIRE_INT_BIT_MASK(irq); /*CPLD INT MASK is r/w now.*/ /*printk(KERN_INFO "sapphire_gpio_irq_unmask irq %d => %d:%02x\n", irq, bank, reg_val);*/ DBG("(%d,0x%x, 0x%x, 0x%x)\r\n",irq, reg_val, CPLD_INT_MASK_REG(irq), SAPPHIRE_INT_BIT_MASK(irq)); DBG("sapphire_suspended=%d\r\n", sapphire_suspended); if (!sapphire_suspended) writeb(reg_val, CPLD_INT_MASK_REG(irq)); reg_val = readb( CPLD_INT_MASK_REG(irq) ); DBG("reg_val= 0x%x\r\n",reg_val); DBG("l=0x%x\r\n", readb(SAPPHIRE_CPLD_INT_LEVEL)); local_irq_restore(flags); }
static void sapphire_gpio_irq_enable(unsigned int irq) { unsigned long flags; uint8_t reg_val; local_irq_save(flags); reg_val = readb(CPLD_INT_MASK_REG(irq)) | SAPPHIRE_INT_BIT_MASK(irq); DBG("(irq=%d,0x%x, 0x%x)\r\n", irq, CPLD_INT_MASK_REG(irq), SAPPHIRE_INT_BIT_MASK(irq)); DBG("sapphire_suspended=%d\r\n", sapphire_suspended); if (!sapphire_suspended) writeb(reg_val, CPLD_INT_MASK_REG(irq)); reg_val = readb(CPLD_INT_MASK_REG(irq)); DBG("reg_val= 0x%x\r\n", reg_val); DBG("l=0x%x\r\n", readb(SAPPHIRE_CPLD_INT_LEVEL)); local_irq_restore(flags); }
/*unmask/enable the INT static void sapphire_gpio_irq_unmask(unsigned int irq)*/ static void sapphire_gpio_irq_enable(unsigned int irq) { unsigned long flags; uint8_t reg_val; local_irq_save(flags); /*disabling all interrupts*/ reg_val = readb( CPLD_INT_MASK_REG(irq) ) | SAPPHIRE_INT_BIT_MASK(irq); DBG("(irq=%d,0x%x, 0x%x)\r\n",irq, CPLD_INT_MASK_REG(irq), SAPPHIRE_INT_BIT_MASK(irq)); DBG("sapphire_suspended=%d\r\n", sapphire_suspended); /*printk(KERN_INFO "sapphire_gpio_irq_mask irq %d => %d:%02x\n", irq, bank, reg_val);*/ if (!sapphire_suspended) writeb(reg_val, CPLD_INT_MASK_REG(irq)); reg_val = readb( CPLD_INT_MASK_REG(irq) ); DBG("reg_val= 0x%x\r\n",reg_val); DBG("l=0x%x\r\n", readb(SAPPHIRE_CPLD_INT_LEVEL)); local_irq_restore(flags); /*restore the interrupts*/ }