Linux Documentation
 help / color / mirror / Atom feed
From: Aditya <mradityadash@gmail.com>
To: Derek John Clark <derekjohn.clark@gmail.com>
Cc: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
	"Armin Wolf" <W_Armin@gmx.de>, "Hans de Goede" <hansg@kernel.org>,
	"Mark Pearson" <mpearson-lenovo@squebb.ca>,
	"Guenter Roeck" <linux@roeck-us.net>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Shuah Khan" <skhan@linuxfoundation.org>,
	linux-doc@vger.kernel.org, linux-hwmon@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	platform-driver-x86@vger.kernel.org
Subject: Re: [RFC PATCH 3/3] platform/x86: lenovo: Add Legion Go Fan Method curve driver
Date: Mon, 31 Aug 2026 12:55:03 +0530	[thread overview]
Message-ID: <53842308-7AA5-4885-94D9-527F6140CA6C@gmail.com> (raw)
In-Reply-To: <CAFqHKT=ozs1i1GwTwhh_A3DQauvn78cL8GHvJJGz+arRsZ=1Vg@mail.gmail.com>

Hi Derek,

Thanks for the review.

I have been investigating the BIOS of a sample of devices, which can be
broadly classified as follows:

- Do not have Fan Method
  - 8JCN - Legion Y530-15ICH
  - BHCN - Legion Y540, Y545, and Y7000 2019 families

- Have Fan Method
  - Do not have Method 5 / stub
    - K1CN - Legion 7 16IAX7, Legion Y9000K IAX7
    - JVCN - Yoga Slim 7 ProX 14ARH7

  - Have Method 5
    - Take direct input for Method 6
      - All Legion Go, Go 2, Go S (N3CN, RRCN, RQCN, QCCN, S0CN)

    - Take index based input for Method 6
      - Have Method 5 SensorTable equal to Method 5 FanTable
        - M3CN - Legion Slim 5 16APH8, 16ARH8
        - LYCN - LOQ 15APH8, 16APH8
        - R3CN - LOQ 15IRX10, 17IRX10; G5000 IRX10
        - R8CN - LOQ 15AHP10

      - Have Method 5 SensorTable be all zeros
        - N2CN - Legion Pro 7 16IRX9H; Legion Y9000P IRX9H
        - LPCN - Legion Pro 5 16ARX8, Pro 7 16ARX8H, R9000P ARX8
          variants
        - KWCN - Legion Pro 5 16IRX8, Pro 7 16IRX8/16IRX8H, Y9000P
          IRX8 variants
        - MHCN - Legion 9 16IRX8
        - RYCN - Legion 5 15AKP10; R7000 AKP10
        - Q8CN - LOQ 15IAX9E
        - Q7CN - Legion Pro 7 16IAX10H; Y9000P IAX10
        - RZCN - Legion 9 18IAX10; Legion NX IAX10
        - RGCN - Legion 5 15AHP10; R7000 AHP10
        - RECN - Legion Pro 5 16AFR10; R7000P/R9000P AFR10 variants

For the direct based families, there is no actual discriminator or
value that can tell that the devices take direct input. There are two
possible discriminators I have found so far:
  - SensorTable contains 10, 20, 30, ..., 100 exactly
  - Their Fan Table GUID read function is a stub
    - However the Legion Go 1 does not conform to this, therefore it
      has to become a quirk.

None of the direct based families expose any information on the range of
each point on the curve. 0-100 can be taken as the nominal range.

For the index based families, Legion drivers send the current power tier
(current_mode) as the first Method 6 byte. However, this value comes from
the Other Mode GUID.

All families can use FanTableSize and SensorTableSize for their respective
Method 5 arrays. FanTableSize can be used for the Method 6 array size.

Then, based on this power tier, the respective Fan Table GUID table is
accessed. FanTable_Len for that table determines the range of each point
for Method 6. Each index will be within 1..FanTable_Len.

None of the reviewed Method 6 implementations consume SensorTable values.

The driver should not read back Method 6. Consumers can use Method 5 if they
need to confirm the result.

The Other Mode GUID for these families did not seem to have a fan table
route through it. Only Full Speed and individual fan speed controls were
found here. The firmware based fan curve remains under Fan Method 5/6.

Regarding individual fan speed controls, they did not work on my Legion
Go 1 device. Submitting RPM to it does not change the RPM. The EC fields
which take this input are not exposed to any WMI interface as far as I
have seen on the Legion Go 1.

This also cannot replace firmware based fan curves as it will require a
userspace driver to continuously monitor temperature and set RPM.

Some open questions:

- How should the Other Mode dependency be resolved? Should it be a helper
  in Fan Method, or should Fan Method be incorporated directly?
- What should be the discriminator for direct based families?

Thanks,
Aditya

  reply	other threads:[~2026-08-31  7:54 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-21 21:47 [RFC PATCH 0/3] platform/x86: lenovo: Add Legion Go fan controls Aditya Dash
2026-08-21 21:47 ` [RFC PATCH 1/3] platform/x86: lenovo-wmi-other: Add Legion Go Full Speed control Aditya Dash
2026-08-22 18:55   ` Antheas Kapenekakis
2026-08-23 19:55   ` Rong Zhang
2026-08-24  7:46   ` Ilpo Järvinen
2026-08-21 21:47 ` [RFC PATCH 2/3] platform/x86: lenovo-wmi-other: Add Legion Go fan RPM fallback Aditya Dash
2026-08-22 18:50   ` Antheas Kapenekakis
2026-08-23 20:23   ` Rong Zhang
2026-08-24  7:49   ` Ilpo Järvinen
2026-08-21 21:47 ` [RFC PATCH 3/3] platform/x86: lenovo: Add Legion Go Fan Method curve driver Aditya Dash
2026-08-22 18:47   ` Antheas Kapenekakis
2026-08-23 21:09   ` Rong Zhang
2026-08-24  8:10   ` Ilpo Järvinen
2026-08-25 19:34   ` Derek John Clark
2026-08-31  7:25     ` Aditya [this message]
2026-08-22 18:33 ` [RFC PATCH 0/3] platform/x86: lenovo: Add Legion Go fan controls Antheas Kapenekakis
2026-08-23 19:32 ` Rong Zhang
2026-08-23 20:08   ` Derek J. Clark
2026-08-23 20:24     ` Rong Zhang

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=53842308-7AA5-4885-94D9-527F6140CA6C@gmail.com \
    --to=mradityadash@gmail.com \
    --cc=W_Armin@gmx.de \
    --cc=corbet@lwn.net \
    --cc=derekjohn.clark@gmail.com \
    --cc=hansg@kernel.org \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=mpearson-lenovo@squebb.ca \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=skhan@linuxfoundation.org \
    /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