Re: [PATCH] hwmon: (yogafan) various markup improvements

From: Sergio Melas

Date: Tue Apr 07 2026 - 12:14:54 EST


Hi Guenter,

My apologies for the confusion—I am still learning the standard
workflow. I understand now why applying Randy’s patch immediately is
the correct move.

When I mentioned the "next version," I was thinking about a major
expansion I am currently preparing (v1, second round). It expands
support to nearly all Lenovo and Xiaoxin models. Because the database
has grown so much, I’ve had to significantly change the table format
in the .rst file to keep it readable. So i was referring to this new
table (see below). Fully open to modify the format if you thin is not
ok.

As an automation engineer , this process is quite new to me, so I
appreciate your patience as I learn the proper terms and procedures. I
will ensure my next submission is rebased on your current tree with
Randy's improvements.

Best regards, Sergio

::
================================================
LENOVO FAN CONTROLLER Hardware Abstraction Layer
================================================

+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| MODEL | FAMILY / SERIES | OFFSET | FULL ACPI OBJECT PATH
| WIDTH | NMAX | RMAX | MULT |
+=============+===================+=========+================================+========+=======+=======+======+
| 82N7 | Yoga 14cACN | 0x06 | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 0 | 5500 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 83E2 | Yoga Pro 9i | 0xFE/FF | _SB.PCI0.LPC0.EC0.FANS
(Fan1) | 16-bit | 0 | 8000 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 83E2 | Yoga Pro 9i | 0xFE/FF | _SB.PCI0.LPC0.EC0.FA2S
(Fan2) | 16-bit | 0 | 8000 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 83CV | Yoga Pro 9 (Aura) | 0xFE | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 0 | 6000 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 83DN | Yoga Pro 7 | 0xFE | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 0 | 6000 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 82A2 / 82A3 | Yoga Slim 7 | 0x06 | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 0 | 5500 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 83JC / 83DX | Xiaoxin Pro 14/16 | 0xFE | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 80 | 5000 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 83FD / 83DE | Xiaoxin Pro | 0xFE/FF |
_SB.PCI0.LPC0.EC0.FAN0/.FANS | 8-bit | 0 | 5000 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 81YM / 82FG | IdeaPad 5 | 0x06 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 0 | 4500 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 83AK | ThinkBook G7 | 0x06 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 0 | 5400 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 81X1 | Flex 5 | 0x06 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 0 | 4500 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| Legion 9 | Legion 9i / Extr | 0xFE/FF | _SB.PCI0.LPC0.EC0.FANS
(Fan1) | 16-bit | 0 | 8000 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| Legion 9 | Legion 9i / Extr | 0xFE/FF | _SB.PCI0.LPC0.EC0.FA2S
(Fan2) | 16-bit | 0 | 8000 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| Legion 9 | Legion 9i / Extr | 0xFE/FF | _SB.PCI0.LPC0.EC0.FA3S
(Fan3) | 16-bit | 0 | 8000 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 82WQ | Legion 7i (Int) | 0xFE/FF | _SB.PCI0.LPC0.EC0.FANS
(Fan1) | 16-bit | 0 | 8000 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 82WQ | Legion 7i (Int) | 0xFE/FF | _SB.PCI0.LPC0.EC0.FA2S
(Fan2) | 16-bit | 0 | 8000 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 82JW / 82JU | Legion 5 (AMD) | 0xFE/FF | _SB.PCI0.LPC0.EC0.FANS
(Fan1) | 16-bit | 0 | 6500 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 82JW / 82JU | Legion 5 (AMD) | 0xFE/FF | _SB.PCI0.LPC0.EC0.FA2S
(Fan2) | 16-bit | 0 | 6500 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| GeekPro | GeekPro G5000/6k | 0xFE/FF | _SB.PCI0.LPC0.EC0.FANS
(Fan1) | 16-bit | 0 | 6500 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 82XV / 83DV | LOQ 15/16 | 0xFE/FF | _SB.PCI0.LPC0.EC0.FANS
(Fan1) | 16-bit | 0 | 6500 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 82XV / 83DV | LOQ 15/16 | 0xFE/FF | _SB.PCI0.LPC0.EC0.FA2S
(Fan2) | 16-bit | 0 | 6500 | 1 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 80V2 / 81C3 | Yoga 710/720 | 0x06 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 59 | 4500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 80S7 | Yoga 510 | 0x06 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 41 | 4500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 80JH | Yoga 3 14 | 0x06 |
_SB.PCI0.LPC0.EC0.FAN0/.FANS | 8-bit | 80 | 5000 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 20344 | Yoga 2 13 | 0xAB | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 8 | 4200 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 2191 / 20191| Yoga 13 | 0xF2/F3 | _SB.PCI0.LPC0.EC0.FAN1/2
| 8-bit | 0 | 5000 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| Legacy | Yoga 11s | 0x56 |
_SB.PCI0.LPC0.EC0.FAN0/.FANS | 8-bit | 80 | 4500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 20GJ / 20GK | ThinkPad 13 | 0x85 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 7 | 5500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 1143 | ThinkPad E520 | 0x95 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 0 | 4200 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 3698 | ThinkPad Helix | 0x2F | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 7 | 4500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 20M7 / 20M8 | ThinkPad L380 | 0x95 | _SB.PCI0.LPC0.EC0.FAN1
| 8-bit | 0 | 4600 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 20NR / 20NS | ThinkPad L390 | 0x95 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 0 | 5500 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 2464 / 2468 | ThinkPad L530 | 0x95 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 0 | 4400 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 2356 | ThinkPad T430s | 0x2F | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 7 | 5000 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 20AQ / 20AR | ThinkPad T440s | 0x4E | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 7 | 5200 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 20BE / 20BF | ThinkPad T540p | 0x2F | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 7 | 5500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 3051 | ThinkPad x121e | 0x2F | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 7 | 4500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 4290 | ThinkPad x220i | 0x2F | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 7 | 5000 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 2324 / 2325 | ThinkPad x230 | 0x2F | _SB.PCI0.LPC0.EC0.FANS
| 8-bit | 7 | 5000 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 81AX | V330-15IKB | 0x95 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 0 | 5100 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| Legacy | IdeaPad Y580 | 0x06 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 35 | 4800 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| Legacy | IdeaPad V580 | 0x95 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 0 | 5000 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 80SR / 80SX | IdeaPad 500S-13 | 0x06 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 44 | 5500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 80S1 | IdeaPad 500S-14 | 0x95 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 116 | 5000 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 80TK | IdeaPad 510S | 0x06 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 41 | 5100 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 80S9 | IdeaPad 710S | 0x95/98 | _SB.PCI0.LPC0.EC0.FAN1/2
| 8-bit | 0 | 5200 | 100 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 80KU | U31-70 | 0x06 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 44 | 5500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| 80S1 | U41-70 | 0x95 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 116 | 5000 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| Legacy | U160 | 0x95 | _SB.PCI0.LPC0.EC0.FAN0
| 8-bit | 64 | 4500 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+
| Legacy | U330p/U430p | 0x92 | _SB.PCI0.LPC0.EC0.FAN0
| 16-bit | 768 | 5000 | 0 |
+-------------+-------------------+---------+--------------------------------+--------+-------+-------+------+

Note for the raw_RPM we have 2 cases:

* Discrete Level Estimation
**Nmax > 0 then raw_RPM = (Rmax * IN) / Nmax**

* Continuous Unit Mapping
**Nmax = 0 then raw_RPM = IN * Multiplier**