Jump to content

FAN Speed Reading and Controlling FOR Overheating


soumaxetuirk
 Share

5 posts in this topic

Recommended Posts

Hello,I am trying to Fix my DSDT so that HWMoniter can read my FAN Speed of laptop (HP_DV6_6164tx).And trying to control the fan speed as its always staying in lowest speed no matter what the temperature is.

This is my thermal zone from DSDT.

Scope (_TZ)
    {
        ThermalZone (THRM)
        {
            Name (REGN, "Processor Thermal Zone")
            Name (FMAX, 0x15E0)
            Name (FMIN, 0x07D0)
            Method (FRSP, 0, NotSerialized)
            {
                If (\_SB.PCI0.LPCB.EC.ECOK)
                {
                    Return (Multiply (\_SB.PCI0.LPCB.EC.FAT, 0xFF))
                }

                Return (FMAX)
            }

            Method (FSSP, 1, NotSerialized)
            {
                If (\_SB.PCI0.LPCB.EC.ECOK)
                {
                    Store (And (LNot (Arg0), One), \_SB.PCI0.LPCB.EC.FST)
                }
            }

            Method (_TMP, 0, Serialized)
            {
                If (\_SB.PCI0.LPCB.EC.ECOK)
                {
                    Store (\_SB.PCI0.LPCB.EC.CPT0, Local0)
                    And (HOTW, One, HOTW)
                    If (LEqual (HOTW, Zero))
                    {
                        If (LGreaterEqual (Local0, \_SB.PCI0.LPCB.EC.HOT))
                        {
                            Store (One, HOTW)
                        }
                    }

                    Return (Add (Multiply (Local0, 0x0A), 0x0AAC))
                }
                Else
                {
                    Return (0x0C3C)
                }
            }

            Method (_CRT, 0, Serialized)
            {
                Store (\_SB.PCI0.LPCB.EC.CRT, Local0)
                Return (Add (0x0AAC, Multiply (Local0, 0x0A)))
            }

            Method (_HOT, 0, NotSerialized)
            {
                Store (\_SB.PCI0.LPCB.EC.HOT, Local0)
                Return (Add (0x0AAC, Multiply (Local0, 0x0A)))
            }

            Method (_SCP, 1, Serialized)
            {
                Store (Zero, \_SB.PCI0.LPCB.EC.PAE)
            }
        }
    }

I followed some guides from Rehabman,and ended of with this

Device (SMCD)
            {
                Name (_HID, "MONITOR")
                Method (FAN0, 0, NotSerialized)
                {
                    Store (^^^LPCB.EC.HOT, Local0)
                    Store (^^^LPCB.EC.CRT, Local1)
                    And (Local0, 0xFFFF, Local0)
                    And (Local1, 0xFFFF, Local1)
                    If (LNotEqual (Local0, Zero))
                    {
                        If (LEqual (Local0, 0xFFFF))
                        {
                            Store (Zero, Local0)
                        }
                        Else
                        {
                            Store (0x0100, Local2)
                            Multiply (Local0, Local2, Local3)
                            Add (Local1, Local3, Local4)
                            Divide (0x03938700, Local4, Local5, Local6)
                            Store (Local6, Local0)
                        }
                    }
                    Else
                    {
                        Store (Zero, Local0)
                    }

                    Return (Local0)
                }
            }

Still nothing... any help would be appreciated . Thank you

Link to comment
Share on other sites

Hello,I am trying to Fix my DSDT so that HWMoniter can read my FAN Speed of laptop (HP_DV6_6164tx).And trying to control the fan speed as its always staying in lowest speed no matter what the temperature is.

This is my thermal zone from DSDT.

Scope (_TZ)
    {
        ThermalZone (THRM)
        {
            Name (REGN, "Processor Thermal Zone")
            Name (FMAX, 0x15E0)
            Name (FMIN, 0x07D0)
            Method (FRSP, 0, NotSerialized)
            {
                If (\_SB.PCI0.LPCB.EC.ECOK)
                {
                    Return (Multiply (\_SB.PCI0.LPCB.EC.FAT, 0xFF))
                }

                Return (FMAX)
            }

            Method (FSSP, 1, NotSerialized)
            {
                If (\_SB.PCI0.LPCB.EC.ECOK)
                {
                    Store (And (LNot (Arg0), One), \_SB.PCI0.LPCB.EC.FST)
                }
            }

            Method (_TMP, 0, Serialized)
            {
                If (\_SB.PCI0.LPCB.EC.ECOK)
                {
                    Store (\_SB.PCI0.LPCB.EC.CPT0, Local0)
                    And (HOTW, One, HOTW)
                    If (LEqual (HOTW, Zero))
                    {
                        If (LGreaterEqual (Local0, \_SB.PCI0.LPCB.EC.HOT))
                        {
                            Store (One, HOTW)
                        }
                    }

                    Return (Add (Multiply (Local0, 0x0A), 0x0AAC))
                }
                Else
                {
                    Return (0x0C3C)
                }
            }

            Method (_CRT, 0, Serialized)
            {
                Store (\_SB.PCI0.LPCB.EC.CRT, Local0)
                Return (Add (0x0AAC, Multiply (Local0, 0x0A)))
            }

            Method (_HOT, 0, NotSerialized)
            {
                Store (\_SB.PCI0.LPCB.EC.HOT, Local0)
                Return (Add (0x0AAC, Multiply (Local0, 0x0A)))
            }

            Method (_SCP, 1, Serialized)
            {
                Store (Zero, \_SB.PCI0.LPCB.EC.PAE)
            }
        }
    }

I followed some guides from Rehabman,and ended of with this

Device (SMCD)
            {
                Name (_HID, "MONITOR")
                Method (FAN0, 0, NotSerialized)
                {
                    Store (^^^LPCB.EC.HOT, Local0)
                    Store (^^^LPCB.EC.CRT, Local1)
                    And (Local0, 0xFFFF, Local0)
                    And (Local1, 0xFFFF, Local1)
                    If (LNotEqual (Local0, Zero))
                    {
                        If (LEqual (Local0, 0xFFFF))
                        {
                            Store (Zero, Local0)
                        }
                        Else
                        {
                            Store (0x0100, Local2)
                            Multiply (Local0, Local2, Local3)
                            Add (Local1, Local3, Local4)
                            Divide (0x03938700, Local4, Local5, Local6)
                            Store (Local6, Local0)
                        }
                    }
                    Else
                    {
                        Store (Zero, Local0)
                    }

                    Return (Local0)
                }
            }

Still nothing... any help would be appreciated . Thank you

 

You can use ACPIDebug to debug your code.

 

http://www.insanelymac.com/forum/topic/292800-dsdt-debuggingtracing-to-systemlog/

 

Note: Overheating implies you have other issues with power management and or DSDT patching...

Link to comment
Share on other sites

Screen_Shot_2015_05_10_at_5_57_43_PM.png

:) Thank you sir, I had to dig a little more but i managed to get it work.. :D

Sir,i was wondering if i can use ACPIPoller.kext.I am having issues with the DSDT Patches,tried to modify and use ProBook Fan Patches still having no success. :(

ACPIPoller.kext is used to call an ACPI method every second. The Info.plist is setup to call FCPU.

Link to comment
Share on other sites

  • 11 months later...

Hi soumaxetuirk, do you mind sharing what exactly you did when you said you dug a little deeper? I am afraid I'm in the same boat you were with my Hackintosh Laptop where the fans are simply stuck on the lowest setting!

Thanks!

 

Screen_Shot_2015_05_10_at_5_57_43_PM.png

:) Thank you sir, I had to dig a little more but i managed to get it work.. :D

Sir,i was wondering if i can use ACPIPoller.kext.I am having issues with the DSDT Patches,tried to modify and use ProBook Fan Patches still having no success. :(

Link to comment
Share on other sites

 Share

×
×
  • Create New...