[PATCH] platform/x86: ideapad-laptop: Add Yoga Pro 7 14IAH10 Mode key

Navon John Lukose posted 1 patch 1 week, 4 days ago
There is a newer version of this series
drivers/platform/x86/lenovo/ideapad-laptop.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH] platform/x86: ideapad-laptop: Add Yoga Pro 7 14IAH10 Mode key
Posted by Navon John Lukose 1 week, 4 days ago
The F9 "Mode" key emits WMI fn-key event 0x46, which the keymap does not
cover, so it reaches userspace as KEY_UNKNOWN and cannot be remapped from
there. Under Windows it opens a performance profile chooser, so it belongs
in the keymap as a user-assignable key. Map it to KEY_PROG4.

Signed-off-by: Navon John Lukose <navonjohnlukose@gmail.com>
---
Lenovo Yoga Pro 7 14IAH10 (83KF), BIOS QGCN35WW. No other key on this
machine emits 0x46, and pressing the Mode key leaves platform_profile
unchanged.

KEY_PROG4 per Hans's note on the 0x3d key, that a key opening a settings
dialog under Windows should get a free KEY_PROG#:
https://lore.kernel.org/platform-driver-x86/35969669-48b6-469e-9cd2-26929fb33e5f@redhat.com/

 drivers/platform/x86/lenovo/ideapad-laptop.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c
index 8213524..6fa72a3 100644
--- a/drivers/platform/x86/lenovo/ideapad-laptop.c
+++ b/drivers/platform/x86/lenovo/ideapad-laptop.c
@@ -1360,6 +1360,8 @@ static const struct key_entry ideapad_keymap[] = {
 	{ KE_KEY,	0x45 | IDEAPAD_WMI_KEY, { KEY_PROG3 } },
 	/* Performance toggle also Fn+Q, handled inside ideapad_wmi_notify() */
 	{ KE_KEY,	0x3d | IDEAPAD_WMI_KEY, { KEY_PROG4 } },
+	/* Mode (performance profile chooser) */
+	{ KE_KEY,	0x46 | IDEAPAD_WMI_KEY, { KEY_PROG4 } },
 	/* shift + prtsc */
 	{ KE_KEY,   0x2d | IDEAPAD_WMI_KEY, { KEY_SELECTIVE_SCREENSHOT } },
 	{ KE_KEY,   0x29 | IDEAPAD_WMI_KEY, { KEY_TOUCHPAD_TOGGLE } },

base-commit: 22098763a10d9c13
Re: [PATCH] platform/x86: ideapad-laptop: Add Yoga Pro 7 14IAH10 Mode key
Posted by Hans de Goede 1 week, 3 days ago
Hi Navon,

On 14-Sep-26 12:47 AM, Navon John Lukose wrote:
> The F9 "Mode" key emits WMI fn-key event 0x46, which the keymap does not
> cover, so it reaches userspace as KEY_UNKNOWN and cannot be remapped from
> there. Under Windows it opens a performance profile chooser, so it belongs
> in the keymap as a user-assignable key. Map it to KEY_PROG4.
> 
> Signed-off-by: Navon John Lukose <navonjohnlukose@gmail.com>
> ---
> Lenovo Yoga Pro 7 14IAH10 (83KF), BIOS QGCN35WW. No other key on this
> machine emits 0x46, and pressing the Mode key leaves platform_profile
> unchanged.
> 
> KEY_PROG4 per Hans's note on the 0x3d key, that a key opening a settings
> dialog under Windows should get a free KEY_PROG#:
> https://lore.kernel.org/platform-driver-x86/35969669-48b6-469e-9cd2-26929fb33e5f@redhat.com/

As the comment on the KE_KEY entry above the one you add says, this should
really be handled specially inside ideapad_wmi_notify(). IIRC we still want
the KE_KEY entry to emit a key-press on laptops without DYTC platform-profile
support.

For laptops with DYTC support you want to modify this bit in ideapad_wmi_notify():

                /* performance button triggered by 0x3d */
                if (data->integer.value == 0x3d && priv->dytc) {
                        platform_profile_cycle();
                        break;
                }

to also trigger on the new 0x46 code:

                /* performance button triggered by 0x3d or 0x46 */
                if ((data->integer.value == 0x3d || data->integer.value == 0x46) && priv->dytc) {
                        platform_profile_cycle();
                        break;
                }

So that this key actually toggles through the different (power-save/balanced/performanc)
platform profiles the laptop has.

Unless there already is another key to do that ?

And please also add a comment to the new KE_KEY entry that this is handled inside
ideapad_wmi_notify() like the existing KE_KEY entry for 0x3d has.

Hmm, I see you say that under Windows this opens a performance menu rather
then outright toggle the profile. So I guess that you maybe also have Fn + Q or
something which already directly switches profile ?  If you do then KEY_PROG4
seems fine. If you do not I think just cycling the profile would be better,
what do you think ?

Regards,

Hans


> 
>  drivers/platform/x86/lenovo/ideapad-laptop.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c
> index 8213524..6fa72a3 100644
> --- a/drivers/platform/x86/lenovo/ideapad-laptop.c
> +++ b/drivers/platform/x86/lenovo/ideapad-laptop.c
> @@ -1360,6 +1360,8 @@ static const struct key_entry ideapad_keymap[] = {
>  	{ KE_KEY,	0x45 | IDEAPAD_WMI_KEY, { KEY_PROG3 } },
>  	/* Performance toggle also Fn+Q, handled inside ideapad_wmi_notify() */
>  	{ KE_KEY,	0x3d | IDEAPAD_WMI_KEY, { KEY_PROG4 } },
> +	/* Mode (performance profile chooser) */
> +	{ KE_KEY,	0x46 | IDEAPAD_WMI_KEY, { KEY_PROG4 } },
>  	/* shift + prtsc */
>  	{ KE_KEY,   0x2d | IDEAPAD_WMI_KEY, { KEY_SELECTIVE_SCREENSHOT } },
>  	{ KE_KEY,   0x29 | IDEAPAD_WMI_KEY, { KEY_TOUCHPAD_TOGGLE } },
> 
> base-commit: 22098763a10d9c13
Re: [PATCH] platform/x86: ideapad-laptop: Add Yoga Pro 7 14IAH10 Mode key
Posted by Navon John Lukose 1 week, 3 days ago
On 14-Sep-26 2:40 PM, Hans de Goede wrote:
> So I guess that you maybe also have Fn + Q or something which already
> directly switches profile ?  If you do then KEY_PROG4 seems fine.

Fn+Q does, by a different path than the Mode key:

  Mode key (F9)  WMI fn-key 0x46, platform_profile unchanged
  Fn+Q           VPC special button, platform_profile_cycle() from
                 ideapad_acpi_notify(), no WMI event

(Used LLMs to hunt the Fn+Q path down.)

So cycling on 0x46 would duplicate Fn+Q. Keeping KEY_PROG4, and added
a comment in v2 saying why.