Hi, On 1/15/21 5:18 PM, Hans de Goede wrote: > Rework the wakeup path inside notify_handler() to special case the > buttons (KE_KEY) case instead of the switches case. > > In case of a button wake event we want to skip reporting this, > mirroring how the drivers/acpi/button.c code skips the reporting > in the wakeup case (suspended flag set) too. > > The reason to skip reporting in this case is that some Linux > desktop-environments will immediately resuspend if we report an > evdev event for the power-button press on wakeup. > > Before this commit the skipping of the button-press was done > in a round-about way: In case of a wakeup the regular > sparse_keymap_report_event() would always be skipped by > an early return, and then to avoid not reporting switch changes > on wakeup there was a special KE_SW path with a duplicate > sparse_keymap_report_event() call. > > This commit refactors the wakeup handling to explicitly skip the > reporting for button wake events, while using the regular > reporting path for non button (switches) wakeup events. > > No intentional functional impact. > > Cc: Elia Devito <eliadevito@xxxxxxxxx> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> I've applied this series to my review-hans branch now, so this will show up in for-next soon. Regards, Hans > --- > drivers/platform/x86/intel-vbtn.c | 25 ++++++++++--------------- > 1 file changed, 10 insertions(+), 15 deletions(-) > > diff --git a/drivers/platform/x86/intel-vbtn.c b/drivers/platform/x86/intel-vbtn.c > index 30a9062d2b4b..e1bb37a03ba3 100644 > --- a/drivers/platform/x86/intel-vbtn.c > +++ b/drivers/platform/x86/intel-vbtn.c > @@ -131,22 +131,17 @@ static void notify_handler(acpi_handle handle, u32 event, void *context) > > if (priv->wakeup_mode) { > ke = sparse_keymap_entry_from_scancode(priv->input_dev, event); > - if (ke) { > - pm_wakeup_hard_event(&device->dev); > - > - /* > - * Switch events like tablet mode will wake the device > - * and report the new switch position to the input > - * subsystem. > - */ > - if (ke->type == KE_SW) > - sparse_keymap_report_event(priv->input_dev, > - event, > - val, > - 0); > + if (!ke) > + goto out_unknown; > + > + pm_wakeup_hard_event(&device->dev); > + > + /* > + * Skip reporting an evdev event for button wake events, > + * mirroring how the drivers/acpi/button.c code skips this too. > + */ > + if (ke->type == KE_KEY) > return; > - } > - goto out_unknown; > } > > /* >