From: David Cemin <dcemin@nvidia.com>
To: hansg@kernel.org, ilpo.jarvinen@linux.intel.com, W_Armin@gmx.de
Cc: mpearson-lenovo@squebb.ca, derekjohn.clark@gmail.com,
xy-jackie@139.com, ikepanhc@gmail.com,
platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org, ldemarchi@nvidia.com
Subject: [RFC PATCH 0/3] platform: lenovo: architecture independent home for the Lenovo WMI drivers
Date: Fri, 13 Nov 2026 14:27:52 -0800 [thread overview]
Message-ID: <20261113222755.1696567-1-dcemin@nvidia.com> (raw)
Lenovo now ships ACPI based arm64 laptops whose firmware exposes the
same ACPI-WMI interfaces as the x86 IdeaPad and Legion machines: the Fn
key event GUID consumed by ideapad-laptop, the hotkey utility GUID used
for the microphone mute LED, and the GameZone, Other Mode and capability
data GUIDs behind the thermal operation modes. Since 884d53763d30
("platform/wmi: Remove dependency on CONFIG_X86") the ACPI-WMI core
builds on arm64, but the Lenovo WMI drivers still live under
drivers/platform/x86, which is gated by X86_PLATFORM_DEVICES, so none of
that code can be used where the firmware is.
This series:
1. moves the architecture independent Lenovo WMI drivers into a new
drivers/platform/lenovo directory, following drivers/platform/surface
which exists for the same reason (Surface ships x86 and arm64);
ideapad-laptop, thinkpad_acpi, think-lmi and the Yoga tablet drivers
stay under x86 because they need i8042, port I/O or x86 only devices;
2. adds a small WMI hotkeys driver for the Fn key event GUID on machines
where ideapad-laptop cannot bind;
3. makes ideapad-laptop's own WMI event driver decline the GUIDs when
the IdeaPad VPC device is absent, since it can never report events
there.
Patch 2 was tested on a Lenovo Yoga 9 2-in-1 16 (arm64): microphone
mute, airplane mode, the Smart Key, the Smart Connect key and the Fn+Q
operation mode key all report input events. The same key set is dead on
a Lenovo Yoga Pro 9 (arm64) today and uses the same GUID.
Patches 1 and 3 are compile tested on x86_64 and arm64 (defconfig plus
all LENOVO_WMI options as modules).
Two questions I would like the maintainers' view on before this goes
further:
a. Is a vendor directory (drivers/platform/lenovo, like surface) the
right home, or should the architecture independent Lenovo WMI
drivers move under drivers/platform/wmi next to the core instead?
b. Should the Fn key event handling stay a separate small driver, or
be factored out of ideapad-laptop so x86 and arm64 share one path?
ideapad-laptop handles the event only when its VPC platform driver
is bound, and the arm64 machines expose none of the VPC interface
it is built on (no _CFG, VPCR/VPCW, DYTC or HALS/SALS), so making
it the single driver means gating most of its probe. Two smaller
options: lift ideapad-laptop's own Fn key wmi_driver and keymap
into this file and let ideapad-laptop register for the events it
still wants (Fn lock LED, DYTC cycle), or the hid-asus/asus-wmi
shape where a companion WMI module exports the event to a
subsystem driver. The keymap in patch 2 duplicates entries of
ideapad-laptop's table on purpose until that is decided.
Patch 2 declines to bind when the IdeaPad VPC device (VPC2004) is
present, so machines handled by ideapad-laptop keep it; patch 3 is the
mirror on the ideapad-laptop side. The new MAINTAINERS entry uses
platform-driver-x86, the list that already covers drivers/platform/arm64,
the ACPI-WMI core and the other Lenovo WMI drivers.
David Cemin (3):
platform: lenovo: move the architecture independent WMI drivers out of
x86
platform: lenovo: add WMI hotkeys driver
platform/x86: ideapad-laptop: do not bind the WMI event devices
without the VPC
MAINTAINERS | 9 +-
drivers/platform/Kconfig | 2 +
drivers/platform/Makefile | 1 +
drivers/platform/lenovo/Kconfig | 101 ++++++++++++
drivers/platform/lenovo/Makefile | 23 +++
.../platform/{x86 => }/lenovo/wmi-camera.c | 0
.../platform/{x86 => }/lenovo/wmi-capdata.c | 0
.../platform/{x86 => }/lenovo/wmi-capdata.h | 0
.../platform/{x86 => }/lenovo/wmi-events.c | 0
.../platform/{x86 => }/lenovo/wmi-events.h | 0
.../platform/{x86 => }/lenovo/wmi-gamezone.c | 0
.../platform/{x86 => }/lenovo/wmi-helpers.c | 0
.../platform/{x86 => }/lenovo/wmi-helpers.h | 0
.../{x86 => }/lenovo/wmi-hotkey-utilities.c | 0
drivers/platform/lenovo/wmi-hotkeys.c | 151 ++++++++++++++++++
drivers/platform/{x86 => }/lenovo/wmi-other.c | 0
drivers/platform/x86/lenovo/Kconfig | 67 --------
drivers/platform/x86/lenovo/Makefile | 7 -
drivers/platform/x86/lenovo/ideapad-laptop.c | 8 +
19 files changed, 294 insertions(+), 75 deletions(-)
create mode 100644 drivers/platform/lenovo/Kconfig
create mode 100644 drivers/platform/lenovo/Makefile
rename drivers/platform/{x86 => }/lenovo/wmi-camera.c (100%)
rename drivers/platform/{x86 => }/lenovo/wmi-capdata.c (100%)
rename drivers/platform/{x86 => }/lenovo/wmi-capdata.h (100%)
rename drivers/platform/{x86 => }/lenovo/wmi-events.c (100%)
rename drivers/platform/{x86 => }/lenovo/wmi-events.h (100%)
rename drivers/platform/{x86 => }/lenovo/wmi-gamezone.c (100%)
rename drivers/platform/{x86 => }/lenovo/wmi-helpers.c (100%)
rename drivers/platform/{x86 => }/lenovo/wmi-helpers.h (100%)
rename drivers/platform/{x86 => }/lenovo/wmi-hotkey-utilities.c (100%)
create mode 100644 drivers/platform/lenovo/wmi-hotkeys.c
rename drivers/platform/{x86 => }/lenovo/wmi-other.c (100%)
base-commit: 2800868f63227c8237d70c41e70d441c919620d6
--
2.56.1
next reply other threads:[~2026-11-13 22:28 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-13 22:27 David Cemin [this message]
2026-11-13 22:27 ` [RFC PATCH 1/3] platform: lenovo: move the architecture independent WMI drivers out of x86 David Cemin
2026-11-13 22:27 ` [RFC PATCH 2/3] platform: lenovo: add WMI hotkeys driver David Cemin
2026-11-13 22:27 ` [RFC PATCH 3/3] platform/x86: ideapad-laptop: do not bind the WMI event devices without the VPC David Cemin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261113222755.1696567-1-dcemin@nvidia.com \
--to=dcemin@nvidia.com \
--cc=W_Armin@gmx.de \
--cc=derekjohn.clark@gmail.com \
--cc=hansg@kernel.org \
--cc=ikepanhc@gmail.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=ldemarchi@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mpearson-lenovo@squebb.ca \
--cc=platform-driver-x86@vger.kernel.org \
--cc=xy-jackie@139.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®