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

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

 



Hi,

On 4/4/21 5:50 PM, Elia Devito wrote:
> 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>

Thank you for the testing and the review. I'll push this out to the for-next and fixes branches.

Regards,

Hans




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

  Powered by Linux