Re: ideapad-laptop: Fn+M (Touchpad Toggle) not working on Lenovo ThinkBook 16 G4+ IAP

From: Rong Zhang

Date: Mon Jun 01 2026 - 13:16:38 EST


Hi Gillian,

On Fri, 2026-05-22 at 08:25 +0800, Gillian Laurenti wrote:
> Hi,
> The Fn+M touchpad toggle hotkey on the Lenovo ThinkBook 16 G4+ IAP
> doesn't generate a keycode under Linux.
> Pressing the key only triggers a generic WMI event in acpi_listen: wmi
> PNP0C14:03 000000d0 00000000
> Since the ideapad_laptop driver already handles these 0xD0 events by
> reading the VPC status register, 
>

On my device such events are handled by ideapad_wmi_notify(), which
doesn't read VPC status registers at all.

> I did some testing on this model. It
> looks like the touchpad toggle state is mapped to bit 6 of the
> register.
> Can we add parsing for bit 6 on 0xD0 events so the driver can report
> the touchpad toggle keycode properly?

Did you mean ideapad_acpi_notify()? On my device I didn't see any events
in acpi_listen when the callback is triggered by ACPI notifications.

And bit 6 for vpc status registers has been mapped to
KEY_SWITCHVIDEOMODE:

static const struct key_entry ideapad_keymap[] = {
{ KE_KEY, 6, { KEY_SWITCHVIDEOMODE } },
...
};

...

static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
{
...
for_each_set_bit(bit, &vpc1, 16) {
switch (bit) {
case 13:
case 11:
case 8:
case 7:
case 6:
ideapad_input_report(priv, bit);
break;
...
}
}
}

Therefore, I guess there may be something missing from your experiments
and/or assumptions.

Could you please add some debug printks to both callbacks to print the
event data? With additional information we could hopefully figure out
what's really going on.

Thanks,
Rong

>
> System Information:
> Model: Lenovo ThinkBook 16 G4+ IAP
> OS: Arch Linux
> Kernel version: 6.18.31-1-lts