User-developed Fan Control for the S10(e)
When you've searched the internet and found this thread, it's possible that you are an owner of a Lenovo Ideapad S10 or S10e which has a little problem with the behaviour and/or the noise of the fan. In this post you will get all the informations you need to handle this problem for yourself. It should also be the same on every S9/S9e.
Just a few comments before we begin:
This is not an official support or solution by Lenovo.
We are just normal users as you are, but we get rid of the fan and wanted to find a way to handle it. So if you want to try anything of the methods described here you have to know that you'll do all this only at your own risk. We are not responsible for any damages of your device. You should only use these methods if you know what you are doing.
Please note that this thread is only for discussing, improving, trouble shooting and perhaps extending the fan control utilities. Any general complaints about the fan problem itself should be placed in the original thread right here: http://forums.lenovo.com/lnv/board/message?board.id=IdeaPad_Netbook&thread.id=795. It already has 80+ pages (the link goes to the first page) and it is better to exclude all the fan control stuff because there it's very difficult to keep an overview.
Here you may post all of your questions, ideas/brainstorming, concerns, thanks and so on and you are really invited to participate and be an active member.
In this first part of this post I'm going to summarize all information about using a fan control utility. For any newbie it will be enough to read this post to get all necessary information. The second part does the same for developement of fan control utilities as we still have no known or working fan control utility for Linux, Mac OS X and other OSs I've forgotten - for now.
For getting started you need a S10 or S10e with an up-to-date BIOS. For the S10 it's the 90 67, for the S10e the 66.
The battery issue
Under very specific circumstances - that we haven't figured out yet - it might happen that your Lenovo S9/10(e) no longer detects the battery while using S10FanControl or S10Fan. It might occur after 2 minutes, it might occur after 2 months, it might never occur. It does not occur using Notebook Hardware Control.
It can be solved by removing the battery, waiting 10 seconds and put it back in. Then the battery is re-initialized and the detection works again.
S10FanControl - Windows
The first utility is S10FanControl created by user dresslerc. The current version is 126.96.36.199, available here: http://www.mediafire.com/file/yd5xmnrnijf/S10FanCtrl188.8.131.52.zip. After you've downloaded it you just have to extract it and start the .EXE in the "Release" folder. Here are the notes and the description dresslerc posted right here:
I've uploaded a version which everyone can use to test with. Remember this is still a TEST version although I think it works for the most part. It should work both on the S10/S10e.
Please install the .NET Framework 2.0 or later first.
Then click here to download the exe: http://www.mediafire.com/?jlg2enkjdxn
Once downloaded, extract the files and hit hte S10FanCtrl.Exe. Once this program launches you should be able to control the fan. Keep in mind that if you lower the fan speed then it'll take upto 30 seconds before the S10 registers the change, so be patient.
I've only tested this on the latest BIOS 59. I am sure it will work on the 57 as well but the individual speeds might not work properly on that version. Please try it out and report back.
The only issue that I heard so far is that occasionally the fan will kick in regardless if in Manual/Smart Mode. Also the temp it shows may not be accurate. If you find any other issues please let me know what they are so I can attempt to fix them.
Once we have all the kinks worked out then I will release the source.
Heres a quick Video: http://www.youtube.com/watch?v=_PKl70ZgmFg
REMEMBER: USE PROGRAM AT YOUR OWN RISK!!! I AM NOT RESPONSIBLE FOR ANY DAMAGES THIS PROGRAM MIGHT CAUSE.
BIOS Controlled - Fan is controlled by the BIOS
Smart Mode - Fan is controlled based on the conifguration in the options. You can set the threshold here at what temp you want the fan to kick in...
Manual - Fan is controlled manually by the slider.
If you want to have the program startup automatically, then place a shortcut of the app in the PROGRAM FILES -> STARTUP folder. Then you may want to go to the options and make the application minimize at startup.
It seems there are some issues with the app and the S10e or previous BIOS versions. Will post a fix asap.
The source code for S10FanControl is available here: http://www.mediafire.com/?sharekey=7a3fb99d33817c08c2b435915e8821d7e04e75f6e8ebb871, written in Visual Basic .NET 2008.
S10Fan - Windows
The second utility is a tool written by user slash:
Well it looks like Lenovo dropped this matter after all. Anyway, I have here another fan controller to add to the bunch. I have been using it for some time now without any problems. It is for both S10 and S10e.
What the program does is basically the same as others. The S10's fan speed is controlled according to the ACPI thermal zone temperature. By over writing the values which resides at offset 50h of the EC register at an appropriate timing, the ACPI thermal zone temperature is over ridden. The program is written in C and uses WinIo created by Sysinternals. The GUI version is available now.
It should be noted that the fan speed temperature thresholds differs with BIOS version. For 14CN67WW and 14CW90WW the fan changes speed at temperatures 60c, 65c, 70c, and 80c. Furthermore, the BIOS will automatically shutdown the S10 if the temperature reaches 90c.
The program has a fail safe mechanism that automatically disables itself if the actual ACPI thermal zone temperature goes above 85c. This allows the BIOS to regain control and the fan will work as intended by Lenovo. If the temperature drops below 85c the program will take over control again.
To run the program, you will need administrative privileges.
Known working BIOS versions: 14cn58ww, 14cn60ww, 14cn67ww, 14cn90ww
The program will work with any BIOS version as long as the BIOS uses the 50h EC register readouts to control the fan.
Higher priorities for EC commands.
Usage: The program will run in the system tray. Double click or right click and use the menu to open the program. To determine the BIOS temperature thresholds, use the 'Setup' button. To run at boot time, place a short cut in the startup folder.
http://www.mediafire.com/file/njhz0icym2t/S10Fan.zip build 2009.05.23
Usage: S10Fan.exe 60 65 70 80 70 75 80 85
The first 4 values are the BIOS temperature thresholds, the latter 4 are new thresholds that we want to over ride with. To determine the BIOS temperature thresholds, use the 'test' option.
Usage: S10Fan.exe 70 75 80 85
For updates and newer releases please check slash's post: http://forums.lenovo.com/lnv/board/message?board.id=IdeaPad_Netbook&view=by_date_ascending&message.i...
Notebook Hardware Control - Windows
The third utility is a profile for Notebook Hardware Control. I've adapted it from a profile for the Lenovo N500 which I've found here: http://nhc.yourcopy.de/overview/. With the manual for creating the profiles that can be found here: http://www.notebook-treff.de/board/database/hilfsprogramme-f%C3%BCr-nhc/92-how-to-create-an-acpi-fil... I was able to change the ACPI commands to work on the S10(e).
Installation and setup is divided in two steps. The program Notebook Hardware Control (NHC) is available at http://www.pbus-167.com/. Install the program, but do not start it for now. Then you need my NHCConfig utility, available here: http://forum.eeepcnews.de/download/file.php?id=1476. It detects your model number and BIOS-version via WMI and writes a proper S10(e) profile to the NHC acpi directory. The GUI is German if you have a German Windows and English if not. Additional languages can be added.
After you've extracted the ZIP-file you have to start the nhcc.exe (requires .NET Framework 2.0). At first a message appears that you use the program at your own risk. Then you can choose if you want to apply your own settings (experts) or if you just want the program to run with my defaults (newbies). In the settings window you can see your system details on the left, you can set up your thresholds in the middle and you can set the fan speed you want on the right. Then click on execute.
Now start NHC. Go to the "Settings" tab and click on "Show all NHC options and settings". Then a few more tabs appear. Go to the "ACPI" tab and check if the "ACPI Control System" is running (if everything works, the message "ACPI Control System running" will appear, otherwise it says "ACPI control system is not yet configured for this system"). Now click on "Show ACPI Control System details".
Here you can change the temperature values the fan control depends on (the settings from NHCC are the default values). On the bottom of the window you can see the "Current CPU temperature". That is the value you have to deal with. In general it has a value of around 60°C. In the middle you can see four user editable temperature values. You can leave the values as they are if everything works. The on/off values are responsible for the temperatures at which the fan starts running and stops again after cooling the device. The level values are responsible for the fan speed, for example you can set the off_level higher to let the fan run all the time at the lowest level, if the values do not fit for your device or whatever.
You can switch between NHC and BIOS control by disabling or enabling the "ACPI Control System" or by closing NHC.
With every utility it is possible that it takes some time until you see an effect after you've started the program. Any failure of the programs should be no big problem because the only thing that should happen is that the BIOS controls the fan. Another issue that might occur due to the way the fan is controlled is that the fan may start running for a very short time and it looks like the fan control has lost control. The fan should stop immediately or at least after a few seconds.
Keep in mind that running the S10(e) with a fan control means that the S10(e) has to deal with higher temperatures. That could mean that the device will not last for 10 years but only 9 years (who uses a netbook so long...?). In every case you need a tool for monitoring your cpu temperature. We know that especially Core Temp 0.99.5 and Real Temp 3.00 do a very good job. That is important because the temperature values you need to set up the fan control are different from the values reported by the cpu sensor, they are between 15°C and 20°C higher. A normal temperature reported by the monitoring should be around 40°C, with the NHC default values the fan starts running at 52°C and stops at 38°C.
END using fan control
BEGINNING developing fan control
Controlling the S10(e)'s fan is a litte bit difficult because it looks like there is no way to control it directly. But it is possible to manipulate the temperature the BIOS fan control depends on. As long as the built-in fan control thinks that the cpu is cool enough the fan stays off. And that is exactly the point where we can attack.
The fan control depends on a field called RTMP in the memory of the embedded controller. It can be accessed via "_SB.PCI0.LPCB.EC0.ERAM", the offset of RTMP is 0x50 (hex) or 80 (dec). It is a direct I/O read/write. The complete NHC command for reading the value is: ACPI.FIELD.ReadByOffset("_SB.PCI0.LPCB.EC0.ERAM", ref value, 0x50, 8) with "value" as the variable which gets the value.
What program logic do you need? You need a timer or something else that conducts an always-refresh cycle. It sounds very easy: You read the value, manipulate it and write it back. And it is that easy, you just have to keep some things in mind.
This refresh has to be done very often. The procedure must be very thin and quick. Also the bus that is used to communicate with the EC is a problem, but since the S10e BIOS 66 it became a minor problem for me because it looks like the built-in fan control now depends on some kind of average value over the last few seconds and it doesn't really matter if one write-cycle is failing.
The read-event must be placed before the write-event. Otherwise you just read your manipulated value. The field is filled by the system regularly, so you just have to test if the read_value is different from the written_value, then you know that the field was filled with a "fresh" value. Like "if read_temperatue <> written_temperature then real_cpu_temperature = read_temperature else do nothing".
About the values you have to write back... you will have to test and play a bit. My experience is that you can select three fan levels, starting at 59°, 62° and 70° - at least with the NHC profile and my S10e it's like that. It's some trial 'n' error. My fan stays off at < 59°, but you should select a very low value for fan_off like 30°. In my opinion it switches off much faster the lower the written value is. But it's just a feeling, I haven't measured it.
Perhaps some users from countries with other languages than German and English can add tags for "fan", "control" and "noise".
Note from Moderator: Minor edits in title and disclaimer.
Message Edited by JaneL on 04-25-2009 02:32 PM
Great opening post Carsten!
The latest bios:
http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&lndocid=MIGR-71252 (BIOS 66)
The FSB can be reduced from 133MHz to 100MHz using SetFSB, this also reduces the heat:
clockgen = SLG8SP513V
If you add a shortcut to the startup folder the program will start at startup. Under properties you can change the target to:
"C:\Program Files\SetFSB\setfsb.exe" -s100 -b1 -cg[SLG8SP513V] -w20
So it starts with a FSB of 100Mhz, in the background, with the right clock generator, after 20 seconds.
Message Edited by quazar on 04-25-2009 05:07 AM