On Wed, Oct 14, 2020 at 04:31:52PM +0300, Andy Shevchenko wrote: > In some cases the GpioInt() resource is coming with bias settings > which may affect system functioning. Respect bias settings for > GpioInt() resource by calling acpi_gpio_update_gpiod_*flags() API > in acpi_dev_gpio_irq_get(). > > While at it, refactor to configure flags first and, only when succeeded, > map the IRQ descriptor. > > Reported-by: Jamie McClymont <jamie@xxxxxxxxxx> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > --- > > This one highly depends on Intel pin control driver changes (for now [1], but > might be more), so it's probably not supposed to be backported (at least right > now). > > [1]: https://lore.kernel.org/linux-gpio/20201014104638.84043-1-andriy.shevchenko@xxxxxxxxxxxxxxx/T/ > > drivers/gpio/gpiolib-acpi.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c > index 834a12f3219e..52b961673f16 100644 > --- a/drivers/gpio/gpiolib-acpi.c > +++ b/drivers/gpio/gpiolib-acpi.c > @@ -942,21 +942,25 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index) > > if (info.gpioint && idx++ == index) { > unsigned long lflags = GPIO_LOOKUP_FLAGS_DEFAULT; > + enum gpiod_flags dflags = info.flags; > char label[32]; > int irq; > > if (IS_ERR(desc)) > return PTR_ERR(desc); > > - irq = gpiod_to_irq(desc); > - if (irq < 0) > - return irq; > + acpi_gpio_update_gpiod_flags(&dflags, &info); > + acpi_gpio_update_gpiod_lookup_flags(&lflags, &info); > > snprintf(label, sizeof(label), "GpioInt() %d", index); > - ret = gpiod_configure_flags(desc, label, lflags, info.flags); > + ret = gpiod_configure_flags(desc, label, lflags, dflags); > if (ret < 0) > return ret; > > + irq = gpiod_to_irq(desc); > + if (irq < 0) > + return irq; Should the above be undone if the conversion here fails? In any case looks good so, Reviewed-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx>