€•çnŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ!/translations/zh_CN/hwmon/yogafan”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/zh_TW/hwmon/yogafan”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/it_IT/hwmon/yogafan”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/ja_JP/hwmon/yogafan”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/ko_KR/hwmon/yogafan”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/pt_BR/hwmon/yogafan”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/sp_SP/hwmon/yogafan”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ%SPDX-License-Identifier: GPL-2.0-only”h]”hŒ%SPDX-License-Identifier: GPL-2.0-only”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ;/var/lib/git/docbuild/linux/Documentation/hwmon/yogafan.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒKernel driver yogafan”h]”hŒKernel driver yogafan”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒSupported chips:”h]”hŒSupported chips:”…””}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhŒ block_quote”“”)”}”(hŒ‹* Lenovo Yoga, Legion, IdeaPad, Slim, Flex, and LOQ Embedded Controllers * Prefix: 'yogafan' * Addresses: ACPI handle (See Database Below) ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒFLenovo Yoga, Legion, IdeaPad, Slim, Flex, and LOQ Embedded Controllers”h]”hÞ)”}”(hhüh]”hŒFLenovo Yoga, Legion, IdeaPad, Slim, Flex, and LOQ Embedded Controllers”…””}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhúubah}”(h]”h ]”h"]”h$]”h&]”uh1høhhõubhù)”}”(hŒPrefix: 'yogafan'”h]”hÞ)”}”(hjh]”hŒPrefix: ‘yogafan’”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1høhhõubhù)”}”(hŒ,Addresses: ACPI handle (See Database Below) ”h]”hÞ)”}”(hŒ+Addresses: ACPI handle (See Database Below)”h]”hŒ+Addresses: ACPI handle (See Database Below)”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhhõubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1hóh³hÇh´K hhïubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÇh´K hhÊh²hubhÞ)”}”(hŒ,Author: Sergio Melas ”h]”(hŒAuthor: Sergio Melas <”…””}”(hjNh²hh³Nh´NubhŒ reference”“”)”}”(hŒsergiomelas@gmail.com”h]”hŒsergiomelas@gmail.com”…””}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:sergiomelas@gmail.com”uh1jVhjNubhŒ>”…””}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Description”h]”hŒ Description”…””}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjrh²hh³hÇh´KubhÞ)”}”(hX This driver provides fan speed monitoring for modern Lenovo consumer laptops. Most Lenovo laptops do not provide fan tachometer data through standard ISA/LPC hardware monitoring chips. Instead, the data is stored in the Embedded Controller (EC) and exposed via ACPI.”h]”hX This driver provides fan speed monitoring for modern Lenovo consumer laptops. Most Lenovo laptops do not provide fan tachometer data through standard ISA/LPC hardware monitoring chips. Instead, the data is stored in the Embedded Controller (EC) and exposed via ACPI.”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjrh²hubhÞ)”}”(hŒŠThe driver implements a **Rate-Limited Lag (RLLag)** filter to handle the low-resolution and jittery sampling found in Lenovo EC firmware.”h]”(hŒThe driver implements a ”…””}”(hj‘h²hh³Nh´NubhŒstrong”“”)”}”(hŒ**Rate-Limited Lag (RLLag)**”h]”hŒRate-Limited Lag (RLLag)”…””}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hj‘ubhŒV filter to handle the low-resolution and jittery sampling found in Lenovo EC firmware.”…””}”(hj‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjrh²hubeh}”(h]”Œ description”ah ]”h"]”Œ description”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒ,Hardware Identification and Multiplier Logic”h]”hŒ,Hardware Identification and Multiplier Logic”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj»h²hh³hÇh´KubhÞ)”}”(hŒÉThe driver supports two distinct EC architectures. Differentiation is handled deterministically via a DMI Product Family quirk table during the probe phase, eliminating the need for runtime heuristics.”h]”hŒÉThe driver supports two distinct EC architectures. Differentiation is handled deterministically via a DMI Product Family quirk table during the probe phase, eliminating the need for runtime heuristics.”…””}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj»h²hubhŒenumerated_list”“”)”}”(hhh]”(hù)”}”(hX*8-bit EC Architecture (Multiplier: 100) - **Families:** Yoga, IdeaPad, Slim, Flex. - **Technical Detail:** These models allocate a single 8-bit register for tachometer data. Since 8-bit fields are limited to a value of 255, the BIOS stores fan speed in units of 100 RPM (e.g., 42 = 4200 RPM). ”h]”(hÞ)”}”(hŒ'8-bit EC Architecture (Multiplier: 100)”h]”hŒ'8-bit EC Architecture (Multiplier: 100)”…””}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hjßubhô)”}”(hhh]”(hù)”}”(hŒ(**Families:** Yoga, IdeaPad, Slim, Flex.”h]”hÞ)”}”(hjöh]”(jš)”}”(hŒ **Families:**”h]”hŒ Families:”…””}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hjøubhŒ Yoga, IdeaPad, Slim, Flex.”…””}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K#hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjñubhù)”}”(hŒÐ**Technical Detail:** These models allocate a single 8-bit register for tachometer data. Since 8-bit fields are limited to a value of 255, the BIOS stores fan speed in units of 100 RPM (e.g., 42 = 4200 RPM). ”h]”hÞ)”}”(hŒÏ**Technical Detail:** These models allocate a single 8-bit register for tachometer data. Since 8-bit fields are limited to a value of 255, the BIOS stores fan speed in units of 100 RPM (e.g., 42 = 4200 RPM).”h]”(jš)”}”(hŒ**Technical Detail:**”h]”hŒTechnical Detail:”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hjubhŒº These models allocate a single 8-bit register for tachometer data. Since 8-bit fields are limited to a value of 255, the BIOS stores fan speed in units of 100 RPM (e.g., 42 = 4200 RPM).”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K$hjubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjñubeh}”(h]”h ]”h"]”h$]”h&]”jFŒ-”uh1hóh³hÇh´K#hjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1høhjÜh²hh³Nh´Nubhù)”}”(hŒý16-bit EC Architecture (Multiplier: 1) - **Families:** Legion, LOQ. - **Technical Detail:** High-performance gaming models require greater precision for fans exceeding 6000 RPM. These use a 16-bit word (2 bytes) storing the raw RPM value directly. ”h]”(hÞ)”}”(hŒ&16-bit EC Architecture (Multiplier: 1)”h]”hŒ&16-bit EC Architecture (Multiplier: 1)”…””}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K(hjLubhô)”}”(hhh]”(hù)”}”(hŒ**Families:** Legion, LOQ.”h]”hÞ)”}”(hjch]”(jš)”}”(hŒ **Families:**”h]”hŒ Families:”…””}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hjeubhŒ Legion, LOQ.”…””}”(hjeh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj^ubhù)”}”(hŒ²**Technical Detail:** High-performance gaming models require greater precision for fans exceeding 6000 RPM. These use a 16-bit word (2 bytes) storing the raw RPM value directly. ”h]”hÞ)”}”(hŒ±**Technical Detail:** High-performance gaming models require greater precision for fans exceeding 6000 RPM. These use a 16-bit word (2 bytes) storing the raw RPM value directly.”h]”(jš)”}”(hŒ**Technical Detail:**”h]”hŒTechnical Detail:”…””}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hjŠubhŒœ High-performance gaming models require greater precision for fans exceeding 6000 RPM. These use a 16-bit word (2 bytes) storing the raw RPM value directly.”…””}”(hjŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj^ubeh}”(h]”h ]”h"]”h$]”h&]”jFjEuh1hóh³hÇh´K*hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1høhjÜh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jÚhj»h²hh³hÇh´K!ubeh}”(h]”Œ,hardware-identification-and-multiplier-logic”ah ]”h"]”Œ,hardware identification and multiplier logic”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒFilter Details”h]”hŒFilter Details”…””}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjËh²hh³hÇh´K0ubhŒdefinition_list”“”)”}”(hhh]”hŒdefinition_list_item”“”)”}”(hXÐThe RLLag filter is a passive discrete-time first-order lag model that ensures: - **Smoothing:** Low-resolution step increments are smoothed into 1-RPM increments. - **Slew-Rate Limiting:** Prevents unrealistic readings by capping the change to 1500 RPM/s, matching physical fan inertia. - **Polling Independence:** The filter math scales based on the time delta between userspace reads, ensuring a consistent physical curve regardless of polling frequency. ”h]”(hŒterm”“”)”}”(hŒOThe RLLag filter is a passive discrete-time first-order lag model that ensures:”h]”hŒOThe RLLag filter is a passive discrete-time first-order lag model that ensures:”…””}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jçh³hÇh´K8hjãubhŒ definition”“”)”}”(hhh]”hô)”}”(hhh]”(hù)”}”(hŒQ**Smoothing:** Low-resolution step increments are smoothed into 1-RPM increments.”h]”hÞ)”}”(hjh]”(jš)”}”(hŒ**Smoothing:**”h]”hŒ Smoothing:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hjubhŒC Low-resolution step increments are smoothed into 1-RPM increments.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjüubhù)”}”(hŒy**Slew-Rate Limiting:** Prevents unrealistic readings by capping the change to 1500 RPM/s, matching physical fan inertia.”h]”hÞ)”}”(hŒy**Slew-Rate Limiting:** Prevents unrealistic readings by capping the change to 1500 RPM/s, matching physical fan inertia.”h]”(jš)”}”(hŒ**Slew-Rate Limiting:**”h]”hŒSlew-Rate Limiting:”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hj(ubhŒb Prevents unrealistic readings by capping the change to 1500 RPM/s, matching physical fan inertia.”…””}”(hj(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K4hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjüubhù)”}”(hŒ¨**Polling Independence:** The filter math scales based on the time delta between userspace reads, ensuring a consistent physical curve regardless of polling frequency. ”h]”hÞ)”}”(hŒ§**Polling Independence:** The filter math scales based on the time delta between userspace reads, ensuring a consistent physical curve regardless of polling frequency.”h]”(jš)”}”(hŒ**Polling Independence:**”h]”hŒPolling Independence:”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hjNubhŒŽ The filter math scales based on the time delta between userspace reads, ensuring a consistent physical curve regardless of polling frequency.”…””}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K6hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjüubeh}”(h]”h ]”h"]”h$]”h&]”jFjEuh1hóh³hÇh´K3hjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jáh³hÇh´K8hjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÜhjËh²hh³Nh´Nubeh}”(h]”Œfilter-details”ah ]”h"]”Œfilter details”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K0ubhÉ)”}”(hhh]”(hÎ)”}”(hŒSuspend and Resume”h]”hŒSuspend and Resume”…””}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K;ubhÞ)”}”(hX`The driver utilizes the boottime clock (ktime_get_boottime()) to calculate the sampling delta. This ensures that time spent in system suspend is accounted for. If the delta exceeds 5 seconds (e.g., after waking the laptop), the filter automatically resets to the current hardware value to prevent reporting "ghost" RPM data from before the sleep state.”h]”hXdThe driver utilizes the boottime clock (ktime_get_boottime()) to calculate the sampling delta. This ensures that time spent in system suspend is accounted for. If the delta exceeds 5 seconds (e.g., after waking the laptop), the filter automatically resets to the current hardware value to prevent reporting “ghost†RPM data from before the sleep state.”…””}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K=hjh²hubeh}”(h]”Œsuspend-and-resume”ah ]”h"]”Œsuspend and resume”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K;ubhÉ)”}”(hhh]”(hÎ)”}”(hŒUsage”h]”hŒUsage”…””}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj·h²hh³hÇh´KDubhÞ)”}”(hŒ3The driver exposes standard hwmon sysfs attributes:”h]”hŒ3The driver exposes standard hwmon sysfs attributes:”…””}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KFhj·h²hubhŒtable”“”)”}”(hhh]”hŒtgroup”“”)”}”(hhh]”(hŒcolspec”“”)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jàhjÝubjá)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jàhjÝubhŒtbody”“”)”}”(hhh]”(hŒrow”“”)”}”(hhh]”(hŒentry”“”)”}”(hhh]”hÞ)”}”(hŒ Attribute”h]”hŒ Attribute”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KIhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýubj)”}”(hhh]”hÞ)”}”(hŒ Description”h]”hŒ Description”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KIhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jûhjøubjü)”}”(hhh]”(j)”}”(hhh]”hÞ)”}”(hŒ fanX_input”h]”hŒ fanX_input”…””}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KJhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubj)”}”(hhh]”hÞ)”}”(hŒFiltered fan speed in RPM.”h]”hŒFiltered fan speed in RPM.”…””}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KJhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jûhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jöhjÝubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jÛhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖhj·h²hh³hÇh´NubhÞ)”}”(hŒ‡Note: If the hardware reports 0 RPM, the filter is bypassed and 0 is reported immediately to ensure the user knows the fan has stopped.”h]”hŒ‡Note: If the hardware reports 0 RPM, the filter is bypassed and 0 is reported immediately to ensure the user knows the fan has stopped.”…””}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KNhj·h²hubeh}”(h]”Œusage”ah ]”h"]”Œusage”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KDubeh}”(h]”Œkernel-driver-yogafan”ah ]”h"]”Œkernel driver yogafan”ah$]”h&]”uh1hÈhhh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒ7LENOVO FAN CONTROLLER: MASTER REFERENCE DATABASE (2026)”h]”hŒ7LENOVO FAN CONTROLLER: MASTER REFERENCE DATABASE (2026)”…””}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjžh²hh³hÇh´KTubhŒ literal_block”“”)”}”(hXêMODEL (DMI PN) | FAMILY / SERIES | EC OFFSET | FULL ACPI OBJECT PATH | WIDTH | MULTiplier ---------------------------------------------------------------------------------------------------- 82N7 | Yoga 14cACN | 0x06 | \_SB.PCI0.LPC0.EC0.FANS | 8-bit | 100 80V2 / 81C3 | Yoga 710/720 | 0x06 | \_SB.PCI0.LPC0.EC0.FAN0 | 8-bit | 100 83E2 / 83DN | Yoga Pro 7/9 | 0xFE | \_SB.PCI0.LPC0.EC0.FANS | 8-bit | 100 82A2 / 82A3 | Yoga Slim 7 | 0x06 | \_SB.PCI0.LPC0.EC0.FANS | 8-bit | 100 81YM / 82FG | IdeaPad 5 | 0x06 | \_SB.PCI0.LPC0.EC0.FAN0 | 8-bit | 100 82JW / 82JU | Legion 5 (AMD) | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FANS (Fan1) | 16-bit | 1 82JW / 82JU | Legion 5 (AMD) | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FA2S (Fan2) | 16-bit | 1 82WQ | Legion 7i (Int) | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FANS (Fan1) | 16-bit | 1 82WQ | Legion 7i (Int) | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FA2S (Fan2) | 16-bit | 1 82XV / 83DV | LOQ 15/16 | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FANS /FA2S | 16-bit | 1 83AK | ThinkBook G6 | 0x06 | \_SB.PCI0.LPC0.EC0.FAN0 | 8-bit | 100 81X1 | Flex 5 | 0x06 | \_SB.PCI0.LPC0.EC0.FAN0 | 8-bit | 100 *Legacy* | Pre-2020 Models | 0x06 | \_SB.PCI0.LPC.EC.FAN0 | 8-bit | 100 ----------------------------------------------------------------------------------------------------”h]”hXêMODEL (DMI PN) | FAMILY / SERIES | EC OFFSET | FULL ACPI OBJECT PATH | WIDTH | MULTiplier ---------------------------------------------------------------------------------------------------- 82N7 | Yoga 14cACN | 0x06 | \_SB.PCI0.LPC0.EC0.FANS | 8-bit | 100 80V2 / 81C3 | Yoga 710/720 | 0x06 | \_SB.PCI0.LPC0.EC0.FAN0 | 8-bit | 100 83E2 / 83DN | Yoga Pro 7/9 | 0xFE | \_SB.PCI0.LPC0.EC0.FANS | 8-bit | 100 82A2 / 82A3 | Yoga Slim 7 | 0x06 | \_SB.PCI0.LPC0.EC0.FANS | 8-bit | 100 81YM / 82FG | IdeaPad 5 | 0x06 | \_SB.PCI0.LPC0.EC0.FAN0 | 8-bit | 100 82JW / 82JU | Legion 5 (AMD) | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FANS (Fan1) | 16-bit | 1 82JW / 82JU | Legion 5 (AMD) | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FA2S (Fan2) | 16-bit | 1 82WQ | Legion 7i (Int) | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FANS (Fan1) | 16-bit | 1 82WQ | Legion 7i (Int) | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FA2S (Fan2) | 16-bit | 1 82XV / 83DV | LOQ 15/16 | 0xFE/0xFF | \_SB.PCI0.LPC0.EC0.FANS /FA2S | 16-bit | 1 83AK | ThinkBook G6 | 0x06 | \_SB.PCI0.LPC0.EC0.FAN0 | 8-bit | 100 81X1 | Flex 5 | 0x06 | \_SB.PCI0.LPC0.EC0.FAN0 | 8-bit | 100 *Legacy* | Pre-2020 Models | 0x06 | \_SB.PCI0.LPC.EC.FAN0 | 8-bit | 100 ----------------------------------------------------------------------------------------------------”…””}”hj±sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¯h³hÇh´KXhjžh²hubhÞ)”}”(hŒMETHODOLOGY & IDENTIFICATION:”h]”hŒMETHODOLOGY & IDENTIFICATION:”…””}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kihjžh²hubjÛ)”}”(hhh]”(hù)”}”(hŒÈDSDT ANALYSIS (THE PATH): BIOS ACPI tables were analyzed using 'iasl' and cross-referenced with public dumps. Internal labels (FANS, FAN0, FA2S) are mapped to EmbeddedControl OperationRegion offsets. ”h]”hÞ)”}”(hŒÇDSDT ANALYSIS (THE PATH): BIOS ACPI tables were analyzed using 'iasl' and cross-referenced with public dumps. Internal labels (FANS, FAN0, FA2S) are mapped to EmbeddedControl OperationRegion offsets.”h]”hŒËDSDT ANALYSIS (THE PATH): BIOS ACPI tables were analyzed using ‘iasl’ and cross-referenced with public dumps. Internal labels (FANS, FAN0, FA2S) are mapped to EmbeddedControl OperationRegion offsets.”…””}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KkhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjÍh²hh³hÇh´Nubhù)”}”(hŒEC MEMORY MAPPING (THE OFFSET): Validated by matching NBFC (NoteBook FanControl) XML logic with DSDT Field definitions found in BIOS firmware. ”h]”hÞ)”}”(hŒŽEC MEMORY MAPPING (THE OFFSET): Validated by matching NBFC (NoteBook FanControl) XML logic with DSDT Field definitions found in BIOS firmware.”h]”hŒŽEC MEMORY MAPPING (THE OFFSET): Validated by matching NBFC (NoteBook FanControl) XML logic with DSDT Field definitions found in BIOS firmware.”…””}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kphjèubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjÍh²hh³hÇh´Nubhù)”}”(hŒ½DATA-WIDTH ANALYSIS (THE MULTIPLIER): - 8-bit (Multiplier 100): Standard for Yoga/IdeaPad. Raw values (0-255). - 16-bit (Multiplier 1): Standard for Legion/LOQ. Two registers (0xFE/0xFF). ”h]”hÞ)”}”(hŒ»DATA-WIDTH ANALYSIS (THE MULTIPLIER): - 8-bit (Multiplier 100): Standard for Yoga/IdeaPad. Raw values (0-255). - 16-bit (Multiplier 1): Standard for Legion/LOQ. Two registers (0xFE/0xFF).”h]”hŒ»DATA-WIDTH ANALYSIS (THE MULTIPLIER): - 8-bit (Multiplier 100): Standard for Yoga/IdeaPad. Raw values (0-255). - 16-bit (Multiplier 1): Standard for Legion/LOQ. Two registers (0xFE/0xFF).”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kthjubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjÍh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j¾j¿jÀhjÁjÂuh1jÚhjžh²hh³hÇh´KkubhÉ)”}”(hhh]”(hÎ)”}”(hŒ References”h]”hŒ References”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´KzubjÛ)”}”(hhh]”(hù)”}”(hŒÌ**ACPI Specification (Field Objects):** Documentation on how 8-bit vs 16-bit fields are accessed in OperationRegions. https://uefi.org/specs/ACPI/6.5/05_ACPI_Software_Programming_Model.html#field-objects ”h]”hÞ)”}”(hŒË**ACPI Specification (Field Objects):** Documentation on how 8-bit vs 16-bit fields are accessed in OperationRegions. https://uefi.org/specs/ACPI/6.5/05_ACPI_Software_Programming_Model.html#field-objects”h]”(jš)”}”(hŒ'**ACPI Specification (Field Objects):**”h]”hŒ#ACPI Specification (Field Objects):”…””}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hj6ubhŒO Documentation on how 8-bit vs 16-bit fields are accessed in OperationRegions. ”…””}”(hj6h²hh³Nh´NubjW)”}”(hŒUhttps://uefi.org/specs/ACPI/6.5/05_ACPI_Software_Programming_Model.html#field-objects”h]”hŒUhttps://uefi.org/specs/ACPI/6.5/05_ACPI_Software_Programming_Model.html#field-objects”…””}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jNuh1jVhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K|hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj/h²hh³hÇh´Nubhù)”}”(hŒ«**NBFC Projects:** Community-driven reverse engineering of Lenovo Legion/LOQ EC memory maps (16-bit raw registers). https://github.com/hirschmann/nbfc/tree/master/Configs ”h]”hÞ)”}”(hŒª**NBFC Projects:** Community-driven reverse engineering of Lenovo Legion/LOQ EC memory maps (16-bit raw registers). https://github.com/hirschmann/nbfc/tree/master/Configs”h]”(jš)”}”(hŒ**NBFC Projects:**”h]”hŒNBFC Projects:”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hjkubhŒb Community-driven reverse engineering of Lenovo Legion/LOQ EC memory maps (16-bit raw registers). ”…””}”(hjkh²hh³Nh´NubjW)”}”(hŒ6https://github.com/hirschmann/nbfc/tree/master/Configs”h]”hŒ6https://github.com/hirschmann/nbfc/tree/master/Configs”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jƒuh1jVhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K€hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj/h²hh³hÇh´Nubhù)”}”(hŒµ**Linux Kernel Timekeeping API:** Documentation for ktime_get_boottime() and handling deltas across suspend states. https://www.kernel.org/doc/html/latest/core-api/timekeeping.html ”h]”hÞ)”}”(hŒ´**Linux Kernel Timekeeping API:** Documentation for ktime_get_boottime() and handling deltas across suspend states. https://www.kernel.org/doc/html/latest/core-api/timekeeping.html”h]”(jš)”}”(hŒ!**Linux Kernel Timekeeping API:**”h]”hŒLinux Kernel Timekeeping API:”…””}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hj ubhŒS Documentation for ktime_get_boottime() and handling deltas across suspend states. ”…””}”(hj h²hh³Nh´NubjW)”}”(hŒ@https://www.kernel.org/doc/html/latest/core-api/timekeeping.html”h]”hŒ@https://www.kernel.org/doc/html/latest/core-api/timekeeping.html”…””}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j¸uh1jVhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K„hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj/h²hh³hÇh´Nubhù)”}”(hŒ¿**Lenovo IdeaPad Laptop Driver:** Reference for DMI-based hardware feature gating in Lenovo laptops. https://github.com/torvalds/linux/blob/master/drivers/platform/x86/lenovo/ideapad-laptop.c”h]”hÞ)”}”(hŒ¿**Lenovo IdeaPad Laptop Driver:** Reference for DMI-based hardware feature gating in Lenovo laptops. https://github.com/torvalds/linux/blob/master/drivers/platform/x86/lenovo/ideapad-laptop.c”h]”(jš)”}”(hŒ!**Lenovo IdeaPad Laptop Driver:**”h]”hŒLenovo IdeaPad Laptop Driver:”…””}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hjÕubhŒD Reference for DMI-based hardware feature gating in Lenovo laptops. ”…””}”(hjÕh²hh³Nh´NubjW)”}”(hŒZhttps://github.com/torvalds/linux/blob/master/drivers/platform/x86/lenovo/ideapad-laptop.c”h]”hŒZhttps://github.com/torvalds/linux/blob/master/drivers/platform/x86/lenovo/ideapad-laptop.c”…””}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jíuh1jVhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KˆhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj/h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j¾j¿jÀhjÁjÂuh1jÚhjh²hh³hÇh´K|ubeh}”(h]”Œ references”ah ]”h"]”Œ references”ah$]”h&]”uh1hÈhjžh²hh³hÇh´Kzubeh}”(h]”Œ4lenovo-fan-controller-master-reference-database-2026”ah ]”h"]”Œ7lenovo fan controller: master reference database (2026)”ah$]”h&]”uh1hÈhhh²hh³hÇh´KTubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”jŒfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j>Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j›j˜j¸jµjÈjÅjjŠj´j±j“jjjjjuŒ nametypes”}”(j›‰j¸‰jȉj‰j´‰j“‰j‰j‰uh}”(j˜hÊjµjrjÅj»jŠjËj±jjj·jjžjjuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.