Hi Hans, > 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: 537b0dd4729e ("platform/x86: intel-hid: Add support for > SW_TABLET_MODE") > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > drivers/platform/x86/intel-hid.c | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-) > > diff --git a/drivers/platform/x86/intel-hid.c > b/drivers/platform/x86/intel-hid.c > index 57cc92891a57..078648a9201b 100644 > --- a/drivers/platform/x86/intel-hid.c > +++ b/drivers/platform/x86/intel-hid.c > @@ -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; > } > No regression noted on HP Spectre x360 15-df0xxx. Reviewed-by: Elia Devito <eliadevito@xxxxxxxxx> Regards, Elia