aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/sleep.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2018-05-16 08:13:21 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2018-05-25 04:32:13 -0400
commit68e22011856f036bd9b0328b9b62d953e668a7ae (patch)
tree7711f1589d84b04061aa397e0c6c5c6fab266965 /drivers/acpi/sleep.c
parent745364533e40ec76f7822275d491f5196362e016 (diff)
ACPI: EC: Dispatch the EC GPE directly on s2idle wake
On platforms where the Low Power S0 Idle _DSM interface is used, on wakeup from suspend-to-idle, when it is known that the ACPI SCI has triggered while suspended, dispatch the EC GPE in order to catch all EC events that may have triggered the wakeup before carrying out the noirq phase of device resume. That is needed to handle power button wakeup on some platforms where the EC goes into a low-power mode during suspend-to-idle and while in that mode it will discard events after a timeout. If that timeout is shorter than the time it takes to complete the noirq resume of devices, looking for EC events after the latter is too late. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reported-by: Zhang Rui <rui.zhang@intel.com> Tested-by: Wendy Wang <wendy.wang@intel.com>
Diffstat (limited to 'drivers/acpi/sleep.c')
-rw-r--r--drivers/acpi/sleep.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index 974e58457697..5d0486f1cfcd 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -989,6 +989,13 @@ static void acpi_s2idle_wake(void)
989 !irqd_is_wakeup_armed(irq_get_irq_data(acpi_sci_irq))) { 989 !irqd_is_wakeup_armed(irq_get_irq_data(acpi_sci_irq))) {
990 pm_system_cancel_wakeup(); 990 pm_system_cancel_wakeup();
991 s2idle_wakeup = true; 991 s2idle_wakeup = true;
992 /*
993 * On some platforms with the LPS0 _DSM device noirq resume
994 * takes too much time for EC wakeup events to survive, so look
995 * for them now.
996 */
997 if (lps0_device_handle)
998 acpi_ec_dispatch_gpe();
992 } 999 }
993} 1000}
994 1001