Jump to content


  • Content count

  • Joined

  • Last visited

Everything posted by mikaelr

  1. mikaelr

    Lenovo ThinkPad T420 with UEFI Only

    Hi. Packed the stuff up in T420_fancontrol.zip. It has a txt file with the steps and locations.. here's a recap. * Mount the ESP volume. (Replace disk0s1 with your ESP volume.) mkdir /Volumes/ESP && sudo mount -t msdos /dev/disk0s1 /Volumes/ESP * Backup old aml. cp /Volumes/ESP/EFI/CLOVER/ACPI/patched/dsdt.aml /Volumes/ESP/EFI/CLOVER/ACPI/patched/dsdt.aml.orig * Copy the asl from the zip. cp ~/Downloads/T420_fancontrol/dsdt.aml /Volumes/ESP/EFI/CLOVER/ACPI/patched/dsdt.aml * Copy the kext that poll the new fan control logic in ‘TCPU’ by requesting the CPY temp at intervals. cp -r ~/Downloads/T420_fancontrol/ACPIPoller.kext /Library/Extensions/ACPIPoller.kext kextutil /Library/Extensions/ACPIPoller.kext It's still a bit of a hack but works for me. If something big changes in the dsdt.aml to support new functionality you would have to patch manually.. If you have HWMonitor running you do not need the kext but I like to have it loaded as a backup if HWMonitor stops for some reason. If nothing is calling TCPU the fan just stays at current level and would cause overheating if that is on a low setting. T420_fancontrol.zip
  2. mikaelr

    Lenovo ThinkPad T420 with UEFI Only

    Great.. It did just that. Only needed to adjust the info.plist to match the t420 and use TCPU as poll method. <key>IONameMatch</key> <string>MON0000</string> <!-- Was FAN00000 --> <key>IOProviderClass</key> <string>IOACPIPlatformDevice</string> <key>Methods</key> <array> <string>TCPU</string> <!-- Was FCPU --> </array> Loaded the kext and it is now making sure the fan controller logic is polled even if hwmonitor is stopped.
  3. mikaelr

    Lenovo ThinkPad T420 with UEFI Only

    Hi all.. First post... :-) I got a bit annoyed about the bios fan controller.. It seemed to stay at 3500 rpm even if temperature was low and it seemed to run the cpu a little hot when under load load for a long time. Found this post on the thinkpad forum.: http://forum.thinkpads.com/viewtopic.php?f=32&t=91141#p607951 After adding the patch to the dsl and compiling, the fan control is perfect.(Just make sure hwmonitor is running and started at login as it poll the TCPU) Low load is 55C and fan at 1950 rpm and almost silent. High load is 80-85C and fan about 4500 rpm (was 90-92C before) My install is just a default install following the guide(Thanks!! tluck) Used a decompile of the existing aml because I had problems compiling the dsl included in the guide. And in the dsl I just merged the thinkpad forum change. WARNING!! It is important to run hwmonitor with 'continue to monitor sensors in background' or similar that query TCPU in intervals otherwise the fan will not be controlled. The best solution would be to find a method that is called in intervals by the OS. (Could be battery status?) Does this solution make sense to you good people here and do you have a suggestion to a method polled by the OS we could use to 'ping' TCPU in intervals to ensure the controller code is keeping the temperature correct? The modification ended up like this: Method (TCPU, 0, NotSerialized) { Store (^^EC.TMP0, Local0) /* FAN control START */ Store (\_SB.PCI0.LPC.EC.TMP0, Local0) If (LLessEqual (Local0, 0x32)) // CPU Temp is <= 50C { Store (Zero, \_SB.PCI0.LPC.EC.HFSP) // Set FAN Off } If (LGreaterEqual (Local0, 0x55)) // CPU Temp is >= 85C { Store (0x40, \_SB.PCI0.LPC.EC.HFSP) // Set FAN Mode Disengaged - Total Maximum } Else { If (LGreaterEqual (Local0, 0x4B)) // CPU Temp is >= 75C { Store (0x07, \_SB.PCI0.LPC.EC.HFSP) // Set FAN Mode 7 - Maximum Speed } Else { If (LGreaterEqual (Local0, 0x46)) // CPU Temp is >= 70C { Store (0x04, \_SB.PCI0.LPC.EC.HFSP) // Set FAN Mode 4 - Medium Speed } Else { If (LGreaterEqual (Local0, 0x41)) // CPU Temp is >= 65C { Store (0x02, \_SB.PCI0.LPC.EC.HFSP) // Set FAN Mode 2 } Else { If (LGreaterEqual (Local0, 0x3D)) // CPU Temp is >= 61C { Store (0x01, \_SB.PCI0.LPC.EC.HFSP) // Set FAN Mode 1 - Lowest Speed } } } } } /* FAN control END */ Return (Local0) }