Contribute
Register

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

Status
Not open for further replies.
Thank You. Last question for the day Rehab (I am your newest hacki follower after all).

I can't seem to find the place to edit the max temp. It seems that by default the probook installer version has the max temp set at 50c I believe you set that default). I would like to set it to 52C but I just cannot find the txt to edit it. I've looked everywhere. Or should I just stick with the default 50C max temp?
 
Thank You. Last question for the day Rehab (I am your newest hacki follower after all).

I can't seem to find the place to edit the max temp. It seems that by default the probook installer version has the max temp set at 50c I believe you set that default). I would like to set it to 52C but I just cannot find the txt to edit it. I've looked everywhere. Or should I just stick with the default 50C max temp?

Look for FTAB in the DSDT patch:
Code:
// Fan Control Table (pairs of temp, fan control byte)\n
	Name (FTAB, Buffer ()\n
	{\n
		50, 255, 	// 255 is off (really auto, but at low temp it is off)\n
		57, 128, 	// 128 is slowest speed\n
		63, 82,\n
		68, 74,\n
		72, 59,\n
		75, 49,\n
		0xFF, 0 	// last entry must be 0xFF, 0 is max fan speed\n
	})\n

Same table once compiled into your DSDT looks like:
Code:
        Name (FTAB, Buffer (0x0E)
        {
            /* 0000 */   0x32, 0xFF, 0x39, 0x80, 0x3F, 0x52, 0x44, 0x4A,
            /* 0008 */   0x48, 0x3B, 0x4B, 0x31, 0xFF, 0x00
        })

You can edit the DSDT directly, or edit the patch (then re-apply it to your DSDT) it doesn't matter. Obviously it is a little cryptic to edit the DSDT directly because of the conversion to hex (artifact of compiling then dissembling the DSDT).
 
Hi RehabMan,

I was wondering if there is an easy way to adjust the number of points for the temp averaging (16 I believe it is now) so that I can get a bit quicker response in the fan speed change?

I've noticed it takes a bit of time for the fan to change speeds (slowing down mainly). I'm finding my quad core heats up fairly fast but also cools down fairly fast and I'd like to play around with to get the fan(noise level) to match.
 
Hi RehabMan,

I was wondering if there is an easy way to adjust the number of points for the temp averaging (16 I believe it is now) so that I can get a bit quicker response in the fan speed change?

I've noticed it takes a bit of time for the fan to change speeds (slowing down mainly). I'm finding my quad core heats up fairly fast but also cools down fairly fast and I'd like to play around with to get the fan(noise level) to match.

You can modify the patch -- the code is customizable:

The parts you're interested in are here:

Code:
// Table to keep track of past temperatures (to build average)\n
	Name (FHST, Buffer (16) { 0x0, 0, 0, 0, 0x0, 0, 0, 0, 0x0, 0, 0, 0, 0x0, 0, 0, 0 })\n
...
// Keeps track of last fan speed set, and counter to set new one\n
...
	Name (FCTU, 20)		// timeout for changes (fan rpm going up)\n
	Name (FCTD, 40)		// timeout for changes (fan rpm going down)\n

The size of FHST (Fan History) determines how many samples make up the average temperature. Smaller number of samples results in quicker response. Larger number of samples, slower response.

In addition, there are two separate timers (in seconds) that are started when the fan needs adjustment. These are FCTU and FCTD (Fan Change Timer Up, Fan Change Timer Down). FCTU is used as a count down for when the fan speed needs to be moved up a notch. It indicates the maximum time the code will wait before making a change (I say maximum because it is reduced by a divisor of 2, 3, 4, etc depending on the difference between the current fan speed step and the desired/new fan speed step). FCTD is the same thing but is used on changes moving down. Making these numbers smaller also causes the code to be more responsive, but as a side effect you experience more transitions in fan speed over a given time frame.
 
Thanks for the tips.

I played around with the numbers and I got it working pretty good for my needs.

One thing I was wondering is if there is a way to set a different shut off/start up temp?

I was using the Windows version of HPFanControl for a long time and in that version, it was possible to set different values.
For ex. have the fan shut off at 50C and start at 60C
 
Thanks for the tips.

I played around with the numbers and I got it working pretty good for my needs.

One thing I was wondering is if there is a way to set a different shut off/start up temp?

I was using the Windows version of HPFanControl for a long time and in that version, it was possible to set different values.
For ex. have the fan shut off at 50C and start at 60C

The code is table driven. FTAB has pairs of temperatures => fan speed control:

Code:
// Fan Control Table (pairs of temp, fan control byte)\n
	Name (FTAB, Buffer ()\n
	{\n
		50, 255, 	// 255 is off (really auto, but at low temp it is off)\n
		57, 128, 	// 128 is slowest speed\n
		63, 82,\n
		68, 74,\n
		72, 59,\n
		75, 49,\n
		0xFF, 0 	// last entry must be 0xFF, 0 is max fan speed\n
	})\n

If you change the values in the table, you can change the behavior. The only requirements are that the first value in every pair must be sorted by low temp to high temp (as you can see in the table above), and the last entry must be 255 (also as you can see above). Other than that, you can make the fan react to temperatures any way you like.
 
At first, I assumed that the first value is the shut off temp and the second value would be the start up temp but that is not the behaviour I am getting.

My shut off is set to 53C and start (128 speed) is set to 65C. With the FHST, FCTU, FCTD tweaks I did, I get pretty quick response times.

What I am seeing is that my fan shuts off and turns on at 53C. If I put the FCTD at 40, then the start up takes longer but is still triggered at 53C.

What I had in mind was for the fan to shut off at 53C and stay off until temps hit 65C, then start at speed 128.

Could you do a quick test with my values and see if you get the same response?

Code:
// Fan Control Table (pairs of temp, fan control byte)\n
    Name (FTAB, Buffer ()\n
    {\n
        53, 255,     // 255 is off (really auto, but at low temp it is off)\n
        65, 128,     // 128 is slowest speed\n
        70, 82,\n
        75, 74,\n
        77, 59,\n
        80, 49,\n
        0xFF, 0     // last entry must be 0xFF, 0 is max fan speed\n
    })\n

    Name (FHST, Buffer (8) { 0x0, 0, 0x0, 0, 0x0, 0, 0x0, 0 })\n
    Name (FCTU, 5)        // timeout for changes (fan rpm going up orig 20)\n
    Name (FCTD, 15)        // timeout for changes (fan rpm going down orig 40)\n

This is how the config file looks like for the HPFanControl on windows (same as yours) but the first line is the shut off temp and the second line is the 'on' temp.

Code:
// Celsius:         	
			
Level=53 255    
Level=64 128	
Level=70 82     
Level=72 74		
Level=77 59		
Level=80 49		
Level=82 0
 
At first, I assumed that the first value is the shut off temp and the second value would be the start up temp but that is not the behaviour I am getting.

My shut off is set to 53C and start (128 speed) is set to 65C. With the FHST, FCTU, FCTD tweaks I did, I get pretty quick response times.

What I am seeing is that my fan shuts off and turns on at 53C. If I put the FCTD at 40, then the start up takes longer but is still triggered at 53C.

What I had in mind was for the fan to shut off at 53C and stay off until temps hit 65C, then start at speed 128.

Could you do a quick test with my values and see if you get the same response?

Code:
// Fan Control Table (pairs of temp, fan control byte)\n
    Name (FTAB, Buffer ()\n
    {\n
        53, 255,     // 255 is off (really auto, but at low temp it is off)\n
        65, 128,     // 128 is slowest speed\n
        70, 82,\n
        75, 74,\n
        77, 59,\n
        80, 49,\n
        0xFF, 0     // last entry must be 0xFF, 0 is max fan speed\n
    })\n

    Name (FHST, Buffer (8) { 0x0, 0, 0x0, 0, 0x0, 0, 0x0, 0 })\n
    Name (FCTU, 5)        // timeout for changes (fan rpm going up orig 20)\n
    Name (FCTD, 15)        // timeout for changes (fan rpm going down orig 40)\n

Your table above will keep the fan off at 53C and lower. At 54-65C it will be at the slowest speed, and so on...

Keep in mind that the switch is not instant. There are delays in my code (according to FCTU/FCTD), and there are delays in the hardware (EC) itself.
 
Your table above will keep the fan off at 53C and lower. At 54-65C it will be at the slowest speed, and so on...

Can you suggest a way/or is it possible, to have the fan shut off at 53C and then only turn on at 65C? Instead of fan off at 53C and fan on at 54C?
 
Can you suggest a way/or is it possible, to have the fan shut off at 53C and then only turn on at 65C? Instead of fan off at 53C and fan on at 54C?

The table below is fan on at 65 or higher, off 64 or lower:

Code:
    Name (FTAB, Buffer ()\n
    {\n
        64, 255,     // 255 is off (really auto, but at low temp it is off)\n
        68, 128,     // 128 is slowest speed\n
        70, 82,\n
        75, 74,\n
        77, 59,\n
        80, 49,\n
        0xFF, 0     // last entry must be 0xFF, 0 is max fan speed\n
    })\n

There isn't really the possibility of having different on/off points as you are asking. I didn't think having it behave that way was a good idea, so I didn't write the code that way. My solution will hold the fan at its current speed, even if the temperature has changed where a new fan speed "should" be eventually selected, based on the timers established by FCTU/FCTD. You may have shortened those timers to such a degree that they don't serve their original purpose (to reduce unnecessary fan speed adjustments).
 
Status
Not open for further replies.
Back
Top