X86 platform drivers
 help / color / mirror / Atom feed
* [PATCH] platform/x86/amd: pmf: Use meta + L for screen lock command
@ 2025-03-21 19:30 Mario Limonciello
  2025-03-21 21:16 ` Armin Wolf
  0 siblings, 1 reply; 6+ messages in thread
From: Mario Limonciello @ 2025-03-21 19:30 UTC (permalink / raw)
  To: mario.limonciello, Shyam-sundar.S-k, hdegoede, ilpo.jarvinen
  Cc: platform-driver-x86

From: Mario Limonciello <mario.limonciello@amd.com>

In practice userspace software doesn't react to KEY_SCREENLOCK by
default.  So any time that the PMF policies would suggest to lock
the screen (for example from an HPD sensor event) userspace isn't
configured to do it properly.

However userspace is configured for meta + L as this is the default
in the ecosystem. Adjust the PMF driver to send meta + L.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/platform/x86/amd/pmf/tee-if.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/amd/pmf/tee-if.c b/drivers/platform/x86/amd/pmf/tee-if.c
index 8c88769ea1d87..2c00f2baeec7b 100644
--- a/drivers/platform/x86/amd/pmf/tee-if.c
+++ b/drivers/platform/x86/amd/pmf/tee-if.c
@@ -151,7 +151,13 @@ static void amd_pmf_apply_policies(struct amd_pmf_dev *dev, struct ta_pmf_enact_
 				amd_pmf_update_uevents(dev, KEY_SUSPEND);
 				break;
 			case 2:
-				amd_pmf_update_uevents(dev, KEY_SCREENLOCK);
+				input_report_key(dev->pmf_idev, KEY_LEFTMETA, 1);
+				input_report_key(dev->pmf_idev, KEY_L, 1);
+				input_sync(dev->pmf_idev);
+				input_report_key(dev->pmf_idev, KEY_L, 0);
+				input_sync(dev->pmf_idev);
+				input_report_key(dev->pmf_idev, KEY_LEFTMETA, 0);
+				input_sync(dev->pmf_idev);
 				break;
 			default:
 				dev_err(dev->dev, "Invalid PMF policy system state: %d\n", val);
@@ -422,8 +428,9 @@ static int amd_pmf_register_input_device(struct amd_pmf_dev *dev)
 	dev->pmf_idev->phys = "amd-pmf/input0";
 
 	input_set_capability(dev->pmf_idev, EV_KEY, KEY_SLEEP);
-	input_set_capability(dev->pmf_idev, EV_KEY, KEY_SCREENLOCK);
 	input_set_capability(dev->pmf_idev, EV_KEY, KEY_SUSPEND);
+	input_set_capability(dev->pmf_idev, EV_KEY, KEY_L);
+	input_set_capability(dev->pmf_idev, EV_KEY, KEY_LEFTMETA);
 
 	err = input_register_device(dev->pmf_idev);
 	if (err) {
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] platform/x86/amd: pmf: Use meta + L for screen lock command
  2025-03-21 19:30 [PATCH] platform/x86/amd: pmf: Use meta + L for screen lock command Mario Limonciello
@ 2025-03-21 21:16 ` Armin Wolf
  2025-03-21 22:25   ` Mario Limonciello
  0 siblings, 1 reply; 6+ messages in thread
From: Armin Wolf @ 2025-03-21 21:16 UTC (permalink / raw)
  To: Mario Limonciello, mario.limonciello, Shyam-sundar.S-k, hdegoede,
	ilpo.jarvinen
  Cc: platform-driver-x86

Am 21.03.25 um 20:30 schrieb Mario Limonciello:

> From: Mario Limonciello <mario.limonciello@amd.com>
>
> In practice userspace software doesn't react to KEY_SCREENLOCK by
> default.  So any time that the PMF policies would suggest to lock
> the screen (for example from an HPD sensor event) userspace isn't
> configured to do it properly.
>
> However userspace is configured for meta + L as this is the default
> in the ecosystem. Adjust the PMF driver to send meta + L.

Hi,

KEY_SCREENLOCK is used by other drivers too, so it would make sense
to instead add support for KEY_SCREENLOCK to the userspace software
instead of having this workaround inside the driver.

Also please add a comment explaining what meta + L is supposed to achieve.

Thanks,
Armin Wolf

> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
>   drivers/platform/x86/amd/pmf/tee-if.c | 11 +++++++++--
>   1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/platform/x86/amd/pmf/tee-if.c b/drivers/platform/x86/amd/pmf/tee-if.c
> index 8c88769ea1d87..2c00f2baeec7b 100644
> --- a/drivers/platform/x86/amd/pmf/tee-if.c
> +++ b/drivers/platform/x86/amd/pmf/tee-if.c
> @@ -151,7 +151,13 @@ static void amd_pmf_apply_policies(struct amd_pmf_dev *dev, struct ta_pmf_enact_
>   				amd_pmf_update_uevents(dev, KEY_SUSPEND);
>   				break;
>   			case 2:
> -				amd_pmf_update_uevents(dev, KEY_SCREENLOCK);
> +				input_report_key(dev->pmf_idev, KEY_LEFTMETA, 1);
> +				input_report_key(dev->pmf_idev, KEY_L, 1);
> +				input_sync(dev->pmf_idev);
> +				input_report_key(dev->pmf_idev, KEY_L, 0);
> +				input_sync(dev->pmf_idev);
> +				input_report_key(dev->pmf_idev, KEY_LEFTMETA, 0);
> +				input_sync(dev->pmf_idev);
>   				break;
>   			default:
>   				dev_err(dev->dev, "Invalid PMF policy system state: %d\n", val);
> @@ -422,8 +428,9 @@ static int amd_pmf_register_input_device(struct amd_pmf_dev *dev)
>   	dev->pmf_idev->phys = "amd-pmf/input0";
>
>   	input_set_capability(dev->pmf_idev, EV_KEY, KEY_SLEEP);
> -	input_set_capability(dev->pmf_idev, EV_KEY, KEY_SCREENLOCK);
>   	input_set_capability(dev->pmf_idev, EV_KEY, KEY_SUSPEND);
> +	input_set_capability(dev->pmf_idev, EV_KEY, KEY_L);
> +	input_set_capability(dev->pmf_idev, EV_KEY, KEY_LEFTMETA);
>
>   	err = input_register_device(dev->pmf_idev);
>   	if (err) {

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] platform/x86/amd: pmf: Use meta + L for screen lock command
  2025-03-21 21:16 ` Armin Wolf
@ 2025-03-21 22:25   ` Mario Limonciello
  2025-03-31 17:49     ` Mario Limonciello
  0 siblings, 1 reply; 6+ messages in thread
From: Mario Limonciello @ 2025-03-21 22:25 UTC (permalink / raw)
  To: Armin Wolf, mario.limonciello, Shyam-sundar.S-k, hdegoede,
	ilpo.jarvinen
  Cc: platform-driver-x86



On 3/21/25 16:16, Armin Wolf wrote:
> Am 21.03.25 um 20:30 schrieb Mario Limonciello:
> 
>> From: Mario Limonciello <mario.limonciello@amd.com>
>>
>> In practice userspace software doesn't react to KEY_SCREENLOCK by
>> default.  So any time that the PMF policies would suggest to lock
>> the screen (for example from an HPD sensor event) userspace isn't
>> configured to do it properly.
>>
>> However userspace is configured for meta + L as this is the default
>> in the ecosystem. Adjust the PMF driver to send meta + L.
> 
> Hi,
> 
> KEY_SCREENLOCK is used by other drivers too, so it would make sense
> to instead add support for KEY_SCREENLOCK to the userspace software
> instead of having this workaround inside the driver.

Right; that's actually that's the first thing I looked at when I came to 
this issue.

I had "expected" GNOME for example to work with KEY_SCREENLOCK, but even 
when you program it to do so it doesn't work.

https://gitlab.gnome.org/GNOME/mutter/-/issues/3990

The ecosystem has moved to META + L.  My last employer (Dell) I remember 
there was a FN + F key that would issue a screen lock.  It had a 
silkscreen of a lock symbol.
How did it work?  Not KEY_SCREENLOCK - it emulated META + L.

This is what works in Windows, GNOME and KDE.  So I am of the opinion 
that KEY_SCREENLOCK is likely a dinosaur that doesn't really exist anymore.

> 
> Also please add a comment explaining what meta + L is supposed to achieve.
> 

Sure if we can align on doing this I will spin a V2 with a comment 
better explaining the situation.

> Thanks,
> Armin Wolf
> 
>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>> ---
>>   drivers/platform/x86/amd/pmf/tee-if.c | 11 +++++++++--
>>   1 file changed, 9 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/platform/x86/amd/pmf/tee-if.c b/drivers/platform/ 
>> x86/amd/pmf/tee-if.c
>> index 8c88769ea1d87..2c00f2baeec7b 100644
>> --- a/drivers/platform/x86/amd/pmf/tee-if.c
>> +++ b/drivers/platform/x86/amd/pmf/tee-if.c
>> @@ -151,7 +151,13 @@ static void amd_pmf_apply_policies(struct 
>> amd_pmf_dev *dev, struct ta_pmf_enact_
>>                   amd_pmf_update_uevents(dev, KEY_SUSPEND);
>>                   break;
>>               case 2:
>> -                amd_pmf_update_uevents(dev, KEY_SCREENLOCK);
>> +                input_report_key(dev->pmf_idev, KEY_LEFTMETA, 1);
>> +                input_report_key(dev->pmf_idev, KEY_L, 1);
>> +                input_sync(dev->pmf_idev);
>> +                input_report_key(dev->pmf_idev, KEY_L, 0);
>> +                input_sync(dev->pmf_idev);
>> +                input_report_key(dev->pmf_idev, KEY_LEFTMETA, 0);
>> +                input_sync(dev->pmf_idev);
>>                   break;
>>               default:
>>                   dev_err(dev->dev, "Invalid PMF policy system state: 
>> %d\n", val);
>> @@ -422,8 +428,9 @@ static int amd_pmf_register_input_device(struct 
>> amd_pmf_dev *dev)
>>       dev->pmf_idev->phys = "amd-pmf/input0";
>>
>>       input_set_capability(dev->pmf_idev, EV_KEY, KEY_SLEEP);
>> -    input_set_capability(dev->pmf_idev, EV_KEY, KEY_SCREENLOCK);
>>       input_set_capability(dev->pmf_idev, EV_KEY, KEY_SUSPEND);
>> +    input_set_capability(dev->pmf_idev, EV_KEY, KEY_L);
>> +    input_set_capability(dev->pmf_idev, EV_KEY, KEY_LEFTMETA);
>>
>>       err = input_register_device(dev->pmf_idev);
>>       if (err) {


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] platform/x86/amd: pmf: Use meta + L for screen lock command
  2025-03-21 22:25   ` Mario Limonciello
@ 2025-03-31 17:49     ` Mario Limonciello
  2025-04-03  1:48       ` Armin Wolf
  0 siblings, 1 reply; 6+ messages in thread
From: Mario Limonciello @ 2025-03-31 17:49 UTC (permalink / raw)
  To: Mario Limonciello, Armin Wolf, Shyam-sundar.S-k, hdegoede,
	ilpo.jarvinen
  Cc: platform-driver-x86

On 3/21/2025 5:25 PM, Mario Limonciello wrote:
> 
> 
> On 3/21/25 16:16, Armin Wolf wrote:
>> Am 21.03.25 um 20:30 schrieb Mario Limonciello:
>>
>>> From: Mario Limonciello <mario.limonciello@amd.com>
>>>
>>> In practice userspace software doesn't react to KEY_SCREENLOCK by
>>> default.  So any time that the PMF policies would suggest to lock
>>> the screen (for example from an HPD sensor event) userspace isn't
>>> configured to do it properly.
>>>
>>> However userspace is configured for meta + L as this is the default
>>> in the ecosystem. Adjust the PMF driver to send meta + L.
>>
>> Hi,
>>
>> KEY_SCREENLOCK is used by other drivers too, so it would make sense
>> to instead add support for KEY_SCREENLOCK to the userspace software
>> instead of having this workaround inside the driver.
> 
> Right; that's actually that's the first thing I looked at when I came to 
> this issue.
> 
> I had "expected" GNOME for example to work with KEY_SCREENLOCK, but even 
> when you program it to do so it doesn't work.
> 
> https://gitlab.gnome.org/GNOME/mutter/-/issues/3990
> 
> The ecosystem has moved to META + L.  My last employer (Dell) I remember 
> there was a FN + F key that would issue a screen lock.  It had a 
> silkscreen of a lock symbol.
> How did it work?  Not KEY_SCREENLOCK - it emulated META + L.
> 
> This is what works in Windows, GNOME and KDE.  So I am of the opinion 
> that KEY_SCREENLOCK is likely a dinosaur that doesn't really exist anymore.
> 

FWIW, I found an aftermarket keyboard (Logitech Ergo K860 [1]) that has 
a "lock" key.

It also emits a KEY_LEFTMETA combination when this key is pressed and 
works by default in GNOME as well with no changes.

-event11  DEVICE_ADDED            Logitech ERGO K860 
seat0 default group7  cap:kp left scroll-nat scroll-button

-event11  KEYBOARD_KEY            +4.191s       KEY_LEFTMETA (125) pressed
  event11  KEYBOARD_KEY            +4.231s       *** (-1) pressed
  event11  KEYBOARD_KEY            +4.374s       *** (-1) released
  event11  KEYBOARD_KEY            +4.412s       KEY_LEFTMETA (125) released

[1] https://www.logitech.com/en-us/shop/p/k860-split-ergonomic.920-009166

>>
>> Also please add a comment explaining what meta + L is supposed to 
>> achieve.
>>
> 
> Sure if we can align on doing this I will spin a V2 with a comment 
> better explaining the situation.
> 
>> Thanks,
>> Armin Wolf
>>
>>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>>> ---
>>>   drivers/platform/x86/amd/pmf/tee-if.c | 11 +++++++++--
>>>   1 file changed, 9 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/platform/x86/amd/pmf/tee-if.c b/drivers/ 
>>> platform/ x86/amd/pmf/tee-if.c
>>> index 8c88769ea1d87..2c00f2baeec7b 100644
>>> --- a/drivers/platform/x86/amd/pmf/tee-if.c
>>> +++ b/drivers/platform/x86/amd/pmf/tee-if.c
>>> @@ -151,7 +151,13 @@ static void amd_pmf_apply_policies(struct 
>>> amd_pmf_dev *dev, struct ta_pmf_enact_
>>>                   amd_pmf_update_uevents(dev, KEY_SUSPEND);
>>>                   break;
>>>               case 2:
>>> -                amd_pmf_update_uevents(dev, KEY_SCREENLOCK);
>>> +                input_report_key(dev->pmf_idev, KEY_LEFTMETA, 1);
>>> +                input_report_key(dev->pmf_idev, KEY_L, 1);
>>> +                input_sync(dev->pmf_idev);
>>> +                input_report_key(dev->pmf_idev, KEY_L, 0);
>>> +                input_sync(dev->pmf_idev);
>>> +                input_report_key(dev->pmf_idev, KEY_LEFTMETA, 0);
>>> +                input_sync(dev->pmf_idev);
>>>                   break;
>>>               default:
>>>                   dev_err(dev->dev, "Invalid PMF policy system state: 
>>> %d\n", val);
>>> @@ -422,8 +428,9 @@ static int amd_pmf_register_input_device(struct 
>>> amd_pmf_dev *dev)
>>>       dev->pmf_idev->phys = "amd-pmf/input0";
>>>
>>>       input_set_capability(dev->pmf_idev, EV_KEY, KEY_SLEEP);
>>> -    input_set_capability(dev->pmf_idev, EV_KEY, KEY_SCREENLOCK);
>>>       input_set_capability(dev->pmf_idev, EV_KEY, KEY_SUSPEND);
>>> +    input_set_capability(dev->pmf_idev, EV_KEY, KEY_L);
>>> +    input_set_capability(dev->pmf_idev, EV_KEY, KEY_LEFTMETA);
>>>
>>>       err = input_register_device(dev->pmf_idev);
>>>       if (err) {
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] platform/x86/amd: pmf: Use meta + L for screen lock command
  2025-03-31 17:49     ` Mario Limonciello
@ 2025-04-03  1:48       ` Armin Wolf
  2025-04-03 15:57         ` Mario Limonciello
  0 siblings, 1 reply; 6+ messages in thread
From: Armin Wolf @ 2025-04-03  1:48 UTC (permalink / raw)
  To: Mario Limonciello, Mario Limonciello, Shyam-sundar.S-k, hdegoede,
	ilpo.jarvinen, dmitry.torokhov
  Cc: platform-driver-x86, linux-input

Am 31.03.25 um 19:49 schrieb Mario Limonciello:

> On 3/21/2025 5:25 PM, Mario Limonciello wrote:
>>
>>
>> On 3/21/25 16:16, Armin Wolf wrote:
>>> Am 21.03.25 um 20:30 schrieb Mario Limonciello:
>>>
>>>> From: Mario Limonciello <mario.limonciello@amd.com>
>>>>
>>>> In practice userspace software doesn't react to KEY_SCREENLOCK by
>>>> default.  So any time that the PMF policies would suggest to lock
>>>> the screen (for example from an HPD sensor event) userspace isn't
>>>> configured to do it properly.
>>>>
>>>> However userspace is configured for meta + L as this is the default
>>>> in the ecosystem. Adjust the PMF driver to send meta + L.
>>>
>>> Hi,
>>>
>>> KEY_SCREENLOCK is used by other drivers too, so it would make sense
>>> to instead add support for KEY_SCREENLOCK to the userspace software
>>> instead of having this workaround inside the driver.
>>
>> Right; that's actually that's the first thing I looked at when I came
>> to this issue.
>>
>> I had "expected" GNOME for example to work with KEY_SCREENLOCK, but
>> even when you program it to do so it doesn't work.
>>
>> https://gitlab.gnome.org/GNOME/mutter/-/issues/3990
>>
>> The ecosystem has moved to META + L.  My last employer (Dell) I
>> remember there was a FN + F key that would issue a screen lock. It
>> had a silkscreen of a lock symbol.
>> How did it work?  Not KEY_SCREENLOCK - it emulated META + L.
>>
>> This is what works in Windows, GNOME and KDE.  So I am of the opinion
>> that KEY_SCREENLOCK is likely a dinosaur that doesn't really exist
>> anymore.
>>
>
> FWIW, I found an aftermarket keyboard (Logitech Ergo K860 [1]) that
> has a "lock" key.
>
> It also emits a KEY_LEFTMETA combination when this key is pressed and
> works by default in GNOME as well with no changes.
>
> -event11  DEVICE_ADDED            Logitech ERGO K860 seat0 default
> group7  cap:kp left scroll-nat scroll-button
>
> -event11  KEYBOARD_KEY            +4.191s       KEY_LEFTMETA (125)
> pressed
>  event11  KEYBOARD_KEY            +4.231s       *** (-1) pressed
>  event11  KEYBOARD_KEY            +4.374s       *** (-1) released
>  event11  KEYBOARD_KEY            +4.412s       KEY_LEFTMETA (125)
> released
>
> [1] https://www.logitech.com/en-us/shop/p/k860-split-ergonomic.920-009166
>
Interesting, i CCed the input maintainer so that he can decide whether to keep KEY_SCREENLOCK or replace it
with meta + L. Maybe the input subsystem could provide a generic meta + L emulation for KEY_SCREENLOCK?

Thanks,
Armin Wolf

>>>
>>> Also please add a comment explaining what meta + L is supposed to
>>> achieve.
>>>
>>
>> Sure if we can align on doing this I will spin a V2 with a comment
>> better explaining the situation.
>>
>>> Thanks,
>>> Armin Wolf
>>>
>>>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>>>> ---
>>>>   drivers/platform/x86/amd/pmf/tee-if.c | 11 +++++++++--
>>>>   1 file changed, 9 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/platform/x86/amd/pmf/tee-if.c b/drivers/
>>>> platform/ x86/amd/pmf/tee-if.c
>>>> index 8c88769ea1d87..2c00f2baeec7b 100644
>>>> --- a/drivers/platform/x86/amd/pmf/tee-if.c
>>>> +++ b/drivers/platform/x86/amd/pmf/tee-if.c
>>>> @@ -151,7 +151,13 @@ static void amd_pmf_apply_policies(struct
>>>> amd_pmf_dev *dev, struct ta_pmf_enact_
>>>>                   amd_pmf_update_uevents(dev, KEY_SUSPEND);
>>>>                   break;
>>>>               case 2:
>>>> -                amd_pmf_update_uevents(dev, KEY_SCREENLOCK);
>>>> +                input_report_key(dev->pmf_idev, KEY_LEFTMETA, 1);
>>>> +                input_report_key(dev->pmf_idev, KEY_L, 1);
>>>> +                input_sync(dev->pmf_idev);
>>>> +                input_report_key(dev->pmf_idev, KEY_L, 0);
>>>> +                input_sync(dev->pmf_idev);
>>>> +                input_report_key(dev->pmf_idev, KEY_LEFTMETA, 0);
>>>> +                input_sync(dev->pmf_idev);
>>>>                   break;
>>>>               default:
>>>>                   dev_err(dev->dev, "Invalid PMF policy system
>>>> state: %d\n", val);
>>>> @@ -422,8 +428,9 @@ static int amd_pmf_register_input_device(struct
>>>> amd_pmf_dev *dev)
>>>>       dev->pmf_idev->phys = "amd-pmf/input0";
>>>>
>>>>       input_set_capability(dev->pmf_idev, EV_KEY, KEY_SLEEP);
>>>> -    input_set_capability(dev->pmf_idev, EV_KEY, KEY_SCREENLOCK);
>>>>       input_set_capability(dev->pmf_idev, EV_KEY, KEY_SUSPEND);
>>>> +    input_set_capability(dev->pmf_idev, EV_KEY, KEY_L);
>>>> +    input_set_capability(dev->pmf_idev, EV_KEY, KEY_LEFTMETA);
>>>>
>>>>       err = input_register_device(dev->pmf_idev);
>>>>       if (err) {
>>
>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] platform/x86/amd: pmf: Use meta + L for screen lock command
  2025-04-03  1:48       ` Armin Wolf
@ 2025-04-03 15:57         ` Mario Limonciello
  0 siblings, 0 replies; 6+ messages in thread
From: Mario Limonciello @ 2025-04-03 15:57 UTC (permalink / raw)
  To: Armin Wolf, Mario Limonciello, Shyam-sundar.S-k, hdegoede,
	ilpo.jarvinen, dmitry.torokhov
  Cc: platform-driver-x86, linux-input

On 4/2/2025 8:48 PM, Armin Wolf wrote:
> Am 31.03.25 um 19:49 schrieb Mario Limonciello:
> 
>> On 3/21/2025 5:25 PM, Mario Limonciello wrote:
>>>
>>>
>>> On 3/21/25 16:16, Armin Wolf wrote:
>>>> Am 21.03.25 um 20:30 schrieb Mario Limonciello:
>>>>
>>>>> From: Mario Limonciello <mario.limonciello@amd.com>
>>>>>
>>>>> In practice userspace software doesn't react to KEY_SCREENLOCK by
>>>>> default.  So any time that the PMF policies would suggest to lock
>>>>> the screen (for example from an HPD sensor event) userspace isn't
>>>>> configured to do it properly.
>>>>>
>>>>> However userspace is configured for meta + L as this is the default
>>>>> in the ecosystem. Adjust the PMF driver to send meta + L.
>>>>
>>>> Hi,
>>>>
>>>> KEY_SCREENLOCK is used by other drivers too, so it would make sense
>>>> to instead add support for KEY_SCREENLOCK to the userspace software
>>>> instead of having this workaround inside the driver.
>>>
>>> Right; that's actually that's the first thing I looked at when I came
>>> to this issue.
>>>
>>> I had "expected" GNOME for example to work with KEY_SCREENLOCK, but
>>> even when you program it to do so it doesn't work.
>>>
>>> https://gitlab.gnome.org/GNOME/mutter/-/issues/3990
>>>
>>> The ecosystem has moved to META + L.  My last employer (Dell) I
>>> remember there was a FN + F key that would issue a screen lock. It
>>> had a silkscreen of a lock symbol.
>>> How did it work?  Not KEY_SCREENLOCK - it emulated META + L.
>>>
>>> This is what works in Windows, GNOME and KDE.  So I am of the opinion
>>> that KEY_SCREENLOCK is likely a dinosaur that doesn't really exist
>>> anymore.
>>>
>>
>> FWIW, I found an aftermarket keyboard (Logitech Ergo K860 [1]) that
>> has a "lock" key.
>>
>> It also emits a KEY_LEFTMETA combination when this key is pressed and
>> works by default in GNOME as well with no changes.
>>
>> -event11  DEVICE_ADDED            Logitech ERGO K860 seat0 default
>> group7  cap:kp left scroll-nat scroll-button
>>
>> -event11  KEYBOARD_KEY            +4.191s       KEY_LEFTMETA (125)
>> pressed
>>  event11  KEYBOARD_KEY            +4.231s       *** (-1) pressed
>>  event11  KEYBOARD_KEY            +4.374s       *** (-1) released
>>  event11  KEYBOARD_KEY            +4.412s       KEY_LEFTMETA (125)
>> released
>>
>> [1] https://www.logitech.com/en-us/shop/p/k860-split-ergonomic.920-009166
>>
> Interesting, i CCed the input maintainer so that he can decide whether 
> to keep KEY_SCREENLOCK or replace it
> with meta + L. Maybe the input subsystem could provide a generic meta + 
> L emulation for KEY_SCREENLOCK?
> 
> Thanks,
> Armin Wolf

Are you proposing input subsystem to provide a helper something like this?

/**
  * report_lock_sequence - Report key combination to lock the screen
  * @dev: input device
  *
  * Key combination used in the PC industry since Windows 7 for locking 
display
  * is META + L. This is also used in GNOME and KDE by default.
  * See 
https://support.microsoft.com/en-us/windows/keyboard-shortcuts-in-windows-dcc61a57-8ff0-cffe-9796-cb9706c75eec
  */
static void report_lock_sequence(struct input_dev *dev)
{
	input_report_key(dev, KEY_LEFTMETA, 1);
	input_report_key(dev, KEY_L, 1);
	input_sync(dev);
	input_report_key(dev, KEY_L, 0);
	input_sync(dev);
	input_report_key(dev, KEY_LEFTMETA, 0);
	input_sync(dev);
}

Then PMF could just call that helper when it wants to do the sequence 
(and likewise any other driver can as well).

> 
>>>>
>>>> Also please add a comment explaining what meta + L is supposed to
>>>> achieve.
>>>>
>>>
>>> Sure if we can align on doing this I will spin a V2 with a comment
>>> better explaining the situation.
>>>
>>>> Thanks,
>>>> Armin Wolf
>>>>
>>>>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>>>>> ---
>>>>>   drivers/platform/x86/amd/pmf/tee-if.c | 11 +++++++++--
>>>>>   1 file changed, 9 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/drivers/platform/x86/amd/pmf/tee-if.c b/drivers/
>>>>> platform/ x86/amd/pmf/tee-if.c
>>>>> index 8c88769ea1d87..2c00f2baeec7b 100644
>>>>> --- a/drivers/platform/x86/amd/pmf/tee-if.c
>>>>> +++ b/drivers/platform/x86/amd/pmf/tee-if.c
>>>>> @@ -151,7 +151,13 @@ static void amd_pmf_apply_policies(struct
>>>>> amd_pmf_dev *dev, struct ta_pmf_enact_
>>>>>                   amd_pmf_update_uevents(dev, KEY_SUSPEND);
>>>>>                   break;
>>>>>               case 2:
>>>>> -                amd_pmf_update_uevents(dev, KEY_SCREENLOCK);
>>>>> +                input_report_key(dev->pmf_idev, KEY_LEFTMETA, 1);
>>>>> +                input_report_key(dev->pmf_idev, KEY_L, 1);
>>>>> +                input_sync(dev->pmf_idev);
>>>>> +                input_report_key(dev->pmf_idev, KEY_L, 0);
>>>>> +                input_sync(dev->pmf_idev);
>>>>> +                input_report_key(dev->pmf_idev, KEY_LEFTMETA, 0);
>>>>> +                input_sync(dev->pmf_idev);
>>>>>                   break;
>>>>>               default:
>>>>>                   dev_err(dev->dev, "Invalid PMF policy system
>>>>> state: %d\n", val);
>>>>> @@ -422,8 +428,9 @@ static int amd_pmf_register_input_device(struct
>>>>> amd_pmf_dev *dev)
>>>>>       dev->pmf_idev->phys = "amd-pmf/input0";
>>>>>
>>>>>       input_set_capability(dev->pmf_idev, EV_KEY, KEY_SLEEP);
>>>>> -    input_set_capability(dev->pmf_idev, EV_KEY, KEY_SCREENLOCK);
>>>>>       input_set_capability(dev->pmf_idev, EV_KEY, KEY_SUSPEND);
>>>>> +    input_set_capability(dev->pmf_idev, EV_KEY, KEY_L);
>>>>> +    input_set_capability(dev->pmf_idev, EV_KEY, KEY_LEFTMETA);
>>>>>
>>>>>       err = input_register_device(dev->pmf_idev);
>>>>>       if (err) {
>>>
>>
>>


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-04-03 15:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-21 19:30 [PATCH] platform/x86/amd: pmf: Use meta + L for screen lock command Mario Limonciello
2025-03-21 21:16 ` Armin Wolf
2025-03-21 22:25   ` Mario Limonciello
2025-03-31 17:49     ` Mario Limonciello
2025-04-03  1:48       ` Armin Wolf
2025-04-03 15:57         ` Mario Limonciello

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox