Message ID | 20170324100847.25434-1-hdegoede@redhat.com |
---|---|
State | New |
Headers | show |
On Fri, 2017-03-24 at 11:08 +0100, Hans de Goede wrote: > On Bay Trail / Cherry Trail systems with a LID switch, the LID switch > is > often connect to a gpioint handled by an _IAE event handler. > Before this commit such systems would not wake up when opening the > lid, > requiring the powerbutton to be pressed after opening the lid to > wakeup. > > Note that Bay Trail / Cherry Trail systems use suspend-to-idle, so > the interrupts are generated anyway on those lines on lid switch > changes, > but they are treated by the IRQ subsystem as spurious while suspended > if > not marked as wakeup IRQs. > > This commit calls enable_irq_wake() for _IAE GpioInts with a valid > event handler which have their Wake flag set. This fixes such systems > not waking up when opening the lid. > FWIW: Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > Signed-off-by: Hans de Goede <hdegoede@redhat.com> > Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> > --- > Changes in v2: > -Improve commit msg > -Add Mika's Acked-by > Changes in v3: > -Use irqd_is_wakeup_set rather then tracking this ourselves > --- > drivers/gpio/gpiolib-acpi.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c > index 8cd3f66..2972cad 100644 > --- a/drivers/gpio/gpiolib-acpi.c > +++ b/drivers/gpio/gpiolib-acpi.c > @@ -266,6 +266,9 @@ static acpi_status > acpi_gpiochip_request_interrupt(struct acpi_resource *ares, > goto fail_free_event; > } > > + if (agpio->wake_capable == ACPI_WAKE_CAPABLE) > + enable_irq_wake(irq); > + > list_add_tail(&event->node, &acpi_gpio->events); > return AE_OK; > > @@ -339,6 +342,9 @@ void acpi_gpiochip_free_interrupts(struct > gpio_chip *chip) > list_for_each_entry_safe_reverse(event, ep, &acpi_gpio- > >events, node) { > struct gpio_desc *desc; > > + if (irqd_is_wakeup_set(irq_get_irq_data(event->irq))) > + disable_irq_wake(event->irq); > + > free_irq(event->irq, event); > desc = event->desc; > if (WARN_ON(IS_ERR(desc)))
On Fri, Mar 24, 2017 at 11:08 AM, Hans de Goede <hdegoede@redhat.com> wrote: > On Bay Trail / Cherry Trail systems with a LID switch, the LID switch is > often connect to a gpioint handled by an _IAE event handler. > Before this commit such systems would not wake up when opening the lid, > requiring the powerbutton to be pressed after opening the lid to wakeup. > > Note that Bay Trail / Cherry Trail systems use suspend-to-idle, so > the interrupts are generated anyway on those lines on lid switch changes, > but they are treated by the IRQ subsystem as spurious while suspended if > not marked as wakeup IRQs. > > This commit calls enable_irq_wake() for _IAE GpioInts with a valid > event handler which have their Wake flag set. This fixes such systems > not waking up when opening the lid. > > Signed-off-by: Hans de Goede <hdegoede@redhat.com> > Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> > --- > Changes in v2: > -Improve commit msg > -Add Mika's Acked-by > Changes in v3: > -Use irqd_is_wakeup_set rather then tracking this ourselves This looks like it should be applied for fixes and tagged for stable. Patch applied. 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
Hi, On 03/28/2017 03:23 PM, Linus Walleij wrote: > On Fri, Mar 24, 2017 at 11:08 AM, Hans de Goede <hdegoede@redhat.com> wrote: > >> On Bay Trail / Cherry Trail systems with a LID switch, the LID switch is >> often connect to a gpioint handled by an _IAE event handler. >> Before this commit such systems would not wake up when opening the lid, >> requiring the powerbutton to be pressed after opening the lid to wakeup. >> >> Note that Bay Trail / Cherry Trail systems use suspend-to-idle, so >> the interrupts are generated anyway on those lines on lid switch changes, >> but they are treated by the IRQ subsystem as spurious while suspended if >> not marked as wakeup IRQs. >> >> This commit calls enable_irq_wake() for _IAE GpioInts with a valid >> event handler which have their Wake flag set. This fixes such systems >> not waking up when opening the lid. >> >> Signed-off-by: Hans de Goede <hdegoede@redhat.com> >> Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> >> --- >> Changes in v2: >> -Improve commit msg >> -Add Mika's Acked-by >> Changes in v3: >> -Use irqd_is_wakeup_set rather then tracking this ourselves > > This looks like it should be applied for fixes and tagged for stable. In theory this is a fix, but I'm afraid it may have undesirable side-effects on some systems (I hope not but you never know) so I'm not sure it should get tagged for stable, going into 4.11-rc# as fix seems fine to me. > Patch applied. Thank you. Regards, Hans -- 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-acpi.c b/drivers/gpio/gpiolib-acpi.c index 8cd3f66..2972cad 100644 --- a/drivers/gpio/gpiolib-acpi.c +++ b/drivers/gpio/gpiolib-acpi.c @@ -266,6 +266,9 @@ static acpi_status acpi_gpiochip_request_interrupt(struct acpi_resource *ares, goto fail_free_event; } + if (agpio->wake_capable == ACPI_WAKE_CAPABLE) + enable_irq_wake(irq); + list_add_tail(&event->node, &acpi_gpio->events); return AE_OK; @@ -339,6 +342,9 @@ void acpi_gpiochip_free_interrupts(struct gpio_chip *chip) list_for_each_entry_safe_reverse(event, ep, &acpi_gpio->events, node) { struct gpio_desc *desc; + if (irqd_is_wakeup_set(irq_get_irq_data(event->irq))) + disable_irq_wake(event->irq); + free_irq(event->irq, event); desc = event->desc; if (WARN_ON(IS_ERR(desc)))