Re: [PATCH RFC] platform/x86: Lenovo sub directory

From: Mark Pearson
Date: Mon Jan 08 2024 - 09:41:32 EST


Thanks for the review Hans,

On Mon, Jan 8, 2024, at 9:17 AM, Hans de Goede wrote:
> Hi Mark,
>
> On 1/4/24 01:37, Mark Pearson wrote:
>> Looking for feedback if this is a good idea or not, and if I've missed
>> anything important.
>>
>> Over the holidays it was raining and I was bored so I was toying with the
>> idea of moving some of the thinkpad_acpi functionality out of the file
>> into their own modules - the file is a bit of a beast. I'd like to try and
>> get any commonality between thinkpad, ideapad, etc where possible.
>> My plan was to first look at pulling out the platform_profile pieces and
>> then extend to other pieces (fans, temp, sensors, etc).
>>
>> Doing this will, potentially, create a number of lenovo_xxx files and so it
>> seemed nice to put lenovo stuff in it's own subdirectory (in a similar way
>> to other vendors) before starting the exercise.
>>
>> This was my attempt to see if it was easy - and it was.
>>
>> Please let me know:
>>
>> 1) Is this OK to do, or does it cause any problems?
>
> Moving the lenovo drivers and especially removing the duplicate
> functionality sounds good to me.
>
>> 2) Have I missed anything important?
>
> I have a few small remarks below, other then that this looks good
> to me.
>
>> 3) I don't want to tread on any toes - so if there is protocol to follow
>> with moving files please let me know :) (Or a preferred way to do such an
>> exercise)
>
> No special protocol for moving files.
>
>> 4) I don't have any ideapads to test with. I think this is low risk, but
>> if anybody is able to confirm nothing breaks please let me know.
>
> The moving should definitely be safe. For the refactoring planned on top
> would be good if you can test on some actual hw.
>
>> I will see if I can scrounge some HW from somewhere in the meantime.
>>
>> I will need to rebase before proposing this officially, so please ignore
>> the fact that this is based off 6.7-rc1 and therefore a bit out of date.
>>
>> Signed-off-by: Mark Pearson <mpearson-lenovo@xxxxxxxxx>
>> ---
>> .../admin-guide/laptops/thinkpad-acpi.rst | 3 +-
>> MAINTAINERS | 6 +-
>> drivers/platform/x86/Kconfig | 196 +---------------
>> drivers/platform/x86/Makefile | 10 +-
>> drivers/platform/x86/lenovo/Kconfig | 211 ++++++++++++++++++
>> drivers/platform/x86/lenovo/Makefile | 13 ++
>> .../x86/{ => lenovo}/ideapad-laptop.c | 0
>> .../x86/{ => lenovo}/ideapad-laptop.h | 0
>> .../platform/x86/{ => lenovo}/lenovo-ymc.c | 0
>> .../x86/{ => lenovo}/lenovo-yogabook.c | 0
>> drivers/platform/x86/{ => lenovo}/think-lmi.c | 2 +-
>> drivers/platform/x86/{ => lenovo}/think-lmi.h | 0
>> .../platform/x86/{ => lenovo}/thinkpad_acpi.c | 2 +-
>> 13 files changed, 238 insertions(+), 205 deletions(-)
>> create mode 100644 drivers/platform/x86/lenovo/Kconfig
>> create mode 100644 drivers/platform/x86/lenovo/Makefile
>> rename drivers/platform/x86/{ => lenovo}/ideapad-laptop.c (100%)
>> rename drivers/platform/x86/{ => lenovo}/ideapad-laptop.h (100%)
>> rename drivers/platform/x86/{ => lenovo}/lenovo-ymc.c (100%)
>> rename drivers/platform/x86/{ => lenovo}/lenovo-yogabook.c (100%)
>> rename drivers/platform/x86/{ => lenovo}/think-lmi.c (99%)
>> rename drivers/platform/x86/{ => lenovo}/think-lmi.h (100%)
>> rename drivers/platform/x86/{ => lenovo}/thinkpad_acpi.c (99%)
>>
>> diff --git a/Documentation/admin-guide/laptops/thinkpad-acpi.rst b/Documentation/admin-guide/laptops/thinkpad-acpi.rst
>> index 98d304010170..55b79ee2bb26 100644
>> --- a/Documentation/admin-guide/laptops/thinkpad-acpi.rst
>> +++ b/Documentation/admin-guide/laptops/thinkpad-acpi.rst
>> @@ -20,7 +20,8 @@ This driver used to be named ibm-acpi until kernel 2.6.21 and release
>> 0.13-20070314. It used to be in the drivers/acpi tree, but it was
>> moved to the drivers/misc tree and renamed to thinkpad-acpi for kernel
>> 2.6.22, and release 0.14. It was moved to drivers/platform/x86 for
>> -kernel 2.6.29 and release 0.22.
>> +kernel 2.6.29 and release 0.22. It was moved to drivers/platform/x86/lenovo
>> +for kernel 6.8.
>
> The 6.8 merge window just opened so this is only going to land in the
> next cycle which will be 6.9 .
No problems.

>
>>
>> The driver is named "thinkpad-acpi". In some places, like module
>> names and log messages, "thinkpad_acpi" is used because of userspace
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 97f51d5ec1cf..c83ed9a51a44 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -10243,7 +10243,7 @@ M: Ike Panhc <ike.pan@xxxxxxxxxxxxx>
>> L: platform-driver-x86@xxxxxxxxxxxxxxx
>> S: Maintained
>> W: http://launchpad.net/ideapad-laptop
>> -F: drivers/platform/x86/ideapad-laptop.c
>> +F: drivers/platform/x86/lenovo/ideapad-laptop.c
>>
>> IDEAPAD LAPTOP SLIDEBAR DRIVER
>> M: Andrey Moiseev <o2g.org.ru@xxxxxxxxx>
>> @@ -21637,14 +21637,14 @@ S: Maintained
>> W: http://ibm-acpi.sourceforge.net
>> W: http://thinkwiki.org/wiki/Ibm-acpi
>> T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
>> -F: drivers/platform/x86/thinkpad_acpi.c
>> +F: drivers/platform/x86/lenovo/thinkpad_acpi.c
>>
>> THINKPAD LMI DRIVER
>> M: Mark Pearson <markpearson@xxxxxxxxxx>
>> L: platform-driver-x86@xxxxxxxxxxxxxxx
>> S: Maintained
>> F: Documentation/ABI/testing/sysfs-class-firmware-attributes
>> -F: drivers/platform/x86/think-lmi.?
>> +F: drivers/platform/x86/lenovo/think-lmi.?
>>
>> THUNDERBOLT DMA TRAFFIC TEST DRIVER
>> M: Isaac Hazan <isaac.hazan@xxxxxxxxx>
>> diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
>> index 7e69fdaccdd5..842ced89bd82 100644
>> --- a/drivers/platform/x86/Kconfig
>> +++ b/drivers/platform/x86/Kconfig
>> @@ -121,20 +121,6 @@ config GIGABYTE_WMI
>> To compile this driver as a module, choose M here: the module will
>> be called gigabyte-wmi.
>>
>> -config YOGABOOK
>> - tristate "Lenovo Yoga Book tablet key driver"
>> - depends on ACPI_WMI
>> - depends on INPUT
>> - depends on I2C
>> - select LEDS_CLASS
>> - select NEW_LEDS
>> - help
>> - Say Y here if you want to support the 'Pen' key and keyboard backlight
>> - control on the Lenovo Yoga Book tablets.
>> -
>> - To compile this driver as a module, choose M here: the module will
>> - be called lenovo-yogabook.
>> -
>> config ACERHDF
>> tristate "Acer Aspire One temperature and fan driver"
>> depends on ACPI && THERMAL
>> @@ -430,6 +416,7 @@ config WIRELESS_HOTKEY
>> To compile this driver as a module, choose M here: the module will
>> be called wireless-hotkey.
>>
>> +
>> config IBM_RTL
>> tristate "Device driver to enable PRTL support"
>> depends on PCI
>
> stray blank line insertion, please drop this.
Ack

>
>
>> @@ -446,31 +433,6 @@ config IBM_RTL
>> state = 0 (BIOS SMIs on)
>> state = 1 (BIOS SMIs off)
>>
>> -config IDEAPAD_LAPTOP
>> - tristate "Lenovo IdeaPad Laptop Extras"
>> - depends on ACPI
>> - depends on RFKILL && INPUT
>> - depends on SERIO_I8042
>> - depends on BACKLIGHT_CLASS_DEVICE
>> - depends on ACPI_VIDEO || ACPI_VIDEO = n
>> - depends on ACPI_WMI || ACPI_WMI = n
>> - select ACPI_PLATFORM_PROFILE
>> - select INPUT_SPARSEKMAP
>> - select NEW_LEDS
>> - select LEDS_CLASS
>> - help
>> - This is a driver for Lenovo IdeaPad netbooks contains drivers for
>> - rfkill switch, hotkey, fan control and backlight control.
>> -
>> -config LENOVO_YMC
>> - tristate "Lenovo Yoga Tablet Mode Control"
>> - depends on ACPI_WMI
>> - depends on INPUT
>> - select INPUT_SPARSEKMAP
>> - help
>> - This driver maps the Tablet Mode Control switch to SW_TABLET_MODE input
>> - events for Lenovo Yoga notebooks.
>> -
>> config SENSORS_HDAPS
>> tristate "Thinkpad Hard Drive Active Protection System (hdaps)"
>> depends on INPUT
>> @@ -489,162 +451,10 @@ config SENSORS_HDAPS
>> Say Y here if you have an applicable laptop and want to experience
>> the awesome power of hdaps.
>>
>> -config THINKPAD_ACPI
>> - tristate "ThinkPad ACPI Laptop Extras"
>> - depends on ACPI
>> - depends on ACPI_BATTERY
>> - depends on INPUT
>> - depends on RFKILL || RFKILL = n
>> - depends on ACPI_VIDEO || ACPI_VIDEO = n
>> - depends on BACKLIGHT_CLASS_DEVICE
>> - depends on I2C
>> - depends on DRM
>> - select ACPI_PLATFORM_PROFILE
>> - select DRM_PRIVACY_SCREEN
>> - select HWMON
>> - select NVRAM
>> - select NEW_LEDS
>> - select LEDS_CLASS
>> - select LEDS_TRIGGERS
>> - select LEDS_TRIGGER_AUDIO
>> - help
>> - This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
>> - support for Fn-Fx key combinations, Bluetooth control, video
>> - output switching, ThinkLight control, UltraBay eject and more.
>> - For more information about this driver see
>> - <file:Documentation/admin-guide/laptops/thinkpad-acpi.rst> and
>> - <http://ibm-acpi.sf.net/> .
>> -
>> - This driver was formerly known as ibm-acpi.
>> -
>> - Extra functionality will be available if the rfkill (CONFIG_RFKILL)
>> - and/or ALSA (CONFIG_SND) subsystems are available in the kernel.
>> - Note that if you want ThinkPad-ACPI to be built-in instead of
>> - modular, ALSA and rfkill will also have to be built-in.
>> -
>> - If you have an IBM or Lenovo ThinkPad laptop, say Y or M here.
>> -
>> -config THINKPAD_ACPI_ALSA_SUPPORT
>> - bool "Console audio control ALSA interface"
>> - depends on THINKPAD_ACPI
>> - depends on SND
>> - depends on SND = y || THINKPAD_ACPI = SND
>> - default y
>> - help
>> - Enables monitoring of the built-in console audio output control
>> - (headphone and speakers), which is operated by the mute and (in
>> - some ThinkPad models) volume hotkeys.
>> -
>> - If this option is enabled, ThinkPad-ACPI will export an ALSA card
>> - with a single read-only mixer control, which should be used for
>> - on-screen-display feedback purposes by the Desktop Environment.
>> -
>> - Optionally, the driver will also allow software control (the
>> - ALSA mixer will be made read-write). Please refer to the driver
>> - documentation for details.
>> -
>> - All IBM models have both volume and mute control. Newer Lenovo
>> - models only have mute control (the volume hotkeys are just normal
>> - keys and volume control is done through the main HDA mixer).
>> -
>> -config THINKPAD_ACPI_DEBUGFACILITIES
>> - bool "Maintainer debug facilities"
>> - depends on THINKPAD_ACPI
>> - help
>> - Enables extra stuff in the thinkpad-acpi which is completely useless
>> - for normal use. Read the driver source to find out what it does.
>> -
>> - Say N here, unless you were told by a kernel maintainer to do
>> - otherwise.
>> -
>> -config THINKPAD_ACPI_DEBUG
>> - bool "Verbose debug mode"
>> - depends on THINKPAD_ACPI
>> - help
>> - Enables extra debugging information, at the expense of a slightly
>> - increase in driver size.
>> -
>> - If you are not sure, say N here.
>> -
>> -config THINKPAD_ACPI_UNSAFE_LEDS
>> - bool "Allow control of important LEDs (unsafe)"
>> - depends on THINKPAD_ACPI
>> - help
>> - Overriding LED state on ThinkPads can mask important
>> - firmware alerts (like critical battery condition), or misled
>> - the user into damaging the hardware (undocking or ejecting
>> - the bay while buses are still active), etc.
>> -
>> - LED control on the ThinkPad is write-only (with very few
>> - exceptions on very ancient models), which makes it
>> - impossible to know beforehand if important information will
>> - be lost when one changes LED state.
>> -
>> - Users that know what they are doing can enable this option
>> - and the driver will allow control of every LED, including
>> - the ones on the dock stations.
>> -
>> - Never enable this option on a distribution kernel.
>> -
>> - Say N here, unless you are building a kernel for your own
>> - use, and need to control the important firmware LEDs.
>> -
>> -config THINKPAD_ACPI_VIDEO
>> - bool "Video output control support"
>> - depends on THINKPAD_ACPI
>> - default y
>> - help
>> - Allows the thinkpad_acpi driver to provide an interface to control
>> - the various video output ports.
>> -
>> - This feature often won't work well, depending on ThinkPad model,
>> - display state, video output devices in use, whether there is a X
>> - server running, phase of the moon, and the current mood of
>> - Schroedinger's cat. If you can use X.org's RandR to control
>> - your ThinkPad's video output ports instead of this feature,
>> - don't think twice: do it and say N here to save memory and avoid
>> - bad interactions with X.org.
>> -
>> - NOTE: access to this feature is limited to processes with the
>> - CAP_SYS_ADMIN capability, to avoid local DoS issues in platforms
>> - where it interacts badly with X.org.
>> -
>> - If you are not sure, say Y here but do try to check if you could
>> - be using X.org RandR instead.
>> -
>> -config THINKPAD_ACPI_HOTKEY_POLL
>> - bool "Support NVRAM polling for hot keys"
>> - depends on THINKPAD_ACPI
>> - default y
>> - help
>> - Some thinkpad models benefit from NVRAM polling to detect a few of
>> - the hot key press events. If you know your ThinkPad model does not
>> - need to do NVRAM polling to support any of the hot keys you use,
>> - unselecting this option will save about 1kB of memory.
>> -
>> - ThinkPads T40 and newer, R52 and newer, and X31 and newer are
>> - unlikely to need NVRAM polling in their latest BIOS versions.
>> -
>> - NVRAM polling can detect at most the following keys: ThinkPad/Access
>> - IBM, Zoom, Switch Display (fn+F7), ThinkLight, Volume up/down/mute,
>> - Brightness up/down, Display Expand (fn+F8), Hibernate (fn+F12).
>> -
>> - If you are not sure, say Y here. The driver enables polling only if
>> - it is strictly necessary to do so.
>> -
>> -config THINKPAD_LMI
>> - tristate "Lenovo WMI-based systems management driver"
>> - depends on ACPI_WMI
>> - select FW_ATTR_CLASS
>> - help
>> - This driver allows changing BIOS settings on Lenovo machines whose
>> - BIOS support the WMI interface.
>> -
>> - To compile this driver as a module, choose M here: the module will
>> - be called think-lmi.
>> -
>> source "drivers/platform/x86/intel/Kconfig"
>>
>> +source "drivers/platform/x86/lenovo/Kconfig"
>> +
>> config MSI_EC
>> tristate "MSI EC Extras"
>> depends on ACPI
>
> Random remark: it would certainly be good if we can reduce the number
> of THINKPAD_ACPI related Kconfig symbols ...
Agreed :)

>
>> diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
>> index c7a18e95ad8c..ccf3610cb34b 100644
>> --- a/drivers/platform/x86/Makefile
>> +++ b/drivers/platform/x86/Makefile
>> @@ -58,18 +58,16 @@ obj-$(CONFIG_X86_PLATFORM_DRIVERS_HP) += hp/
>> # Hewlett Packard Enterprise
>> obj-$(CONFIG_UV_SYSFS) += uv_sysfs.o
>>
>> -# IBM Thinkpad and Lenovo
>> +# IBM Thinkpad
>> obj-$(CONFIG_IBM_RTL) += ibm_rtl.o
>> -obj-$(CONFIG_IDEAPAD_LAPTOP) += ideapad-laptop.o
>> -obj-$(CONFIG_LENOVO_YMC) += lenovo-ymc.o
>> obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o
>> -obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o
>> -obj-$(CONFIG_THINKPAD_LMI) += think-lmi.o
>> -obj-$(CONFIG_YOGABOOK) += lenovo-yogabook.o
>>
>> # Intel
>> obj-y += intel/
>>
>> +# Lenovo
>> +obj-$(CONFIG_X86_PLATFORM_DRIVERS_LENOVO) += lenovo/
>> +
>> # MSI
>> obj-$(CONFIG_MSI_EC) += msi-ec.o
>> obj-$(CONFIG_MSI_LAPTOP) += msi-laptop.o
>> diff --git a/drivers/platform/x86/lenovo/Kconfig b/drivers/platform/x86/lenovo/Kconfig
>> new file mode 100644
>> index 000000000000..a4de6f5b841d
>> --- /dev/null
>> +++ b/drivers/platform/x86/lenovo/Kconfig
>> @@ -0,0 +1,211 @@
>> +# SPDX-License-Identifier: GPL-2.0-only
>> +#
>> +# Lenovo X86 Platform Specific Drivers
>> +#
>> +
>> +menuconfig X86_PLATFORM_DRIVERS_LENOVO
>> + bool "Lenovo X86 Platform Specific Device Drivers"
>> + default y
>> + help
>> + Say Y here to get to see options for device drivers for various
>> + Lenovo x86 platforms, including vendor-specific laptop extension drivers.
>> + This option alone does not add any kernel code.
>> +
>> + If you say N, all options in this submenu will be skipped and disabled.
>> +
>> +if X86_PLATFORM_DRIVERS_LENOVO
>> +
>> +config YOGABOOK
>> + tristate "Lenovo Yoga Book tablet key driver"
>> + depends on ACPI_WMI
>> + depends on INPUT
>> + depends on I2C
>> + select LEDS_CLASS
>> + select NEW_LEDS
>> + help
>> + Say Y here if you want to support the 'Pen' key and keyboard backlight
>> + control on the Lenovo Yoga Book tablets.
>> +
>> + To compile this driver as a module, choose M here: the module will
>> + be called lenovo-yogabook.
>> +
>> +config IDEAPAD_LAPTOP
>> + tristate "Lenovo IdeaPad Laptop Extras"
>> + depends on ACPI
>> + depends on RFKILL && INPUT
>> + depends on SERIO_I8042
>> + depends on BACKLIGHT_CLASS_DEVICE
>> + depends on ACPI_VIDEO || ACPI_VIDEO = n
>> + depends on ACPI_WMI || ACPI_WMI = n
>> + select ACPI_PLATFORM_PROFILE
>> + select INPUT_SPARSEKMAP
>> + select NEW_LEDS
>> + select LEDS_CLASS
>> + help
>> + This is a driver for Lenovo IdeaPad netbooks contains drivers for
>> + rfkill switch, hotkey, fan control and backlight control.
>> +
>> +config LENOVO_YMC
>> + tristate "Lenovo Yoga Tablet Mode Control"
>> + depends on ACPI_WMI
>> + depends on INPUT
>> + select INPUT_SPARSEKMAP
>> + help
>> + This driver maps the Tablet Mode Control switch to SW_TABLET_MODE input
>> + events for Lenovo Yoga notebooks.
>> +
>> +config THINKPAD_ACPI
>> + tristate "ThinkPad ACPI Laptop Extras"
>> + depends on ACPI
>> + depends on ACPI_BATTERY
>> + depends on INPUT
>> + depends on RFKILL || RFKILL = n
>> + depends on ACPI_VIDEO || ACPI_VIDEO = n
>> + depends on BACKLIGHT_CLASS_DEVICE
>> + depends on I2C
>> + depends on DRM
>> + select ACPI_PLATFORM_PROFILE
>> + select DRM_PRIVACY_SCREEN
>> + select HWMON
>> + select NVRAM
>> + select NEW_LEDS
>> + select LEDS_CLASS
>> + select LEDS_TRIGGERS
>> + select LEDS_TRIGGER_AUDIO
>> + help
>> + This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
>> + support for Fn-Fx key combinations, Bluetooth control, video
>> + output switching, ThinkLight control, UltraBay eject and more.
>> + For more information about this driver see
>> + <file:Documentation/admin-guide/laptops/thinkpad-acpi.rst> and
>> + <http://ibm-acpi.sf.net/> .
>> +
>> + This driver was formerly known as ibm-acpi.
>> +
>> + Extra functionality will be available if the rfkill (CONFIG_RFKILL)
>> + and/or ALSA (CONFIG_SND) subsystems are available in the kernel.
>> + Note that if you want ThinkPad-ACPI to be built-in instead of
>> + modular, ALSA and rfkill will also have to be built-in.
>> +
>> + If you have an IBM or Lenovo ThinkPad laptop, say Y or M here.
>> +
>> +config THINKPAD_ACPI_ALSA_SUPPORT
>> + bool "Console audio control ALSA interface"
>> + depends on THINKPAD_ACPI
>> + depends on SND
>> + depends on SND = y || THINKPAD_ACPI = SND
>> + default y
>> + help
>> + Enables monitoring of the built-in console audio output control
>> + (headphone and speakers), which is operated by the mute and (in
>> + some ThinkPad models) volume hotkeys.
>> +
>> + If this option is enabled, ThinkPad-ACPI will export an ALSA card
>> + with a single read-only mixer control, which should be used for
>> + on-screen-display feedback purposes by the Desktop Environment.
>> +
>> + Optionally, the driver will also allow software control (the
>> + ALSA mixer will be made read-write). Please refer to the driver
>> + documentation for details.
>> +
>> + All IBM models have both volume and mute control. Newer Lenovo
>> + models only have mute control (the volume hotkeys are just normal
>> + keys and volume control is done through the main HDA mixer).
>> +
>> +config THINKPAD_ACPI_DEBUGFACILITIES
>> + bool "Maintainer debug facilities"
>> + depends on THINKPAD_ACPI
>> + help
>> + Enables extra stuff in the thinkpad-acpi which is completely useless
>> + for normal use. Read the driver source to find out what it does.
>> +
>> + Say N here, unless you were told by a kernel maintainer to do
>> + otherwise.
>> +
>> +config THINKPAD_ACPI_DEBUG
>> + bool "Verbose debug mode"
>> + depends on THINKPAD_ACPI
>> + help
>> + Enables extra debugging information, at the expense of a slightly
>> + increase in driver size.
>> +
>> + If you are not sure, say N here.
>> +
>> +config THINKPAD_ACPI_UNSAFE_LEDS
>> + bool "Allow control of important LEDs (unsafe)"
>> + depends on THINKPAD_ACPI
>> + help
>> + Overriding LED state on ThinkPads can mask important
>> + firmware alerts (like critical battery condition), or misled
>> + the user into damaging the hardware (undocking or ejecting
>> + the bay while buses are still active), etc.
>> +
>> + LED control on the ThinkPad is write-only (with very few
>> + exceptions on very ancient models), which makes it
>> + impossible to know beforehand if important information will
>> + be lost when one changes LED state.
>> +
>> + Users that know what they are doing can enable this option
>> + and the driver will allow control of every LED, including
>> + the ones on the dock stations.
>> +
>> + Never enable this option on a distribution kernel.
>> +
>> + Say N here, unless you are building a kernel for your own
>> + use, and need to control the important firmware LEDs.
>> +
>> +config THINKPAD_ACPI_VIDEO
>> + bool "Video output control support"
>> + depends on THINKPAD_ACPI
>> + default y
>> + help
>> + Allows the thinkpad_acpi driver to provide an interface to control
>> + the various video output ports.
>> +
>> + This feature often won't work well, depending on ThinkPad model,
>> + display state, video output devices in use, whether there is a X
>> + server running, phase of the moon, and the current mood of
>> + Schroedinger's cat. If you can use X.org's RandR to control
>> + your ThinkPad's video output ports instead of this feature,
>> + don't think twice: do it and say N here to save memory and avoid
>> + bad interactions with X.org.
>> +
>> + NOTE: access to this feature is limited to processes with the
>> + CAP_SYS_ADMIN capability, to avoid local DoS issues in platforms
>> + where it interacts badly with X.org.
>> +
>> + If you are not sure, say Y here but do try to check if you could
>> + be using X.org RandR instead.
>> +
>> +config THINKPAD_ACPI_HOTKEY_POLL
>> + bool "Support NVRAM polling for hot keys"
>> + depends on THINKPAD_ACPI
>> + default y
>> + help
>> + Some thinkpad models benefit from NVRAM polling to detect a few of
>> + the hot key press events. If you know your ThinkPad model does not
>> + need to do NVRAM polling to support any of the hot keys you use,
>> + unselecting this option will save about 1kB of memory.
>> +
>> + ThinkPads T40 and newer, R52 and newer, and X31 and newer are
>> + unlikely to need NVRAM polling in their latest BIOS versions.
>> +
>> + NVRAM polling can detect at most the following keys: ThinkPad/Access
>> + IBM, Zoom, Switch Display (fn+F7), ThinkLight, Volume up/down/mute,
>> + Brightness up/down, Display Expand (fn+F8), Hibernate (fn+F12).
>> +
>> + If you are not sure, say Y here. The driver enables polling only if
>> + it is strictly necessary to do so.
>> +
>> +config THINKPAD_LMI
>> + tristate "Lenovo WMI-based systems management driver"
>> + depends on ACPI_WMI
>> + select FW_ATTR_CLASS
>> + help
>> + This driver allows changing BIOS settings on Lenovo machines whose
>> + BIOS support the WMI interface.
>> +
>> + To compile this driver as a module, choose M here: the module will
>> + be called think-lmi.
>> +
>> +endif # X86_PLATFORM_DRIVERS_LENOVO
>
> Maybe sort the entries alphabetically, putting the 2 yoga drivers at the end ?
>
> I assume all these entries are just moved and no changes wrt
> depends / selects have been made ?
Yes - I was deliberately trying to minimise the changes.
Only thing is I did make X86_PLATFORM_DRIVERS_LENOVO have default 'y' because I was worried when this got picked up if distro's didn't have this set then Lenovo platforms would stop working and I would get yelled at....a lot.
Everything else is the same as before.

>
>> diff --git a/drivers/platform/x86/lenovo/Makefile b/drivers/platform/x86/lenovo/Makefile
>> new file mode 100644
>> index 000000000000..4f8d6ed369b8
>> --- /dev/null
>> +++ b/drivers/platform/x86/lenovo/Makefile
>> @@ -0,0 +1,13 @@
>> +# SPDX-License-Identifier: GPL-2.0
>> +#
>> +# Makefile for linux/drivers/platform/x86/lenovo
>> +# Lenovo x86 Platform-Specific Drivers
>> +#
>> +
>> +obj-$(CONFIG_IBM_RTL) += ibm_rtl.o
>
> This looks wrong, since you are keeping this in the main
> drivers/platform/x86/Makefile and Kconfig
Ooops - yes, my mistake.
Originally I moved hdaps and ibm_rtl into the Lenovo directory but on further consideration I decided that was a bad idea as these are originally IBM files (pre the business getting sold to Lenovo) and I should leave them where they were.
I missed this when reverting my change. I'll clean this up. Apologies.

>
>> +obj-$(CONFIG_IDEAPAD_LAPTOP) += ideapad-laptop.o
>> +obj-$(CONFIG_LENOVO_YMC) += lenovo-ymc.o
>> +obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o
>
> same remark for the hdaps driver.
ditto above.

>
>> +obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o
>> +obj-$(CONFIG_THINKPAD_LMI) += think-lmi.o
>> +obj-$(CONFIG_YOGABOOK) += lenovo-yogabook.o
>> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c
>> similarity index 100%
>> rename from drivers/platform/x86/ideapad-laptop.c
>> rename to drivers/platform/x86/lenovo/ideapad-laptop.c
>> diff --git a/drivers/platform/x86/ideapad-laptop.h b/drivers/platform/x86/lenovo/ideapad-laptop.h
>> similarity index 100%
>> rename from drivers/platform/x86/ideapad-laptop.h
>> rename to drivers/platform/x86/lenovo/ideapad-laptop.h
>> diff --git a/drivers/platform/x86/lenovo-ymc.c b/drivers/platform/x86/lenovo/lenovo-ymc.c
>> similarity index 100%
>> rename from drivers/platform/x86/lenovo-ymc.c
>> rename to drivers/platform/x86/lenovo/lenovo-ymc.c
>> diff --git a/drivers/platform/x86/lenovo-yogabook.c b/drivers/platform/x86/lenovo/lenovo-yogabook.c
>> similarity index 100%
>> rename from drivers/platform/x86/lenovo-yogabook.c
>> rename to drivers/platform/x86/lenovo/lenovo-yogabook.c
>> diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/lenovo/think-lmi.c
>> similarity index 99%
>> rename from drivers/platform/x86/think-lmi.c
>> rename to drivers/platform/x86/lenovo/think-lmi.c
>> index 3a396b763c49..bf688df50856 100644
>> --- a/drivers/platform/x86/think-lmi.c
>> +++ b/drivers/platform/x86/lenovo/think-lmi.c
>> @@ -19,7 +19,7 @@
>> #include <linux/types.h>
>> #include <linux/dmi.h>
>> #include <linux/wmi.h>
>> -#include "firmware_attributes_class.h"
>> +#include "../firmware_attributes_class.h"
>> #include "think-lmi.h"
>>
>> static bool debug_support;
>> diff --git a/drivers/platform/x86/think-lmi.h b/drivers/platform/x86/lenovo/think-lmi.h
>> similarity index 100%
>> rename from drivers/platform/x86/think-lmi.h
>> rename to drivers/platform/x86/lenovo/think-lmi.h
>> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c
>> similarity index 99%
>> rename from drivers/platform/x86/thinkpad_acpi.c
>> rename to drivers/platform/x86/lenovo/thinkpad_acpi.c
>> index d0b5fd4137bc..7d085d4e02ee 100644
>> --- a/drivers/platform/x86/thinkpad_acpi.c
>> +++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c
>> @@ -80,7 +80,7 @@
>> #include <sound/core.h>
>> #include <sound/initval.h>
>>
>> -#include "dual_accel_detect.h"
>> +#include "../dual_accel_detect.h"
>>
>> /* ThinkPad CMOS commands */
>> #define TP_CMOS_VOLUME_DOWN 0
>
> Regards,
>
> Hans

I have another thinkpad_acpi patch I'm working on that is more important (or at least functionally useful) so I think I'll get that proposed and reviewed first; and then redo this series on the latest with the fixes.
Thanks for the review!

Mark