Re: [PATCH 1/4] platform/x86: intel-vbtn: Rework wakeup handling in notify_handler()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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;
>  	}
>  
>  	/*
> 




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux