Re: [PATCH] platform/x86: lenovo/ymc: Only match lower byte in WMI lid switch response

From: Ilpo Järvinen

Date: Mon Jun 08 2026 - 09:01:11 EST


On Sun, 31 May 2026, Julian Haarmann wrote:

> On newer Lenovo Yoga devices like the "Yoga 9 2-in-1 14IPH11 - Type 83SE",
> the hinge switch WMI query returns extra data in the upper bits
> (e.g. 0x50001 laptop mode, 0x50002 tablet mode, ect.).
>
> The driver previously checked for exact matches (0x01 laptop, 0x02 tablet,
> ect.) causing newer switches to not work.
>
> Mask the WMI query result to only match the lower byte and ignore upper
> bits.
>
> Signed-off-by: Julian Haarmann <julian.haarmann@xxxxxxxxxxxxxxx>
> ---
>
> Hi everyone,
>
> I just recieved this laptop and am trying to get it to work.
> FYI: To get tablet mode to work fully you might need to extract the
> Intel ISH firmware from the Windows driver.
> This is my first patch, so I hope the way I've solved this is up to
> standard.
>
> drivers/platform/x86/lenovo/ymc.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/platform/x86/lenovo/ymc.c b/drivers/platform/x86/lenovo/ymc.c
> index 1b73a55f1b89..ffeca452b392 100644
> --- a/drivers/platform/x86/lenovo/ymc.c
> +++ b/drivers/platform/x86/lenovo/ymc.c
> @@ -87,6 +87,9 @@ static void lenovo_ymc_notify(struct wmi_device *wdev, union acpi_object *data)
> }
> code = obj->integer.value;
>
> + /* strip upper bits (e.g. 0x50000) on newer devices */
> + code &= 0xFF;

Thanks for the patch.

As it looks like there are now multiple fields in the value, it is better
to add a define with GENMASK() and use FIELD_GET() to extract the field.

Please also remember to add bits.h and bitfield.h includes when using
those macros.

--
i.