From: "Mark Pearson" <mpearson-lenovo@squebb.ca>
To: "David Cemin" <dcemin@nvidia.com>,
"Hans de Goede" <hansg@kernel.org>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Armin Wolf" <W_Armin@gmx.de>
Cc: "Derek J . Clark" <derekjohn.clark@gmail.com>,
"Jackie Dong" <xy-jackie@139.com>,
"Ike Panhc" <ikepanhc@gmail.com>,
"platform-driver-x86@vger.kernel.org"
<platform-driver-x86@vger.kernel.org>,
linux-kernel@vger.kernel.org, ldemarchi@nvidia.com
Subject: Re: [RFC PATCH 1/3] platform: lenovo: move the architecture independent WMI drivers out of x86
Date: Sun, 15 Nov 2026 16:50:11 -0500 [thread overview]
Message-ID: <cbaf1595-05e3-46cd-b2aa-7bec1315cf8f@app.fastmail.com> (raw)
In-Reply-To: <20261113222755.1696567-2-dcemin@nvidia.com>
On Fri, Nov 13, 2026, at 5:27 PM, David Cemin wrote:
> The Lenovo WMI drivers (events, helpers, capability data, GameZone,
> Other Mode, hotkey utilities and camera button) contain no x86 specific
> code: they talk to firmware through the ACPI-WMI core only. They live
> under drivers/platform/x86 because that is where Lenovo drivers were
> collected, and X86_PLATFORM_DEVICES keeps them off every other
> architecture.
>
> Lenovo now ships ACPI based arm64 laptops whose firmware exposes the
> same WMI GUIDs (the Fn key events, the mic mute LED method, GameZone and
> Other Mode). Give these drivers an architecture independent home,
> drivers/platform/lenovo, following the layout of drivers/platform/surface
> which exists for the same reason, so they can be built wherever the WMI
> core is available. ideapad-laptop, thinkpad_acpi, think-lmi, yogabook and
> the Yoga Tablet drivers stay under x86: they depend on i8042, port I/O or
> x86 only ACPI devices.
>
> Pure code motion: the files, their Kconfig entries and the module naming
> scheme are unchanged. MAINTAINERS entries are updated for the new paths.
>
> Signed-off-by: David Cemin <dcemin@nvidia.com>
> ---
> MAINTAINERS | 3 +-
> drivers/platform/Kconfig | 2 +
> drivers/platform/Makefile | 1 +
> drivers/platform/lenovo/Kconfig | 87 +++++++++++++++++++
> drivers/platform/lenovo/Makefile | 22 +++++
> .../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/{x86 => }/lenovo/wmi-other.c | 0
> drivers/platform/x86/lenovo/Kconfig | 67 --------------
> drivers/platform/x86/lenovo/Makefile | 7 --
> 17 files changed, 114 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%)
> rename drivers/platform/{x86 => }/lenovo/wmi-other.c (100%)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 056408bc086e..3b0ad5a3debe 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -15170,13 +15170,14 @@ L: platform-driver-x86@vger.kernel.org
> S: Maintained
> F: Documentation/wmi/devices/lenovo-wmi-gamezone.rst
> F: Documentation/wmi/devices/lenovo-wmi-other.rst
> +F: drivers/platform/lenovo/
> F: drivers/platform/x86/lenovo/*
>
> LENOVO WMI HOTKEY UTILITIES DRIVER
> M: Jackie Dong <xy-jackie@139.com>
> L: platform-driver-x86@vger.kernel.org
> S: Maintained
> -F: drivers/platform/x86/lenovo/wmi-hotkey-utilities.c
> +F: drivers/platform/lenovo/wmi-hotkey-utilities.c
>
> LENOVO HID drivers
> M: Derek J. Clark <derekjohn.clark@gmail.com>
> diff --git a/drivers/platform/Kconfig b/drivers/platform/Kconfig
> index 312788f249c9..80b2b83b69e5 100644
> --- a/drivers/platform/Kconfig
> +++ b/drivers/platform/Kconfig
> @@ -15,6 +15,8 @@ source "drivers/platform/olpc/Kconfig"
>
> source "drivers/platform/surface/Kconfig"
>
> +source "drivers/platform/lenovo/Kconfig"
> +
> source "drivers/platform/x86/Kconfig"
>
> source "drivers/platform/arm64/Kconfig"
> diff --git a/drivers/platform/Makefile b/drivers/platform/Makefile
> index fa322e7f8716..0144f88ff6db 100644
> --- a/drivers/platform/Makefile
> +++ b/drivers/platform/Makefile
> @@ -12,6 +12,7 @@ obj-$(CONFIG_GOLDFISH) += goldfish/
> obj-$(CONFIG_CHROME_PLATFORMS) += chrome/
> obj-$(CONFIG_CZNIC_PLATFORMS) += cznic/
> obj-$(CONFIG_SURFACE_PLATFORMS) += surface/
> +obj-$(CONFIG_LENOVO_PLATFORMS) += lenovo/
> obj-$(CONFIG_ARM64_PLATFORM_DEVICES) += arm64/
> obj-$(CONFIG_BCM2835_VCHIQ) += raspberrypi/
> obj-$(CONFIG_ACPI_WMI) += wmi/
> diff --git a/drivers/platform/lenovo/Kconfig
> b/drivers/platform/lenovo/Kconfig
> new file mode 100644
> index 000000000000..8222322ca671
> --- /dev/null
> +++ b/drivers/platform/lenovo/Kconfig
> @@ -0,0 +1,87 @@
> +# SPDX-License-Identifier: GPL-2.0-only
> +#
> +# Lenovo Platform-Specific Drivers
> +#
> +
> +menuconfig LENOVO_PLATFORMS
> + bool "Lenovo Platform-Specific Device Drivers"
> + depends on ARM64 || X86 || COMPILE_TEST
> + default y if ARM64 || X86
> + help
> + Say Y here to get to see options for platform-specific device
> drivers
> + for Lenovo devices that do not depend on the CPU architecture, such
> + as the ACPI-WMI based drivers used on both x86 and arm64 laptops.
> + This option alone does not add any kernel code.
> +
> + If you say N, all options in this submenu will be skipped and
> disabled.
> +
> +if LENOVO_PLATFORMS
> +
> +config LENOVO_WMI_HELPERS
> + tristate
> + depends on ACPI_WMI
> +
> +config LENOVO_WMI_EVENTS
> + tristate
> + depends on ACPI_WMI
> +
> +config LENOVO_WMI_CAPDATA
> + tristate
> + depends on ACPI_WMI
> + depends on LENOVO_WMI_HELPERS
> +
> +config LENOVO_WMI_HOTKEY_UTILITIES
> + tristate "Lenovo Hotkey Utility WMI extras driver"
> + depends on ACPI_WMI
> + select NEW_LEDS
> + select LEDS_CLASS
> + imply IDEAPAD_LAPTOP
> + help
> + This driver provides WMI support for Lenovo customized hotkeys
> function,
> + such as LED control for audio/mic mute event for Ideapad, YOGA,
> XiaoXin,
> + Gaming, ThinkBook and so on.
> +
> +config LENOVO_WMI_CAMERA
> + tristate "Lenovo WMI Camera Button driver"
> + depends on ACPI_WMI
> + depends on INPUT
> + help
> + This driver provides support for Lenovo camera button. The Camera
> + button is a GPIO device. This driver receives ACPI notifications
> when
> + the camera button is switched on/off.
> +
> + To compile this driver as a module, choose M here: the module
> + will be called lenovo-wmi-camera.
> +
> +config LENOVO_WMI_GAMEZONE
> + tristate "Lenovo GameZone WMI Driver"
> + depends on ACPI_WMI
> + depends on DMI
> + select ACPI_PLATFORM_PROFILE
> + select LENOVO_WMI_EVENTS
> + select LENOVO_WMI_HELPERS
> + help
> + Say Y here if you have a WMI aware Lenovo Legion device and would
> like to use the
> + platform-profile firmware interface to manage power usage.
> +
> + To compile this driver as a module, choose M here: the module will
> + be called lenovo-wmi-gamezone.
> +
> +config LENOVO_WMI_TUNING
> + tristate "Lenovo Other Mode WMI Driver"
> + depends on ACPI_WMI
> + depends on ACPI_BATTERY
> + select HWMON
> + select FW_ATTR_CLASS
> + select LENOVO_WMI_CAPDATA
> + select LENOVO_WMI_EVENTS
> + select LENOVO_WMI_HELPERS
> + help
> + Say Y here if you have a WMI aware Lenovo Legion device and would
> like to use the
> + firmware_attributes API to control various tunable settings
> typically exposed by
> + Lenovo software in Windows.
> +
> + To compile this driver as a module, choose M here: the module will
> + be called lenovo-wmi-other.
> +
> +endif # LENOVO_PLATFORMS
> diff --git a/drivers/platform/lenovo/Makefile
> b/drivers/platform/lenovo/Makefile
> new file mode 100644
> index 000000000000..1cac115dd735
> --- /dev/null
> +++ b/drivers/platform/lenovo/Makefile
> @@ -0,0 +1,22 @@
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# Makefile for linux/drivers/platform/lenovo
> +# Lenovo Platform Specific Drivers (architecture independent)
> +#
> +
> +lenovo-target-$(CONFIG_LENOVO_WMI_HELPERS) += wmi-helpers.o
> +lenovo-target-$(CONFIG_LENOVO_WMI_EVENTS) += wmi-events.o
> +lenovo-target-$(CONFIG_LENOVO_WMI_CAPDATA) += wmi-capdata.o
> +lenovo-target-$(CONFIG_LENOVO_WMI_HOTKEY_UTILITIES) +=
> wmi-hotkey-utilities.o
> +lenovo-target-$(CONFIG_LENOVO_WMI_CAMERA) += wmi-camera.o
> +lenovo-target-$(CONFIG_LENOVO_WMI_GAMEZONE) += wmi-gamezone.o
> +lenovo-target-$(CONFIG_LENOVO_WMI_TUNING) += wmi-other.o
> +
> +# Add 'lenovo' prefix to each module listed in lenovo-target-*
> +define LENOVO_OBJ_TARGET
> +lenovo-$(1)-y := $(1).o
> +obj-$(2) += lenovo-$(1).o
> +endef
> +
> +$(foreach target, $(basename $(lenovo-target-y)), $(eval $(call
> LENOVO_OBJ_TARGET,$(target),y)))
> +$(foreach target, $(basename $(lenovo-target-m)), $(eval $(call
> LENOVO_OBJ_TARGET,$(target),m)))
> diff --git a/drivers/platform/x86/lenovo/wmi-camera.c
> b/drivers/platform/lenovo/wmi-camera.c
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-camera.c
> rename to drivers/platform/lenovo/wmi-camera.c
> diff --git a/drivers/platform/x86/lenovo/wmi-capdata.c
> b/drivers/platform/lenovo/wmi-capdata.c
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-capdata.c
> rename to drivers/platform/lenovo/wmi-capdata.c
> diff --git a/drivers/platform/x86/lenovo/wmi-capdata.h
> b/drivers/platform/lenovo/wmi-capdata.h
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-capdata.h
> rename to drivers/platform/lenovo/wmi-capdata.h
> diff --git a/drivers/platform/x86/lenovo/wmi-events.c
> b/drivers/platform/lenovo/wmi-events.c
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-events.c
> rename to drivers/platform/lenovo/wmi-events.c
> diff --git a/drivers/platform/x86/lenovo/wmi-events.h
> b/drivers/platform/lenovo/wmi-events.h
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-events.h
> rename to drivers/platform/lenovo/wmi-events.h
> diff --git a/drivers/platform/x86/lenovo/wmi-gamezone.c
> b/drivers/platform/lenovo/wmi-gamezone.c
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-gamezone.c
> rename to drivers/platform/lenovo/wmi-gamezone.c
> diff --git a/drivers/platform/x86/lenovo/wmi-helpers.c
> b/drivers/platform/lenovo/wmi-helpers.c
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-helpers.c
> rename to drivers/platform/lenovo/wmi-helpers.c
> diff --git a/drivers/platform/x86/lenovo/wmi-helpers.h
> b/drivers/platform/lenovo/wmi-helpers.h
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-helpers.h
> rename to drivers/platform/lenovo/wmi-helpers.h
> diff --git a/drivers/platform/x86/lenovo/wmi-hotkey-utilities.c
> b/drivers/platform/lenovo/wmi-hotkey-utilities.c
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-hotkey-utilities.c
> rename to drivers/platform/lenovo/wmi-hotkey-utilities.c
> diff --git a/drivers/platform/x86/lenovo/wmi-other.c
> b/drivers/platform/lenovo/wmi-other.c
> similarity index 100%
> rename from drivers/platform/x86/lenovo/wmi-other.c
> rename to drivers/platform/lenovo/wmi-other.c
> diff --git a/drivers/platform/x86/lenovo/Kconfig
> b/drivers/platform/x86/lenovo/Kconfig
> index 516594993073..36bcefb61805 100644
> --- a/drivers/platform/x86/lenovo/Kconfig
> +++ b/drivers/platform/x86/lenovo/Kconfig
> @@ -20,29 +20,6 @@ config IDEAPAD_LAPTOP
> This is a driver for Lenovo IdeaPad netbooks contains drivers for
> rfkill switch, hotkey, fan control and backlight control.
>
> -config LENOVO_WMI_HOTKEY_UTILITIES
> - tristate "Lenovo Hotkey Utility WMI extras driver"
> - depends on ACPI_WMI
> - select NEW_LEDS
> - select LEDS_CLASS
> - imply IDEAPAD_LAPTOP
> - help
> - This driver provides WMI support for Lenovo customized hotkeys function,
> - such as LED control for audio/mic mute event for Ideapad, YOGA, XiaoXin,
> - Gaming, ThinkBook and so on.
> -
> -config LENOVO_WMI_CAMERA
> - tristate "Lenovo WMI Camera Button driver"
> - depends on ACPI_WMI
> - depends on INPUT
> - help
> - This driver provides support for Lenovo camera button. The Camera
> - button is a GPIO device. This driver receives ACPI notifications when
> - the camera button is switched on/off.
> -
> - To compile this driver as a module, choose M here: the module
> - will be called lenovo-wmi-camera.
> -
> config LENOVO_YB9_KBDOCK
> tristate "Lenovo Yoga Book 9 keyboard dock detection"
> depends on ACPI_WMI
> @@ -246,47 +223,3 @@ config YT2_1380
>
> To compile this driver as a module, choose M here: the module will
> be called lenovo-yogabook.
> -
> -config LENOVO_WMI_CAPDATA
> - tristate
> - depends on ACPI_WMI
> - depends on LENOVO_WMI_HELPERS
> -
> -config LENOVO_WMI_EVENTS
> - tristate
> - depends on ACPI_WMI
> -
> -config LENOVO_WMI_HELPERS
> - tristate
> - depends on ACPI_WMI
> -
> -config LENOVO_WMI_GAMEZONE
> - tristate "Lenovo GameZone WMI Driver"
> - depends on ACPI_WMI
> - depends on DMI
> - select ACPI_PLATFORM_PROFILE
> - select LENOVO_WMI_EVENTS
> - select LENOVO_WMI_HELPERS
> - help
> - Say Y here if you have a WMI aware Lenovo Legion device and would
> like to use the
> - platform-profile firmware interface to manage power usage.
> -
> - To compile this driver as a module, choose M here: the module will
> - be called lenovo-wmi-gamezone.
> -
> -config LENOVO_WMI_TUNING
> - tristate "Lenovo Other Mode WMI Driver"
> - depends on ACPI_WMI
> - depends on ACPI_BATTERY
> - select HWMON
> - select FW_ATTR_CLASS
> - select LENOVO_WMI_CAPDATA
> - select LENOVO_WMI_EVENTS
> - select LENOVO_WMI_HELPERS
> - help
> - Say Y here if you have a WMI aware Lenovo Legion device and would
> like to use the
> - firmware_attributes API to control various tunable settings
> typically exposed by
> - Lenovo software in Windows.
> -
> - To compile this driver as a module, choose M here: the module will
> - be called lenovo-wmi-other.
> diff --git a/drivers/platform/x86/lenovo/Makefile
> b/drivers/platform/x86/lenovo/Makefile
> index 12816d8d5e24..758c36cedee8 100644
> --- a/drivers/platform/x86/lenovo/Makefile
> +++ b/drivers/platform/x86/lenovo/Makefile
> @@ -7,17 +7,10 @@ obj-$(CONFIG_IDEAPAD_LAPTOP) += ideapad-laptop.o
> obj-$(CONFIG_THINKPAD_LMI) += think-lmi.o
> obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o
>
> -lenovo-target-$(CONFIG_LENOVO_WMI_HOTKEY_UTILITIES) += wmi-hotkey-utilities.o
> lenovo-target-$(CONFIG_LENOVO_YB9_KBDOCK) += yb9-kbdock.o
> lenovo-target-$(CONFIG_LENOVO_YMC) += ymc.o
> lenovo-target-$(CONFIG_YOGABOOK) += yogabook.o
> lenovo-target-$(CONFIG_YT2_1380) += yoga-tab2-pro-1380-fastcharger.o
> -lenovo-target-$(CONFIG_LENOVO_WMI_CAMERA) += wmi-camera.o
> -lenovo-target-$(CONFIG_LENOVO_WMI_CAPDATA) += wmi-capdata.o
> -lenovo-target-$(CONFIG_LENOVO_WMI_EVENTS) += wmi-events.o
> -lenovo-target-$(CONFIG_LENOVO_WMI_HELPERS) += wmi-helpers.o
> -lenovo-target-$(CONFIG_LENOVO_WMI_GAMEZONE) += wmi-gamezone.o
> -lenovo-target-$(CONFIG_LENOVO_WMI_TUNING) += wmi-other.o
>
> # Add 'lenovo' prefix to each module listed in lenovo-target-*
> define LENOVO_OBJ_TARGET
> --
> 2.56.1
Looks good to me.
Will the MAINTAINERS file need updating?
Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Mark
next prev parent reply other threads:[~2026-11-15 21:50 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-13 22:27 [RFC PATCH 0/3] platform: lenovo: architecture independent home for the Lenovo WMI drivers David Cemin
2026-11-13 22:27 ` [RFC PATCH 1/3] platform: lenovo: move the architecture independent WMI drivers out of x86 David Cemin
2026-11-15 21:50 ` Mark Pearson [this message]
2026-11-13 22:27 ` [RFC PATCH 2/3] platform: lenovo: add WMI hotkeys driver David Cemin
2026-11-15 16:12 ` Armin Wolf
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
2026-11-15 15:33 ` [RFC PATCH 0/3] platform: lenovo: architecture independent home for the Lenovo WMI drivers Hans de Goede
2026-11-15 16:02 ` Armin Wolf
2026-11-15 18:02 ` Hans de Goede
2026-11-15 20:10 ` Hans de Goede
2026-11-15 20:12 ` Hans de Goede
2026-11-15 21:48 ` Mark Pearson
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=cbaf1595-05e3-46cd-b2aa-7bec1315cf8f@app.fastmail.com \
--to=mpearson-lenovo@squebb.ca \
--cc=W_Armin@gmx.de \
--cc=dcemin@nvidia.com \
--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=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®