mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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

  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®