コード例 #1
0
ファイル: gpio.c プロジェクト: patrick-ken/Vizio_XWR100_GPL
static irqreturn_t hd64465_gpio_interrupt(int irq, void *dev, struct pt_regs *regs)
{
    unsigned short port, pin, isr, mask, portpin;

    for (port=0 ; port<GPIO_NPORTS ; port++) {
        isr = inw(GPIO_ISR(port));

        for (pin=0 ; pin<8 ; pin++) {
            mask = 1<<pin;
            if (isr & mask) {
                portpin = (port<<3)|pin;
                if (handlers[portpin].func != 0)
                    handlers[portpin].func(portpin, handlers[portpin].dev);
                else
                    printk(KERN_NOTICE "unexpected GPIO interrupt, pin %c%d\n",
                           port+'A', (int)pin);
            }
        }

        /* Write 1s back to ISR to clear it?  That's what the manual says.. */
        outw(isr, GPIO_ISR(port));
    }

    return IRQ_HANDLED;
}
コード例 #2
0
__interrupt void PORT1_ISR_HOOK(void)
{
    /* USER CODE START (section: PORT1_ISR_HOOK) */
    GPIO_ISR();
    __bis_SR_register_on_exit(LPM3_bits);
    /* USER CODE END (section: PORT1_ISR_HOOK) */
}