.../wmi/devices/lenovo-wmi-fan-method.rst | 34 ++ .../wmi/devices/lenovo-wmi-other.rst | 14 + MAINTAINERS | 1 + drivers/platform/x86/lenovo/Kconfig | 11 + drivers/platform/x86/lenovo/Makefile | 1 + drivers/platform/x86/lenovo/wmi-fan-method.c | 380 ++++++++++++++++++ drivers/platform/x86/lenovo/wmi-other.c | 215 +++++++++- 7 files changed, 649 insertions(+), 7 deletions(-) create mode 100644 Documentation/wmi/devices/lenovo-wmi-fan-method.rst create mode 100644 drivers/platform/x86/lenovo/wmi-fan-method.c
Capability Data does not cover all fan controls on the Legion Go. Full Speed uses a separate Other Mode feature, some firmware exposes an RPM reading that Capability Data does not advertise, and the custom fan table uses a separate Fan Method WMI interface. Patches 1 and 2 add Full Speed and the RPM fallback to the existing HWMON device. Patch 3 adds a Fan Method driver and attaches the ten curve points to that device when both WMI interfaces belong to the same provider. Other Mode continues to work without Fan Method. The open question is how the firmware control range should map to HWMON. On the tested Legion Go 8APU1, values from 0 through 115 produce the observable fan response and correspond to Lenovo's 0 through 115 percent range. Lenovo software shows 0 through 100 percent to the user, and 115 reaches the RPM observed in Full Speed mode. Firmware accepts values through 255, but no RPM increase was observed above 115. This series keeps the native values unchanged and exposes the fixed temperatures as read-only automatic points. Should the driver map the effective 0 through 115 range to the standard HWMON 0 through 255 scale, or keep the native firmware values unchanged? Aditya Dash (3): platform/x86: lenovo-wmi-other: Add Legion Go Full Speed control platform/x86: lenovo-wmi-other: Add Legion Go fan RPM fallback platform/x86: lenovo: Add Legion Go Fan Method curve driver .../wmi/devices/lenovo-wmi-fan-method.rst | 34 ++ .../wmi/devices/lenovo-wmi-other.rst | 14 + MAINTAINERS | 1 + drivers/platform/x86/lenovo/Kconfig | 11 + drivers/platform/x86/lenovo/Makefile | 1 + drivers/platform/x86/lenovo/wmi-fan-method.c | 380 ++++++++++++++++++ drivers/platform/x86/lenovo/wmi-other.c | 215 +++++++++- 7 files changed, 649 insertions(+), 7 deletions(-) create mode 100644 Documentation/wmi/devices/lenovo-wmi-fan-method.rst create mode 100644 drivers/platform/x86/lenovo/wmi-fan-method.c base-commit: aca39607c1734ed976fdd65deb75b3555a5a0326 -- 2.55.0
Hi Aditya, On Sat, 2026-08-22 at 03:17 +0530, Aditya Dash wrote: > Capability Data does not cover all fan controls on the Legion Go. Full > Speed uses a separate Other Mode feature, some firmware exposes an RPM > reading that Capability Data does not advertise, > "does not advertise" Really? Please dump capdata via debugfs and attach it. > and the custom fan table > uses a separate Fan Method WMI interface. > The hwmon part of lenovo-wmi-other was done by me. Please CC me in your next revision. > Patches 1 and 2 add Full Speed and the RPM fallback to the existing HWMON > device. Patch 3 adds a Fan Method driver and attaches the ten curve points > to that device when both WMI interfaces belong to the same provider. Other > Mode continues to work without Fan Method. > > The open question is how the firmware control range should map to HWMON. > On the tested Legion Go 8APU1, values from 0 through 115 produce the > observable fan response and correspond to Lenovo's 0 through 115 percent > range. Lenovo software shows 0 through 100 percent to the user, and 115 > reaches the RPM observed in Full Speed mode. Firmware accepts values > through 255, but no RPM increase was observed above 115. This is what we've observed in Fan Test Data. We chose to enforce constraints according to it and relax it when users set an module parameter. > > This series keeps the native values unchanged and exposes the fixed > temperatures as read-only automatic points. Should the driver map the > effective 0 through 115 range to the standard HWMON 0 through 255 scale, > or keep the native firmware values unchanged? In your case, if there is no range data to query, I'd prefer enforcing 0- 100 by default and relaxing it when appropriate range data is provided by module parameters or DMI table. The range should always map to hwmon pwm 0-255. As far as I can recall, Derek once said that he planed to introduce fan curve support for Legion Go, so I think he has some helpful ideas. Thanks, Rong > > Aditya Dash (3): > platform/x86: lenovo-wmi-other: Add Legion Go Full Speed control > platform/x86: lenovo-wmi-other: Add Legion Go fan RPM fallback > platform/x86: lenovo: Add Legion Go Fan Method curve driver > > .../wmi/devices/lenovo-wmi-fan-method.rst | 34 ++ > .../wmi/devices/lenovo-wmi-other.rst | 14 + > MAINTAINERS | 1 + > drivers/platform/x86/lenovo/Kconfig | 11 + > drivers/platform/x86/lenovo/Makefile | 1 + > drivers/platform/x86/lenovo/wmi-fan-method.c | 380 ++++++++++++++++++ > drivers/platform/x86/lenovo/wmi-other.c | 215 +++++++++- > 7 files changed, 649 insertions(+), 7 deletions(-) > create mode 100644 Documentation/wmi/devices/lenovo-wmi-fan-method.rst > create mode 100644 drivers/platform/x86/lenovo/wmi-fan-method.c > > > base-commit: aca39607c1734ed976fdd65deb75b3555a5a0326
On August 23, 2026 12:32:02 PM PDT, Rong Zhang <i@rong.moe> wrote: >Hi Aditya, > >On Sat, 2026-08-22 at 03:17 +0530, Aditya Dash wrote: >> Capability Data does not cover all fan controls on the Legion Go. Full >> Speed uses a separate Other Mode feature, some firmware exposes an RPM >> reading that Capability Data does not advertise, >> > >"does not advertise" > >Really? Please dump capdata via debugfs and attach it. > >> and the custom fan table >> uses a separate Fan Method WMI interface. >> > >The hwmon part of lenovo-wmi-other was done by me. Please CC me in your >next revision. > Hi Rong, I'd ack if you wanted to add yourself as a maintainer of the Lenovo drivers so you get picked up by the kernel scripts. Otherwise people won't know to Cc you. >> Patches 1 and 2 add Full Speed and the RPM fallback to the existing HWMON >> device. Patch 3 adds a Fan Method driver and attaches the ten curve points >> to that device when both WMI interfaces belong to the same provider. Other >> Mode continues to work without Fan Method. >> >> The open question is how the firmware control range should map to HWMON. >> On the tested Legion Go 8APU1, values from 0 through 115 produce the >> observable fan response and correspond to Lenovo's 0 through 115 percent >> range. Lenovo software shows 0 through 100 percent to the user, and 115 >> reaches the RPM observed in Full Speed mode. Firmware accepts values >> through 255, but no RPM increase was observed above 115. > >This is what we've observed in Fan Test Data. We chose to enforce >constraints according to it and relax it when users set an module >parameter. > >> >> This series keeps the native values unchanged and exposes the fixed >> temperatures as read-only automatic points. Should the driver map the >> effective 0 through 115 range to the standard HWMON 0 through 255 scale, >> or keep the native firmware values unchanged? > >In your case, if there is no range data to query, I'd prefer enforcing 0- >100 by default and relaxing it when appropriate range data is provided by >module parameters or DMI table. > >The range should always map to hwmon pwm 0-255. Concur on both counts. >As far as I can recall, Derek once said that he planed to introduce fan >curve support for Legion Go, so I think he has some helpful ideas. I'll post a full review once I've had time to test and review the documentation again. Cheers, Derek >Thanks, >Rong > >> >> Aditya Dash (3): >> platform/x86: lenovo-wmi-other: Add Legion Go Full Speed control >> platform/x86: lenovo-wmi-other: Add Legion Go fan RPM fallback >> platform/x86: lenovo: Add Legion Go Fan Method curve driver >> >> .../wmi/devices/lenovo-wmi-fan-method.rst | 34 ++ >> .../wmi/devices/lenovo-wmi-other.rst | 14 + >> MAINTAINERS | 1 + >> drivers/platform/x86/lenovo/Kconfig | 11 + >> drivers/platform/x86/lenovo/Makefile | 1 + >> drivers/platform/x86/lenovo/wmi-fan-method.c | 380 ++++++++++++++++++ >> drivers/platform/x86/lenovo/wmi-other.c | 215 +++++++++- >> 7 files changed, 649 insertions(+), 7 deletions(-) >> create mode 100644 Documentation/wmi/devices/lenovo-wmi-fan-method.rst >> create mode 100644 drivers/platform/x86/lenovo/wmi-fan-method.c >> >> >> base-commit: aca39607c1734ed976fdd65deb75b3555a5a0326
Hi Derek, On Sun, 2026-08-23 at 13:08 -0700, Derek J. Clark wrote: > On August 23, 2026 12:32:02 PM PDT, Rong Zhang <i@rong.moe> wrote: > > Hi Aditya, > > > > On Sat, 2026-08-22 at 03:17 +0530, Aditya Dash wrote: > > > Capability Data does not cover all fan controls on the Legion Go. Full > > > Speed uses a separate Other Mode feature, some firmware exposes an RPM > > > reading that Capability Data does not advertise, > > > > > > > "does not advertise" > > > > Really? Please dump capdata via debugfs and attach it. > > > > > and the custom fan table > > > uses a separate Fan Method WMI interface. > > > > > > > The hwmon part of lenovo-wmi-other was done by me. Please CC me in your > > next revision. > > > Hi Rong, > > I'd ack if you wanted to add yourself as a maintainer of the Lenovo drivers so you get picked up by the kernel scripts. Otherwise people won't know to Cc you. Thanks for that. I will do so the next time I post patch series for Lenovo drivers :-P Cheers, Rong > > > > Patches 1 and 2 add Full Speed and the RPM fallback to the existing HWMON > > > device. Patch 3 adds a Fan Method driver and attaches the ten curve points > > > to that device when both WMI interfaces belong to the same provider. Other > > > Mode continues to work without Fan Method. > > > > > > The open question is how the firmware control range should map to HWMON. > > > On the tested Legion Go 8APU1, values from 0 through 115 produce the > > > observable fan response and correspond to Lenovo's 0 through 115 percent > > > range. Lenovo software shows 0 through 100 percent to the user, and 115 > > > reaches the RPM observed in Full Speed mode. Firmware accepts values > > > through 255, but no RPM increase was observed above 115. > > > > This is what we've observed in Fan Test Data. We chose to enforce > > constraints according to it and relax it when users set an module > > parameter. > > > > > > > > This series keeps the native values unchanged and exposes the fixed > > > temperatures as read-only automatic points. Should the driver map the > > > effective 0 through 115 range to the standard HWMON 0 through 255 scale, > > > or keep the native firmware values unchanged? > > > > In your case, if there is no range data to query, I'd prefer enforcing 0- > > 100 by default and relaxing it when appropriate range data is provided by > > module parameters or DMI table. > > > > The range should always map to hwmon pwm 0-255. > > Concur on both counts. > > > As far as I can recall, Derek once said that he planed to introduce fan > > curve support for Legion Go, so I think he has some helpful ideas. > > I'll post a full review once I've had time to test and review the documentation again. > > Cheers, > Derek > > > Thanks, > > Rong > > > > > > > > Aditya Dash (3): > > > platform/x86: lenovo-wmi-other: Add Legion Go Full Speed control > > > platform/x86: lenovo-wmi-other: Add Legion Go fan RPM fallback > > > platform/x86: lenovo: Add Legion Go Fan Method curve driver > > > > > > .../wmi/devices/lenovo-wmi-fan-method.rst | 34 ++ > > > .../wmi/devices/lenovo-wmi-other.rst | 14 + > > > MAINTAINERS | 1 + > > > drivers/platform/x86/lenovo/Kconfig | 11 + > > > drivers/platform/x86/lenovo/Makefile | 1 + > > > drivers/platform/x86/lenovo/wmi-fan-method.c | 380 ++++++++++++++++++ > > > drivers/platform/x86/lenovo/wmi-other.c | 215 +++++++++- > > > 7 files changed, 649 insertions(+), 7 deletions(-) > > > create mode 100644 Documentation/wmi/devices/lenovo-wmi-fan-method.rst > > > create mode 100644 drivers/platform/x86/lenovo/wmi-fan-method.c > > > > > > > > > base-commit: aca39607c1734ed976fdd65deb75b3555a5a0326
On Fri, 21 Aug 2026 at 23:47, Aditya Dash <mradityadash@gmail.com> wrote: > > Capability Data does not cover all fan controls on the Legion Go. Full > Speed uses a separate Other Mode feature, some firmware exposes an RPM > reading that Capability Data does not advertise, and the custom fan table > uses a separate Fan Method WMI interface. > > Patches 1 and 2 add Full Speed and the RPM fallback to the existing HWMON > device. Patch 3 adds a Fan Method driver and attaches the ten curve points > to that device when both WMI interfaces belong to the same provider. Other > Mode continues to work without Fan Method. > > The open question is how the firmware control range should map to HWMON. > On the tested Legion Go 8APU1, values from 0 through 115 produce the > observable fan response and correspond to Lenovo's 0 through 115 percent > range. Lenovo software shows 0 through 100 percent to the user, and 115 > reaches the RPM observed in Full Speed mode. Firmware accepts values > through 255, but no RPM increase was observed above 115. > > This series keeps the native values unchanged and exposes the fixed > temperatures as read-only automatic points. Should the driver map the > effective 0 through 115 range to the standard HWMON 0 through 255 scale, > or keep the native firmware values unchanged? Hi Aditya, I actually wrote a similar driver for my downstream use that I do not have time to upstream over the next two to three months, so it's fine by me to pass the torch to you. I will leave some comments on your RFC because in some ways it is overly complicated, and we can streamline things so this merges quicker. You do do something I did not, which is implement RPM speed. The device I tested had the bug you noticed and fix on your second patch, so I skipped it for brevity. As far as the series goes, I'd rather you do a standard 100->255 map, and clip values on the way back from 115 to 100 and then scale to 255 (ie do not emit an error). Yes, technically the legion go can go up to 115, but this is undocumented behavior and will look weird on a UI (100% will be 115% in Windows), and because of the extra quirk handling that will have to be done to cover that. Since a full fan speed button exists, this is recoverable functionality anyway. IMO from V2 onwards, it's ok to drop the RFC marker, your current series does not propose something too extraordinary. Antheas > Aditya Dash (3): > platform/x86: lenovo-wmi-other: Add Legion Go Full Speed control > platform/x86: lenovo-wmi-other: Add Legion Go fan RPM fallback > platform/x86: lenovo: Add Legion Go Fan Method curve driver > > .../wmi/devices/lenovo-wmi-fan-method.rst | 34 ++ > .../wmi/devices/lenovo-wmi-other.rst | 14 + > MAINTAINERS | 1 + > drivers/platform/x86/lenovo/Kconfig | 11 + > drivers/platform/x86/lenovo/Makefile | 1 + > drivers/platform/x86/lenovo/wmi-fan-method.c | 380 ++++++++++++++++++ > drivers/platform/x86/lenovo/wmi-other.c | 215 +++++++++- > 7 files changed, 649 insertions(+), 7 deletions(-) > create mode 100644 Documentation/wmi/devices/lenovo-wmi-fan-method.rst > create mode 100644 drivers/platform/x86/lenovo/wmi-fan-method.c > > > base-commit: aca39607c1734ed976fdd65deb75b3555a5a0326 > -- > 2.55.0 >
© 2016 - 2026 Red Hat, Inc.