Управление вентилятором ноутбука через встроенный контроллер или ACPI

Я пытался управлять вентилятором моего ноутбука Lenovo Yoga 910-13IKB (Windows 10), чтобы избежать перегрева (я уже понизил напряжение процессора и графического процессора). Для этого мне нужно найти способ изменить определенные регистры, которые управляют вентилятором на встроенном контроллере моего ноутбука.

С помощью я открыл все таблицы ACPI на своем компьютере, после извлечения таблицы DSDT я не нашел ничего, кроме 1 регистра, который, казалось, был связан с вентилятором, «CFAN» имеет длину 1 бит, и его изменение не имеет никакого эффекта. Вроде выключено по умолчанию.

DSDT.txt

После этого я начал расследование и попал в один из 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){})
}

SSDT.txt

Как видите, кажется, что рабочий цикл вентилятора зарегистрирован, а скорость вентилятора равна . Однако я искал в каждой таблице слова «PENV» и «CFSP», но не смог найти числовой адрес. (нигде нет определения)

Итак, используя RWEverythingМне удалось идентифицировать пару регистров, которые менялись синхронно с вентилятором.

(Пытался опубликовать изображение регистров, но репутации не хватило)

Я безуспешно пытался изменить все эти регистры.

Может быть, есть другой способ изменить \_SB.PCI0.LPCB.H_EC.PENVа также \_SB.PCI0.LPCB.H_EC.CFSPчерез ACPI или сторонний драйвер для Microsoft ACPI-совместимого встроенного контроллера?

Не стесняйтесь задавать любые вопросы, и любая помощь будет принята с благодарностью.

0 ответов

Другие вопросы по тегам