Contribute
Register

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

Status
Not open for further replies.
I do see the extra sensors with your HWmonitor.

Tried the final check but ´iasl command not found´
Is this the way to go?
http://legacy.tonymacx86.com/viewtopic.php?f=14&t=1703

Have to hit the sack now, will try to get the iasl command to work tomorrow.

Cheers.

See this post to get a fairly recent iasl: http://www.tonymacx86.com/hp-proboo...0-4530-4730-patches-updated-9.html#post442794

You probably have a recent iasl in your "auto patcher" directory as it is required for make auto patching work and is mentioned in my wiki for the patches. You could copy it from there too.

But copy it somewhere in your path. I keep mine at /usr/bin/iasl.
 
Rehabman,

I don't know if it still work under Windows 7 :
http://www.tacktech.com/display.cfm?ttid=197

Maybe sc.exe ?

Maybe, but the app has to be written to run as a service. Some apps might/will get confused, as you can't do certain things when running as a service. This just makes the various registry entires that setup to run a certain EXE as a service.
 
I must say I'm hooked. This should be included in F.29 BIOS revision with user selectable temperatures.
With fan being off we should gain another 20-30 minutes battery life.

Anyone have any benchmarks?

There's GeekBench (it ok)... And Prime95 (better as stress/heat test): http://mersenne.org/freesoft/
 
See this post to get a fairly recent iasl: http://www.tonymacx86.com/hp-proboo...0-4530-4730-patches-updated-9.html#post442794

You probably have a recent iasl in your "auto patcher" directory as it is required for make auto patching work and is mentioned in my wiki for the patches. You could copy it from there too.

But copy it somewhere in your path. I keep mine at /usr/bin/iasl.

Thanks, of course i had a iasl already, i was to tired i think.
The strangest thing is that this morning the fan control seems to work, it does turn off at below 50.

If i want to go back to stock, is it just a matter of remove the file in modules and remove the kext and re-compile DSDT without the experimental fan control?

Cheers.
 
Thanks, of course i had a iasl already, i was to tired i think.
The strangest thing is that this morning the fan control seems to work, it does turn off at below 50.

If i want to go back to stock, is it just a matter of remove the file in modules and remove the kext and re-compile DSDT without the experimental fan control?

Cheers.

Yes.
 
Thanks, of course i had a iasl already, i was to tired i think.
The strangest thing is that this morning the fan control seems to work, it does turn off at below 50.

If i want to go back to stock, is it just a matter of remove the file in modules and remove the kext and re-compile DSDT without the experimental fan control?

Cheers.

One other thing about going back to stock. Make sure you boot into Chimera at least once with the Fanreset.dylib in place. Otherwise you might lock the "fake temperature" in without any reset code in place. Alternatively, you can reset the EC by shutting down, removing battery, removing ac power, etc.
 
I've been doing some experimentation with benchmarks that stress the CPU and run up the temperatures.
I've also got my lowest temp at 50C.

I've found that tightening up the temperatures at the top end of the scale is a good idea. It improves responsiveness when temperatures rapidly rise. So here's my current table:

Code:
        Name (FTAB, Buffer () 
        { 
        	50, 255, 	// 255 is off (really auto, but at low temp it is off)
        	55, 128, 	// 128 is slowest speed
        	60, 82, 
        	65, 74, 
        	69, 59, 
        	72, 49, 
        	0xFF, 0 	// last entry must be 0xFF, 0 is max fan speed
        })
 
Hi Rehab,

Not sure if you want to give this a try or not but I'm trying to apply your DSDT patches and the new experimental Fan Patch on a HP Folio 13. I am only able to use patches #1, #2, #3, and #5 while the rest, if I apply them and compile I get tons of errors (i.e. missing objects,etc.). Is it possible you can look at my DSDT and see if you can switch the DSDT code to match the Folio? If not, when you have time, can you write a tutorial on how you created the DSDT edits or lead me in the right way so I can start reading?

Thanks!
 

Attachments

  • acpi_dsdt.aml.zip
    26 KB · Views: 200
I'm still trying to figure out what is the best "sweet spot"

It seems that 50°C should work for the most laptops with first setting no more than 55°C
I experimented with three settings: 50°, 55° and 60°. For the first 2-3 hours 50° seemed like the right choice, then fan turns on more frequently. I changed the setting to 55° and I was OK for 10-15 minutes. Same situation when I updated initial temperature to 60°. Good for the first 15 minutes only laptop got much warmer.

Our laptop was designed with fan being ON at much lower temperatures. If we move temperature too high all the extra heat is absorbed by the computer case and we are taking the ability to dissipate the heat for the rest of electronics components on the motherboard.

What is your experience?
 
Hi Rehab,

Not sure if you want to give this a try or not but I'm trying to apply your DSDT patches and the new experimental Fan Patch on a HP Folio 13. I am only able to use patches #1, #2, #3, and #5 while the rest, if I apply them and compile I get tons of errors (i.e. missing objects,etc.). Is it possible you can look at my DSDT and see if you can switch the DSDT code to match the Folio? If not, when you have time, can you write a tutorial on how you created the DSDT edits or lead me in the right way so I can start reading?

Thanks!

The battery section is completely different on this folio13 compared to the 4530s. So you shouldn't even try those ones. So is the fan control. If you haven't tried already you should try my battery manager to see if it works with your laptop. It might just work, or you might need to do some conversions from 16-bit to 8-bit (most of your battery registers are 16-bit). Look at the _BIF, _STA, and _BST methods in the BAT1 device for an idea as to which registers are used for battery status.

It really isn't possible to write a general guide to DSDT edits. Basically, you have to be able to read the code and understand/guess what it might be doing. It is probably necessary to have some programming background... perhaps even low-level hardware programming background (I used to write firmware for PC expansion cards [a long time ago]). Once you start to understand what is going on, you can spend some time in a program like RW-Everything under Windows where you carefully poke at the system to see how it responds. After that, you test your knowledge/theories by modifying the DSDT code and testing your modifications. Reading the ACPI spec is also enlightening...

But there is a lot you can learn by reading the DSDT code. Look at _TZ.TZ00._TMP (Method _TMP in ThermalZone TZ00 in Scope _TZ). This is the function which clearly returns CPU temperature (this is an ACPI standard method, so result is in tenths Kelvin):

I have added comments:

Code:
            Method (_TMP, 0, Serialized)  // _TMP: Temperature
            {
                Store (\_SB.PCI0.LPCB.EC0.CPUT, Local0) // Local0 is now "read" CPU (heatsink?) temp
// compare against some threshold (THLD is constant at 0x78, or 120C ?)
// you can search the DSDT for THLD to discover it is never the target of any store
// operations.
                If (LGreaterEqual (Local0, THLD))
                {
// PTMP is initialized to 0xBB8 (3000 tenths Kelvin), but also updated below
                    Return (PTMP)   // bigger or equal than THLD, so return PTMP
                }
                Else
                {
// CPUT obviously holds temp in degrees C, because this is standard formula for 
// converting from degrees C to Kelvin (C * 10 + 2732 = tenths Kelvin)
                    Add (0x0AAC, Multiply (Local0, 0x0A), Local0)
                    Store (Local0, PTMP)  // PTMP is now last seen temperature within reason (ie. under 120C)
                    Return (Local0)
                }
            }

So If you wanted to you could write the TCPU function (part of fan patch... TCPU reads CPU temperature to report to HWMonitor):

Code:
Method (TCPU, 0, Serialized)
{
// please note I didn't test this, so it might not even compile as it is easy
// to screw up something syntactically, but you get the idea...
     Store (\_TZ.TZ00._TMP(), Local0)
     return (Local0)
}

If you start hunting around for FAN related stuff, you come across this:

Code:
            Method (FRSP, 0, NotSerialized)
            {
                If (ECON)
                {
// FAN speed "RPM" maybe in RPM/100 thus the multiply by 100 here (0x64 == 100 decimal)
                    Return (Multiply (\_SB.PCI0.LPCB.EC0.FRPM, 0x64))
                }
            }

            Method (FSSP, 1, NotSerialized)
            {
                If (ECON)
                {
// selecting which fan to control, or is the 1 written to FNSW some kind of "command code"
//   meaning turn fan on/off?
                    Store (One, \_SB.PCI0.LPCB.EC0.FNSW)
// maybe turning FAN on/off by writing either zero or one to FWPM?
                    Store (And (LNot (Arg0), One), \_SB.PCI0.LPCB.EC0.FWPM)
// some kind of acknowledgement that we are done writing to FWPM??
// or just being nice and returning it to zero
                    Store (Zero, \_SB.PCI0.LPCB.EC0.FNSW)
                }
            }

Experimenting with those items in something like RW-Everything might be interesting.
 
Status
Not open for further replies.
Back
Top