Message ID | CACRpkdbfidnokJ2WyagdcEycDu3dXKVon2z4TKM7KhNg_Hyf9w@mail.gmail.com |
---|---|
State | New |
Headers | show |
On Fri, Apr 1, 2016 at 10:56 AM, Alexander Stein <alexander.stein@systec-electronic.com> wrote: > [Me] >> And in this case (if gpio_keys handle -EPROBE_DEFER gracefully) >> all should be fine with my oneliner patch. >> >> I am more uncertain about the -EINVAL (-22) we might need some >> more analysis there. > > I did 10 runs and got the following results: >> 3x gpio-keys user_sw: Unable to claim irq 0; error -22 >> 2x gpio-keys user_sw: Unable to get irq number for GPIO 376, error -517 >> 5x ok > > So, for one gpio-keys seems not to handle -EPROBE_DEFER gracefully After reading the code the only problem seems to be that it prints that error. A small patch to silence that print should fix it then, can you confirm that in these cases the gpio-keys are retried later? > and it seem > still possible to get an invalid irq number. I think this is because gpiolib initialize .to_irq() before setting up the irqdomain. I'm making a combined patch fixing both issues, send out in a few sec. Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index b747c76fd2b1..838643d2d976 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -2004,7 +2004,7 @@ int gpiod_to_irq(const struct gpio_desc *desc) VALIDATE_DESC(desc); chip = desc->gdev->chip; offset = gpio_chip_hwgpio(desc); - return chip->to_irq ? chip->to_irq(chip, offset) : -ENXIO; + return chip->to_irq ? chip->to_irq(chip, offset) : -EPROBE_DEFER; } EXPORT_SYMBOL_GPL(gpiod_to_irq);