Commit a3790a8a authored by Hans de Goede's avatar Hans de Goede

platform/x86: intel-hid: Fix spurious wakeups caused by tablet-mode events during suspend

Some devices send (duplicate) tablet-mode events when moved around even
though the mode has not changed; and they do this even when suspended.

Change the tablet-mode event handling when priv->wakeup_mode is set to
update the switch state in case it changed and then return immediately
(without calling pm_wakeup_hard_event()) to avoid spurious wakeups.

BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=212537
Fixes: 537b0dd4 ("platform/x86: intel-hid: Add support for SW_TABLET_MODE")
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarElia Devito <eliadevito@gmail.com>
Link: https://lore.kernel.org/r/20210404143831.25173-1-hdegoede@redhat.com
parent d1635448
......@@ -483,11 +483,16 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)
goto wakeup;
/*
* Switch events will wake the device and report the new switch
* position to the input subsystem.
* Some devices send (duplicate) tablet-mode events when moved
* around even though the mode has not changed; and they do this
* even when suspended.
* Update the switch state in case it changed and then return
* without waking up to avoid spurious wakeups.
*/
if (priv->switches && (event == 0xcc || event == 0xcd))
goto wakeup;
if (event == 0xcc || event == 0xcd) {
report_tablet_mode_event(priv->switches, event);
return;
}
/* Wake up on 5-button array events only. */
if (event == 0xc0 || !priv->array)
......@@ -501,9 +506,6 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)
wakeup:
pm_wakeup_hard_event(&device->dev);
if (report_tablet_mode_event(priv->switches, event))
return;
return;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment