A second thought: On Fri, Jun 8, 2018 at 1:59 PM, Linus Walleij <linus.walleij@xxxxxxxxxx> wrote: >> + select GPIOLIB_IRQCHIP > > You are not using this so I guess remove that line. (...) >> +static int >> +mediatek_gpio_to_irq(struct gpio_chip *chip, unsigned int pin) >> +{ >> + struct mtk_data *gpio_data = gpiochip_get_data(chip); >> + struct mtk_gc *rg = to_mediatek_gpio(chip); >> + >> + return irq_create_mapping(gpio_data->gpio_irq_domain, >> + pin + (rg->bank * MTK_BANK_WIDTH)); >> +} > > So this is the result of a custom IRQdomain because you > can't use the generic GPIO IRQ lib. Oh well, we have to live > with it I guess. I think maybe you can actually use the generic GPIO IRQCHIP. It is OK to call gpiochip_set_chained_irqchip() several times. If you just mark the line with IRQF_SHARED then the handler will just loop over all three banks until you find a hit, provided you code it up properly. There were some problems with removing an irqchip like that but your driver is anyway a bool so I think it might work just fine. Yours, Linus Walleij _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel