Hp nx6325 (and friends) thermal problems solved
Update 06-03-2007: You won’t need this script with a kernel >= 2.6.21.
Update 04-21-2007: I heard that you won’t need this script with a 2.6.21 kernel, I´m using a 2.6.20 kernel and the problem still exists.
Update 12-25-2006: Renamed the script as fancontrol-bd, because there already exists a program called fancontrol, written in perl
Update 12-14-2006: this method has been tested under various distros (Archlinux, Sabayonlinux, Fedora, Mandriva, Ubuntu) and it really works!
First of all, sorry for my bad English, I didn’t write this article in Italian just because a lot of people could benefit from it (lol).
Unfortunately it has been known that some Hp notebooks powered by AMD Turion 64 X2 / Sempron CPUs have got thermal problems. There are a lot of very good tutorials on how to install Linux on the Hp Nx6325 notebook (see Tuxmobil for details), and everybody has his own “solution” to the problem. What I found, following all the tutorials and applying all possible kernels and patches, is that the problem still persists, or is just reduced. My personal solution works and is tested with kernels >= 2.6.17 (I tried 2.6.17, 22.214.171.124, 2.6.19 with all possible patchsets [mm, ck, beyond, ..]).
I noticed that, with every proposed solution, even with a correct DSDT, there was still a big problem:sometimes the fans “forget” to start or to increase their speed. While I was trying several kernels and patchsets, I read this tutorial on tuxmobil, that suggests to add the following lines to /etc/rc.local:
echo 1 > /proc/acpi/thermal_zone/TZ1/polling_frequency
echo 1 > /proc/acpi/thermal_zone/TZ2/polling_frequency
echo 1 > /proc/acpi/thermal_zone/TZ3/polling_frequency
With this lines you force your system at boot to set the polling frequency of the fans every 1 second. On my notebook that didn’t work.
Well, I was playing with echo and the polling frequency, and I noticed that a
echo 0 > /proc/acpi/thermal_zone/TZ1/polling_frequency
Does refresh the state of the fans. Everytime. No matter if the temp is either rising or diminishing. No matter which value you set to the polling frequency.
The solution I propose is the following (I didn’t try it with the broken original DSDT, but I know a friend with my same notebook and the original DSDT, I’ll let you know ) yes it works even with a broken original DSDT!:
Create this bash script, as root, called fancontrol-bd, in /usr/bin
# dgraziotin fan control script
echo "0" > /proc/acpi/thermal_zone/TZ1/polling_frequency
# refresh time, in seconds
Make it executable:
# chmod 755 /usr/bin/fancontrol-bd
Then add it to the startup of your system, for example in /etc/rc.local
echo "/usr/bin/fancontrol-bd&" >> /etc/rc.local
Up from the next system start, your fan state will be updated every 20 seconds (you can play with this number, but I suggest to set it above 15 seconds because of the infinite loop). Maybe it won’t be perfectly synchronized with the temp state (i.e., it could rise the fan speed at 62 degrees instead of 60 degrees, or it could work at 60 degrees precise), but it works. Really. A smaller refresh-number will rise the precision, but I believe that you will be happy anyway
This method works even with a broken dsdt, but I remember you that a broken dsdt will keep your CPU temp very high anyway.
Please mail me if you find some problems with this method.