Re: [PATCH v6 1/2] platform/x86/lenovo: lenovo-ymc: Suppress probe on Yoga Book 9 14IAH10
From: Mark Pearson
Date: Mon Jun 08 2026 - 21:29:34 EST
Hi Dave
On Mon, Jun 8, 2026, at 5:52 PM, Dave Carey wrote:
> The Yoga Book 9 14IAH10 (DMI product name "83KJ") has a dedicated
> yb9-kbdock WMI driver that registers an input device reporting
> SW_TABLET_MODE to track the detachable Bluetooth keyboard.
>
> lenovo-ymc also loads on this machine and creates an input node with the
> SW_TABLET_MODE capability bit set. For input switches, the presence of
> the capability bit has semantic meaning: userspace (e.g. GNOME) reads
> the switch state at startup from every node advertising the capability
> and does not expect more than one such node.
>
> Add a DMI match for the Yoga Book 9 14IAH10 to probe() so that
> lenovo-ymc returns -ENODEV on this hardware, leaving yb9-kbdock as the
> sole SW_TABLET_MODE source. The ymc_ec_trigger EC write, the only
> other action taken in response to a YMC event, is guarded by a separate
> DMI table that excludes this machine; no other functionality is affected.
>
> Signed-off-by: Dave Carey <carvsdriver@xxxxxxxxx>
> ---
> drivers/platform/x86/lenovo/ymc.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/platform/x86/lenovo/ymc.c
> b/drivers/platform/x86/lenovo/ymc.c
> --- a/drivers/platform/x86/lenovo/ymc.c
> +++ b/drivers/platform/x86/lenovo/ymc.c
> @@ -23,7 +23,23 @@ module_param(force, bool, 0444);
> static bool force;
> module_param(force, bool, 0444);
> MODULE_PARM_DESC(force, "Force loading on boards without a convertible
> DMI chassis-type");
>
> +static const struct dmi_system_id lenovo_ymc_nosupport_dmi_table[] = {
> + {
> + /*
> + * Yoga Book 9 14IAH10: SW_TABLET_MODE is reported by the
> + * yb9-kbdock driver. Suppress lenovo-ymc on this machine to
> + * avoid userspace seeing two input nodes that both advertise
> + * the SW_TABLET_MODE capability.
> + */
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
> + DMI_MATCH(DMI_PRODUCT_NAME, "83KJ"),
> + },
> + },
> + { }
> +};
> +
> static const struct dmi_system_id allowed_chasis_types_dmi_table[] = {
> {
> .matches = {
> @@ -100,7 +116,10 @@ static int lenovo_ymc_probe(struct wmi_device
> *wdev, const void *ctx)
> struct lenovo_ymc_private *priv;
> struct input_dev *input_dev;
> int err;
>
> + if (dmi_check_system(lenovo_ymc_nosupport_dmi_table))
> + return -ENODEV;
> +
> if (!dmi_check_system(allowed_chasis_types_dmi_table)) {
> if (force)
> dev_info(&wdev->dev, "Force loading Lenovo YMC support\n");
> --
> 2.54.0
I'm sure I'm missing the obvious - but where is the yb9-kbdock driver? I can't find it...
I was curious as to whether a separate driver was really needed for this platform, or if it should have been integrated in the ymc driver in the first place?
Mark