Contribute
Register

New Fan Control DSDT - for silent fan at higher temps!

RehabMan

Moderator
Joined
May 3, 2012
Messages
192,088
Motherboard
Intel DH67BL
CPU
Core i7-2600K
Graphics
Intel HD 3000
Mac
MacBook Air
Mobile Phone
iOS
Is there any particular guide(s) which you'd suggest to follow through for our Asus notebooks?
If you're asking about fan control customization, you'll need to reverse engineer the related ACPI code.
 
Joined
Feb 13, 2011
Messages
228
Motherboard
Asus Vivobook S15 / x510UAR
CPU
i5-8250U
Graphics
UHD 620
Mobile Phone
Android
If you're asking about fan control customization, you'll need to reverse engineer the related ACPI code.
oh ok. I'd be surprised if that was within saintno1997/ tctien342 or Hieplvip/ baohiep's range. Unless you guided Hieplvip through the procedure back then when he added ACPI-Poller.kext to his Zenbook repo.

I'll pass your info on along with the notion that the kext best not be included in the release due to lacking related ACPI code. I guess all it would do is slow down the boot process??
 

RehabMan

Moderator
Joined
May 3, 2012
Messages
192,088
Motherboard
Intel DH67BL
CPU
Core i7-2600K
Graphics
Intel HD 3000
Mac
MacBook Air
Mobile Phone
iOS
Unless you guided Hieplvip through the procedure back then when he added ACPI-Poller.kext to his Zenbook repo.
No idea.

I'll pass your info on along with the notion that the kext best not be included in the release due to lacking related ACPI code.
Probably it is being used. Easy to check for FCPU in ACPI add-ons/patches.
 
Joined
Feb 13, 2011
Messages
228
Motherboard
Asus Vivobook S15 / x510UAR
CPU
i5-8250U
Graphics
UHD 620
Mobile Phone
Android
Probably it is being used. Easy to check for FCPU in ACPI add-ons/patches.
Great. How does that look? ACPI/patched/:
Code:
/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20181031 (64-bit version)
 * Copyright (c) 2000 - 2018 Intel Corporation
 * 
 * Disassembling to symbolic ASL+ operators
 *
 * Disassembly of iASLtDUmyj.aml, Mon Mar 11 09:52:16 2019
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x000003B8 (952)
 *     Revision         0x02
 *     Checksum         0xF2
 *     OEM ID           "hack"
 *     OEM Table ID     "fan"
 *     OEM Revision     0x00000000 (0)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20180427 (538444839)
 */
DefinitionBlock ("", "SSDT", 2, "hack", "fan", 0x00000000)
{
    External (_SB_.PCI0.LPCB.EC0_.ECAV, MethodObj)    // 0 Arguments
    External (_SB_.PCI0.LPCB.EC0_.ECPU, FieldUnitObj)
    External (_SB_.PCI0.LPCB.EC0_.ST83, MethodObj)    // 1 Arguments
    External (_SB_.PCI0.LPCB.EC0_.ST98, MethodObj)    // 1 Arguments
    External (_SB_.PCI0.LPCB.EC0_.TACH, MethodObj)    // 1 Arguments

    Device (ANKD)
    {
        Name (_HID, "ANKD0000")  // _HID: Hardware ID
        Name (UCFC, One)
    }

    Device (SMCD)
    {
        Name (_HID, "FAN00000")  // _HID: Hardware ID
        Name (TACH, Package (0x02)
        {
            "System Fan", 
            "FAN0"
        })
        Name (TEMP, Package (0x02)
        {
            "CPU Heatsink", 
            "TCPU"
        })
        Method (FAN0, 0, NotSerialized)
        {
            If (\_SB.PCI0.LPCB.EC0.ECAV ())
            {
                Local0 = \_SB.PCI0.LPCB.EC0.ST83 (Zero)
                If ((Local0 == 0xFF))
                {
                    Return (Local0)
                }

                Local0 = \_SB.PCI0.LPCB.EC0.TACH (Zero)
            }
            Else
            {
                Local0 = Zero
            }

            Return (Local0)
        }

        Method (TCPU, 0, NotSerialized)
        {
            If (\_SB.PCI0.LPCB.EC0.ECAV ())
            {
                Local0 = \_SB.PCI0.LPCB.EC0.ECPU /* External reference */
                Local1 = 0x3C
                If ((Local0 < 0x80))
                {
                    Local1 = Local0
                }
            }
            Else
            {
                Local1 = Zero
            }

            Return (Local1)
        }

        Name (FTA1, Package (0x16)
        {
            0x20, 
            0x21, 
            0x22, 
            0x23, 
            0x24, 
            0x25, 
            0x26, 
            0x27, 
            0x28, 
            0x29, 
            0x2A, 
            0x2B, 
            0x2C, 
            0x2D, 
            0x2E, 
            0x2F, 
            0x30, 
            0x31, 
            0x32, 
            0x33, 
            0x34, 
            0xFF
        })
        Name (FTA2, Package (0x16)
        {
            Zero, 
            0x0A, 
            0x14, 
            0x1E, 
            0x28, 
            0x32, 
            0x3C, 
            0x46, 
            0x50, 
            0x5A, 
            0x64, 
            0x6E, 
            0x78, 
            0x82, 
            0x8C, 
            0xA0, 
            0xB9, 
            0xCD, 
            0xE1, 
            0xF5, 
            0xFA, 
            0xFF
        })
        Name (FCTU, 0x02)
        Name (FCTD, 0x05)
        Name (FHST, Buffer (0x16)
        {
            /* 0000 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // ........
            /* 0008 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // ........
            /* 0010 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00               // ......
        })
        Name (FIDX, Zero)
        Name (FNUM, Zero)
        Name (FSUM, Zero)
        Name (FLST, 0xFF)
        Name (FCNT, Zero)
        Method (FCPU, 0, NotSerialized)
        {
            If ((\ANKD.UCFC == Zero))
            {
                Return (Zero)
            }

            If (!\_SB.PCI0.LPCB.EC0.ECAV ())
            {
                Return (Zero)
            }

            Local5 = \_SB.PCI0.LPCB.EC0.ECPU /* External reference */
            If ((Local5 < 0x80))
            {
                Local0 = Local5
            }
            Else
            {
                Local0 = 0x3C
            }

            Local1 = (Local0 + FSUM) /* \SMCD.FSUM */
            Local2 = FIDX /* \SMCD.FIDX */
            Local1 -= DerefOf (FHST [Local2])
            FHST [Local2] = Local0
            FSUM = Local1
            Local2++
            If ((Local2 >= SizeOf (FHST)))
            {
                Local2 = Zero
            }

            FIDX = Local2
            Local2 = FNUM /* \SMCD.FNUM */
            If ((Local2 != SizeOf (FHST)))
            {
                Local2++
                FNUM = Local2
            }

            Local0 = (Local1 / Local2)
            If ((Local0 > 0xFF))
            {
                Local0 = 0xFF
            }

            Local2 = Match (FTA1, MGE, Local0, MTR, Zero, Zero)
            If ((Local2 > FLST))
            {
                Local1 = (Local2 - FLST) /* \SMCD.FLST */
                Local4 = FCTU /* \SMCD.FCTU */
            }
            Else
            {
                Local1 = (FLST - Local2)
                Local4 = FCTD /* \SMCD.FCTD */
            }

            If (!Local1)
            {
                FCNT = Zero
            }
            Else
            {
                Local3 = FCNT /* \SMCD.FCNT */
                FCNT++
                Local1 = (Local4 / Local1)
                If ((Local3 >= Local1))
                {
                    FLST = Local2
                    \_SB.PCI0.LPCB.EC0.ST98 (DerefOf (FTA2 [Local2]))
                    FCNT = Zero
                }
            }

            Return (One)
        }
    }
}
Method (FCPU, 0, NotSerialized)
:cool:
 
Top