On Tue, Mar 25, 2014 at 10:17 PM, Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> wrote: > * Linus Walleij | 2014-03-25 21:43:49 [+0100]: > >>> I looked at >>> those two links and you quote gpio_to_irq() which is not required. >> >>In a *lot* of drivers it is implicitly required that gpio_to_irq() >>is called first because they only call irq_create_mapping() >>there. (And not in subsequent interrupt handlers etc.) > > so > > --- a/drivers/gpio/gpio-dwapb.c > +++ b/drivers/gpio/gpio-dwapb.c > @@ -68,7 +68,7 @@ static int dwapb_gpio_to_irq(struct gpio_chip *gc, unsigned offset) > dwapb_gpio_port, bgc); > struct dwapb_gpio *gpio = port->gpio; > > - return irq_find_mapping(gpio->domain, offset); > + return irq_create_mapping(gpio->domain, offset); > } > > static void dwapb_toggle_trigger(struct dwapb_gpio *gpio, unsigned int offs) > > would fix the problem then. No. This only gets called if some GPIO consumer decides to call gpio_to_irq() to find out the interrupt number before using the interrupt. There is no requirement that consumers do that! It is perfectly legal for a GPIO irq comsumer to just use some hard-coded IRQ number from a board file or similar, or to just use an IRQ from a DT or ACPI entity without any such translation. So the mappings must be created in probe(). Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html