On Fri, Apr 26, 2019 at 10:19:42AM +0200, Ard Biesheuvel wrote: > On Thu, 25 Apr 2019 at 16:27, Mika Westerberg > <mika.westerberg@xxxxxxxxxxxxxxx> wrote: > > > > On Thu, Apr 25, 2019 at 03:23:53PM +0200, Linus Walleij wrote: > > > > - return ret; > > > > + if (mb86s70_gpio_have_acpi(pdev)) > > > > + acpi_gpiochip_request_interrupts(&gchip->gc); > > > > + > > > > + return 0; > > > > > > I guess this is right... > > > > > > > struct mb86s70_gpio_chip *gchip = platform_get_drvdata(pdev); > > > > > > > > + if (gchip->gc.irq.domain) { > > > > + acpi_gpiochip_free_interrupts(&gchip->gc); > > > > + irq_domain_remove(gchip->gc.irq.domain); > > > > + } > > > > > > Mika can possibly comment on the right way to do ACPI bring-up > > > and take-down. > > > > Only comment I have is that normally you don't need to call > > acpi_gpiochip_request_interrupts() and acpi_gpiochip_free_interrupts() > > in GPIO chip drivers itself. The core should take care of this if the > > device ACPI description has an _AEI method. > > Thanks Mika. > > The core only takes care of this for nested/cascaded domains. In this > case, the calls are needed, or the ACPI event interrupt don't get > registered. I see. Then I agree calling those directly in the driver is the right thing to do.