我一直在尝试控制我的 Lenovo Yoga 910-13IKB 笔记本电脑(Windows 10)的风扇以避免热节流(我已经降低了 CPU 和 GPU 的电压)。为了实现这一点,我需要找到一种方法来修改控制笔记本电脑嵌入式控制器上风扇的特定寄存器。
使用RWEverything
我打开计算机上的所有 ACPI 表,提取 DSDT 表后,我发现除了 1 个似乎与风扇有关的寄存器,“CFAN”它有 1 位长,更改它没有任何效果。似乎默认关闭。
在此之后,我开始调查并进入我发现这个的 SSDT 之一:
Name(OSD1, Package(21)
{
0x04, "CPU Fan Duty Cycle", "RAW", 0x04, "CPU Fan #1 Speed", "RPM",
0x03, "Skin Temp 0", "RAW", 0x03, "Thermistor 1 ", "RAW", 0x03, "Thermistor 2 ",
"RAW", 0x03, "Thermistor 3 ", "RAW", 0x03, "Thermistor 4 ", "RAW"
})
Name(OSD2, Package(24)
{
0x04, "CPU Fan Duty Cycle", "RAW", 0x04, "CPU Fan #1 Speed", "RPM",
0x03, "Skin Temp 0", "RAW", 0x03, "Thermistor 1 ", "RAW", 0x03, "Thermistor 2 ",
"RAW", 0x03, "Thermistor 3 ", "RAW", 0x03, "Thermistor 4 ", "RAW",
0x03, "Thermistor 5 ", "RAW"
})
在我发现这个之后有几行:
Method(OSDD, 0, Serialized)
{
If(LEqual(\_SB.PCI0.LPCB.H_EC.ECAV, One))
{
If(LEqual(TSDB, One))
{
Name(OSD2, Package(8)
{
0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000,
0x80000000, 0x80000000
})
Store(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.PENV)), Index(OSD2, Zero))
Store(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.CFSP)), Index(OSD2, One))
Store(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TSR3)), Index(OSD2, 0x02))
Store(ShiftLeft(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TER1)), 0x02), Index(OSD2, 0x03))
Store(ShiftLeft(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TER2)), 0x02), Index(OSD2, 0x04))
Store(ShiftLeft(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TER3)), 0x02), Index(OSD2, 0x05))
Store(ShiftLeft(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TER4)), 0x02), Index(OSD2, 0x06))
Store(ShiftLeft(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TER5)), 0x02), Index(OSD2, 0x07))
Return(OSD2)
}
Name(OSD1, Package(7)
{
0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000,
0x80000000
})
Store(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.PENV)), Index(OSD1, Zero))
Store(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.CFSP)), Index(OSD1, One))
Store(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TSR3)), Index(OSD1, 0x02))
Store(ShiftLeft(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TER1)), 0x02), Index(OSD1, 0x03))
Store(ShiftLeft(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TER2)), 0x02), Index(OSD1, 0x04))
Store(ShiftLeft(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TER3)), 0x02), Index(OSD1, 0x05))
Store(ShiftLeft(\_SB.PCI0.LPCB.H_EC.ECRD(RefOf(\_SB.PCI0.LPCB.H_EC.TER4)), 0x02), Index(OSD1, 0x06))
Return(OSD1)
}
Return(Package(0){})
}
如您所见,似乎风扇占空比为寄存器\_SB.PCI0.LPCB.H_EC.PENV
,风扇速度为\_SB.PCI0.LPCB.H_EC.CFSP
。但是,我在每个表中查找“PENV”和“CFSP”这两个词,但找不到数字地址。(任何地方都没有定义)
因此,使用RWEverything
我能够识别与风扇同步更改的几个寄存器。
(试图发布收银机的图片,但没有足够的声誉)
我尝试修改所有这些寄存器,但没有成功。
也许还有另一种修改\_SB.PCI0.LPCB.H_EC.PENV
和\_SB.PCI0.LPCB.H_EC.CFSP
通过 ACPI 的方法,或者 Microsoft ACPI-Compliant Embedded Controller 的第三方驱动程序?
随时提出任何问题,任何帮助将不胜感激。