void __init imx21_init_irq(void) { unsigned int irq; DEBUG_IRQ("Initializing imx21 interrupts\n"); /* Mask all interrupts initially */ IMR(0) = 0; IMR(1) = 0; IMR(2) = 0; IMR(3) = 0; IMR(4) = 0; IMR(5) = 0; for (irq = 0; irq < IMX21_IRQS; irq++) { set_irq_chip(irq, &imx21_internal_chip); set_irq_handler(irq, do_level_IRQ); set_irq_flags(irq, IRQF_VALID); } for (irq = IRQ_GPIOA(0); irq < IRQ_GPIOF(32); irq++) { set_irq_chip(irq, &imx21_gpio_chip); set_irq_handler(irq, do_edge_IRQ); set_irq_flags(irq, IRQF_VALID); } set_irq_chained_handler(INT_GPIO, imx21_gpio_handler); /* Disable all interrupts initially. */ /* In IMX21 this is done in the bootloader. */ }
static void mxt_td60_sdhc1_exit(struct device *dev, void *data) { free_irq(IRQ_GPIOF(8), data); }
static int mxt_td60_sdhc1_init(struct device *dev, irq_handler_t detect_irq, void *data) { return request_irq(IRQ_GPIOF(8), detect_irq, IRQF_TRIGGER_FALLING, "sdhc1-card-detect", data); }