On Wed, Apr 6, 2016 at 9:08 AM, qiujiang <qiujiang@xxxxxxxxxx> wrote: > This patch adds gpio-signaled acpi event support. It is used for > power button on hisilicon D02 board, an arm64 platform. > > The corresponding DSDT file is defined as follows: > Device(GPI0) { > Name(_HID, "HISI0181") > Name(_ADR, 0) > Name(_UID, 0) > > Name (_CRS, ResourceTemplate () { > Memory32Fixed (ReadWrite, 0x802e0000, 0x10000) > Interrupt (ResourceConsumer, Level, ActiveHigh, > Exclusive,,,) {344} > }) > > Device(PRTa) { > Name (_DSD, Package () { > Package () { > Package () {"reg",0}, > Package () {"snps,nr-gpios",32}, > } > }) > } > > Name (_AEI, ResourceTemplate () { > GpioInt(Edge, ActiveLow, ExclusiveAndWake, > PullUp, , " \\_SB.GPI0") {8} > }) > > Method (_E08, 0x0, NotSerialized) { > Notify (\_SB.PWRB, 0x80) > } > } > > Acked-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx> > Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Signed-off-by: qiujiang <qiujiang@xxxxxxxxxx> Admittedly I'm an ACPI novice and need help with deciding about ACPI, but I mostly trust Mika to know these things right. About this: > + /* Add GPIO-signaled ACPI event support */ > + if (pp->irq) > + acpi_gpiochip_request_interrupts(&port->gc); It's weird to me that the driver already has a requested IRQ and everything, now it has to request it again from ACPI. When I look into the acpi_gpiochip_request_interrupts() I find it weird that it is void given how much can go wrong inside it. Should it not return an errorcode? > + if (has_acpi_companion(dev) && pp->idx == 0) > + pp->irq = platform_get_irq(to_platform_device(dev), 0); As it was already fetched here and then later requested, we still have to call acpi_gpiochip_request_interrupts() further down the road? That is confusing to me, can you explain what is going on? 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