This thread is for mods and tweaks only. If you have a general question about overclocking, installing drivers, about what case fits this laptop best, what LCD screen is good on Acer Aspire 3820T/TG/TZ/TGZ, etc, then please go to this thread http://forum.notebookreview.com/acer/561840-3820tg-owners-lounge-part-two.html
If you have a tweak/hack/mod to share or have a question about, feel free to post it here.
This front page will be updated with information about all the available mods and tweaks. If you notice something missing, either send me a PM or post in this thread.
The goal of this thread is to gather all mods, tweaks and modification-oriented advice in one thread where it is easily accessible.
Guides are welcome!
Useful links:
- Service guide/repair manual
Service manual, also known as repair guide. Includes dissasembly information, a list of solutions to common hardware problems and description of error codes. It has instructions on how to flash BIOS, reset Supervisor password and other things.
Useful tools:
- http://forum.notebookreview.com/acer/562583-3820tray-hardware-control-powerprofiles-cpumonitor.html.
Software written by forum member inteks. It is designed to liberate you from the 3820TG woes. Among many things, it can: automatically prevents graphics switching on AC/battery, Standby, Hibernate. You can use it to OC CPU and GPU. It even lets you quiet down that pesky fan!
-
-
Using Embedded Controller (EC) to control your laptop's hardware. (by prikolchik)
By following any instructions in this article you relieve the author of any liability resulting from your actions. In other words: if you break your computer -- then it is your problem!
EVEN THOUGH THE CHANCE IS SMALL, IT IS POSSIBLE TO PERMANENTLY DAMAGE YOUR HARDWARE BY MAKING CHANGES TO EMBEDDED CONTROLLER (EC). DO NOT CONTINUE IF YOU DO NOT ACCEPT THE RISKS!
Preface
When author of this article was looking for a way to control fan speed on Acer TimelineX Aspire 3820T/3820TG/3820TZ/3820TGZ, he could not find any guides, instructions or easy-to-use tools that would aid him in his search. It took a lot of research, guesses, God's help and sheer luck for the author to succeed in his noble task. This article was written, because the author decided to share his findings with the rest of the world in hopes that it will aid others in tweaking their hardware in the way their heart desires.
Throughout the article, the author refers to his laptop Acer Aspire 3820TG to provide real world examples.
To have a deeper understanding of the article, the reader should be familiar with: 1) bits 2) bytes 3) binary numerical system 4) hexadecimal numerical system 5) general computer programming terms. This information can be found on Wikipedia.
Please note: the information presented in this article was not properly researched and the reader should be aware that the author could be unintentionally providing false or outdated information. If you notice an error or have a suggestion, please contact the author (prikolchik) via Private Message on forum.notebookreview.com or leave a reply in this thread.
Intro
Laptops use Embedded Controller (EC) to control the battery charging operation and perform other tasks associated with starting and stopping the laptop. EC stores the current state of devices (should WiFi be on?), current information about the system (temperature, fan speed), control battery state (should the battery be charging?) and so on. ACPI directly communicates with EC and writes changes depending on the event that took place. For example, you press a hotkey to increase brightness and ACPI reacts to that hotkey. It increases the brightness, by doing calculations and writing changes to EC. After writing to EC, the brightness changes either on hardware level or via device drivers, that themselves read the values from EC and talk to other hardware to change the brightness level.
Typically, what is referred to Embedded Controller is a micro-controller that has 256 (0x00-0xFF in hexadecimal) user-accessible bytes. Most of those bytes have a meaning and are responsible for controlling the hardware or providing information. For example, on 3820TG the byte at [0x93] stores the state of the CPU fan and byte at [0x94] stores the fan speed.
In nutshell, Embedded Controller stores 256 numbers, and by reading and writing to EC, we can get information about the system and make changes to the state of computer hardware (such as fan control).
Why would you want to read and write to Embedded Controller (EC)?
The simple answer is: because you can! Writing to EC allows you to control hardware that cannot be controlled by other means in the way you want. For example, you can manually turn on/off WiFi, change brightness to "unsupported" levels, change fan speed or completely turn off the fan; all without using any special drivers or programs (apart from whatever you use to make changes to EC).
For example, someone figures out how to control the fan and shares his findings, then a programmer writes a small utility to control the fan by reading and writing to EC. This program is then published on the Web and ordinary users can install and use this program to control the fan on their computers. There are many examples of such programs. Some of them are: tpfancontrol (Windows), 1810tray (Windows), a1ctl (Windows), acerhdf (Linux), acerfand (Linux). It is not uncommon for programmers to take existing fan control tools and port them to another system, or edit them to enable fan control on their hardware. If you plan on developing your own tool, then I highly suggest reusing existing solutions and if you end up writing your own tool, then make the source code available for others to modify.
It is very important to note that it is rare to find two laptops that use Embedded Controller in the same way. So don't be surprised if changing some value in EC works on one laptop, but doesn't work on yours.
How can you read and write to the Embedded Controller (EC)?
There are many tools you can use to read and write to EC. On Windows, a popular tool is RWEverything and on Linux one of the tools is acer_ec.pl (a simple Perl script, that is considered unsafe and the use of it is depreciated). There may be other tools for both Windows and Linux, but the author did not look for any alternatives as both of those two tools worked well on his computer.
Here is an example of Embedded Controller (EC) dump made with acer_ec.pl on Acer Aspire 3820TG (output format is changed from the original by author):
Code:prikolchik@as3820tg:~$ sudo perl acer_ec.pl regs # note that "00" was replaced with "--" for readability 00 01 02 03 04 05 06 07 | 08 09 0A 0B 0C 0D 0E 0F __ __ __ __ __ __ __ __ | __ __ __ __ __ __ __ __ 00 | -- 20 -- -- -- 32 2C AF | 06 -- 44 14 -- -- -- 30 10 | 03 -- 03 -- -- -- -- -- | -- -- -- -- -- -- -- -- 20 | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- 30 | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- 40 | -- -- -- -- -- -- -- -- | -- 0A -- F4 02 -- -- 01 50 | 10 01 03 -- -- 01 81 -- | -- -- -- -- 40 -- -- -- 60 | 80 80 80 -- -- -- -- -- | 1A -- -- -- -- -- -- -- 70 | 62 01 04 -- 88 71 -- -- | 08 01 -- -- -- -- -- 09 80 | 81 07 09 -- 17 -- -- 17 | A9 -- -- 06 -- -- -- -- 90 | -- -- -- 04 FF FF 04 FF | FF B2 -- -- -- -- 03 0B A0 | 80 80 80 80 80 80 80 80 | 2B 1D 25 25 31 3B 05 -- B0 | 80 80 80 -- -- -- -- -- | 1A -- -- -- -- -- 01 -- C0 | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- D0 | 62 67 57 5C -- -- -- 69 | -- -- -- -- 32 -- -- -- E0 | 54 16 54 16 64 -- -- -- | EA 32 01 60 -- -- B8 0B F0 | 30 57 2E 30 37 41 43 2E | 30 31 2E 31 35 20 -- --
So how do you figure out what the values in EC stand for?
Before you start figuring out what you can do with EC on your machine, you should first spend the time and search the web to make sure there is no existing solution to your problem. Take your time, download the BIOS for your laptop and examine the README files to see what models your BIOS is compatible with. For example, you might not be able to find any information on fan control on Acer Aspire TimelineX 1410T, but after examining the README file included in the downloaded BIOS update you realise that 1410T BIOS works with 1810T/1810TZ. So you search for tweaks on 1810T, and find that there is an existing fan control tool that works with your 1410T laptop.
Another good idea would be to search for all models from your laptop manufacturer and see if any existing tools or EC methods work on your model. For example, controls in EC on Acer 3820TG are somewhat similar to Acer Extensa 5220. It could significantly narrow down your search if you know approximately what you are looking for and how it could look like. This will significantly cut down on the time it takes you to find what you are looking for.
If you can't find any existing solutions, then you could try figuring it out on your own. How? To tell you the truth, most of it are lucky guesses, a bit of experimentation and by making changes to the state of the computer hardware (such as using CPU intensive programs to make the fan turn on, or turning WiFi on/off) and observing what changes in EC as a result. For example, you notice that in byte located at [0x72] bit 1 changed from 1 to 0 when WiFi is turned off via a hotkey. You can then try changing [0x72] bit 1 back to 1 to see if that turns the WiFi back on.
You should be careful and have some sort of a system to make sure you don't check the same byte twice. You can make changes to EC and see if anything changed in your system as a result. You CANNOT just blindly write EVERYWHERE in EC (this will be your last option if everything else fails), as some bytes/bits are indicators (such as temperature), some are recomputed every few milliseconds, so changing them will not lead to any result and the value will revert back and some bytes are "high importance" and changing them can lead to emergency shut down of your computer. For simplicity, if the byte you change changes itself back to the original value, then you can think of it as "read-only" byte. For example, on 3820TG when CapsLock is on, a value at [0x0C] bit 2 indicates whether CapsLock (itself or LED) is on or not. Changing this value will make no difference in the system, and bit will revert back to its old value automatically.
Another more "scientific" approach is to examine the code that writes to EC. An example of such code would be Advanced Configuration and Power Interface (ACPI), which mostly consists of SSDT and DSDT (differentiated system description table). SSDT and DSDT tables are part of the computer's BIOS. SSDT/DSDT tables can be extracted by various tools, such as RWEverything (Windows) and acpi_dump (or simply by "cat /proc/acpi/tables/dsdt > somefile.aml") on Linux. The extracted table is in compiled AML byte code, and will need to be decompiled to get the original source code. The tool that can disassemble AML byte code into ASL source code is iASL. iASL is an abbreviation for "Intel ASL compiler/decompiler" and is a fully-featured translator for the ACPI Source Language (ASL) and ACPI binary data tables ( more info). There are versions both for Linux (can use package manager to install) and Windows. It can be downloaded from here.
Once you extract SSDT and DSDT tables and disassemble them into ASL source code, you can open the source code files with any text editor. It can be very difficult to understand at first, but google can be of great help, and fortunately, there is an excellent ACPI Specification paper, that describes both ACPI specifications and ASL language. One of the easiest ways to understand the soure code is to pay very close attention to the description of reserved methods in the ACPI specification paper and pay close attention to variable names, which may give clues as to what they mean. For example, WLEN could stand for "WireLess ENable" and store the status of the WiFi (whether it is enabled or not).
If you are looking for controlling the fan, then try looking for "FAN". You might be able to find the fan control methods, or something that would give you a clue on what to look for in EC.
If you feel like you can start looking for some real stuff, then search for "EmbeddedController" in SSDT/DSDT source files. Here is an example from DSDT table of Acer Aspire 3820TG (My comments are after //):
Code:OperationRegion (RAM, EmbeddedControl, Zero, 0xFF) Field (RAM, ByteAcc, Lock, Preserve) { Offset (0x0A), , 1, // [0x0A] bit 0 BLNK, 1, // [0x0A] bit 1, makes System Power LED blink WLLD, 2, // [0x0A] bit 2 & 3, status of the Wireless LED BTLD, 2, // [0x0A] bit 4 & 5, status of the Bluetooth LED Offset (0x13), URTB, 8, // [0x0A] all bits //.... skipped lines Offset (0x71), WLEN, 1, //[0x71] bit 0, controls the status of Wireless BTEN, 1, //[0x71] bit 1, controls the status of Bluetooth //... skipped lines Offset (0x73), WWEN, 1, //[0x73] bit 0, controls the status of 3G card Offset (0x75), SWBL, 1, KLMA, 1, Offset (0x76), SYSC, 4, SYSO, 4, Offset (0xBA), VTMP, 8 //[0xBA] all bits, just a video card temp variable? }
You should also search in the file for more "EmbeddedController" and for the actual name that is assigned to OperatingRegion with EmbeddedController (the name is "RAM" in this case).
When you start figuring out what these variables mean, it would be a good idea to create a table (on paper, or speadsheet) the same size as EC table (16 by 16) and cross out the regions that do not interest you. For example, if you are looking for fan control, then you don't care about the variables that you know store battery charge information.
Once you examined SSDT and DSDT tables and harvested as much information about what is stored in EC as you possibly could, then it is time to observe, change and experiment by making changes to EC.
Here is how I figured it out how to control the fan on 3820TG:
1) Look online for existing solution for my model. Nothing was found.
2) Download BIOS and check what models it is compatible with, then search for tweaks for those models. Nothing.
3) Search for guides and information about how to control the fan on other Acer laptops. Found a few very brief remarks and incomplete guides. Gave me a general direction to go to. Looked at source code for fan control tools to see what bytes in EC were responsible for fan control on other models.
4) Examined DSDT & SSDT tables and created a list and a table of bytes in EC that I knew were not responsible for the fan control. Couldn't find any fan control information in DSDT.
5) Observed RWEverything and ran some programs to make the fan speed change to cool down the CPU. I noted bytes stored at [0x94] (default 0xFF) and [0x95] (default 0xFF) change ONLY when the fan is running. I remembered reading that in every fan control example I read about, there was a byte that controlled whether the fan was on Auto or in Manual mode. So I changed byte at [0x93] (original value was 0x04) to some random value, simply because it was the closest one and it seemed logical. The value I entered was something like 0xBF, and I noticed that it automatically changed to another value, 0x14, and then both [0x94] and [0x95] changed to 0xB0 and 0xAF respectively, and the fan started running! That was a success! At first, I thought [0x94] and [0x95] both were telling me what the speed of the fan is, so I started looking for a byte that lets me change the fan speed. I couldn't find anything, so I simply went on google and typed "0x93 0x94 0x95 fan" and I ended up on some German forum, where one user was describing the fan control he found on Acer Extensa 5220. He was saying that [0x93] = fan mode (0x04=auto, 0x14=manual), [0x94] desired fan speed (0x00-0xFF, where 0x00 max and 0xFF minimum) and [0x95] actual fan speed (0x00-0xFF, where 0x00 max and 0xFF minimum). Once i read that, i changed [0x93] to 0x14, and set [0x94] to 0x00. My CPU fan turned on and it was clearly spinning on the max speed! I then changed [0x93] to 0x04 to put CPU fan back into automatic mode.
6) Because on 3820TG you have two fans, one for CPU and one for GPU, I also wanted to figure out how to control the GPU fan. So, knowing how to control CPU fan, I looked for the similar 3 bytes. And I found them right after the CPU fan control bytes. GPU fan control bytes were: [0x96] (fan mode) [0x97] (desired fan speed] and [0x98] (actual fan speed).
7) Played around by changing values and trying to control both CPU and GPU fan. It was a success!
How I found out how to disable/enable WiFi in EC on 3820TG:
1) Started RWEverything and looked at observed the values. Noticed ones that change repeatedly (probably temperature monitoring, battery charge level, some temp variables, etc) and was ignoring them.
2) Kept disabling and enabling WiFi with different time periods to see what changed in EC as a result.
3) Noticed that [0x71] bit 0 was changing from 0 to 1 and from 1 to 0. So I changed the value by hand and noticed that it turns on/off my WiFi card. Success!
Wrap up
So that is how you can find how to control the hardware of your laptop via EC. Now you can explore and find a way to control YOUR computer! Just remember the main points:
1. Research, research, research and research.
2. Don't blindly change things. Look for how it worked in other laptops.
3. Take your time, do not give up.
Good luck!
Acer Aspire TimelineX 3820T/3820TG/3820TZ/3820TGZ Fan control and other Embedded Controller (EC) tweaks (by prikolchik)
Here is the list of what we can control with Embedded Controller (EC) on Acer Aspire TimelineX 3820T/3820TG/3820TZ/3820TGZ.
To apply these tweaks:
- Windows. Use a program called RWEverything ( download here). Once installed, launch it at the top you will find many buttons. Find one that says "EC" (or "Embedded Controller" if you hover your mouse over it) and click on it. You will see this:
- Linux. I suggest using RWEverything on Windows, because it is much more convenient, but if you are too hardcore Linux then you can use acer_ec.pl (a simple command-line Perl script. It is considered unsafe and the use of it is depreciated). It worked fine on 3820TG, but there is no guarantee it works on other laptops. Here is an example of output:
Code:prikolchik@as3820tg:~$ sudo perl acer_ec.pl regs # note that "00" was replaced with "--" for readability 00 01 02 03 04 05 06 07 | 08 09 0A 0B 0C 0D 0E 0F __ __ __ __ __ __ __ __ | __ __ __ __ __ __ __ __ 00 | -- 20 -- -- -- 32 2C AF | 06 -- 44 14 -- -- -- 30 10 | 03 -- 03 -- -- -- -- -- | -- -- -- -- -- -- -- -- 20 | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- 30 | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- 40 | -- -- -- -- -- -- -- -- | -- 0A -- F4 02 -- -- 01 50 | 10 01 03 -- -- 01 81 -- | -- -- -- -- 40 -- -- -- 60 | 80 80 80 -- -- -- -- -- | 1A -- -- -- -- -- -- -- 70 | 62 01 04 -- 88 71 -- -- | 08 01 -- -- -- -- -- 09 80 | 81 07 09 -- 17 -- -- 17 | A9 -- -- 06 -- -- -- -- 90 | -- -- -- 04 FF FF 04 FF | FF B2 -- -- -- -- 03 0B A0 | 80 80 80 80 80 80 80 80 | 2B 1D 25 25 31 3B 05 -- B0 | 80 80 80 -- -- -- -- -- | 1A -- -- -- -- -- 01 -- C0 | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- D0 | 62 67 57 5C -- -- -- 69 | -- -- -- -- 32 -- -- -- E0 | 54 16 54 16 64 -- -- -- | EA 32 01 60 -- -- B8 0B F0 | 30 57 2E 30 37 41 43 2E | 30 31 2E 31 35 20 -- --
All the numbers that you see in this window are in hexadecimal. If you don't know what that is, take the time to look it up. Also read about binary numbers, understand what bits are, etc.
The addresses in EC range from 0x00 to 0xFF. 16 numbers per row and 16 numbers per column. The way you tweak or read information is: find a place the in memory that interests you and read or change its value.
------------- Fan control: ----------------
[0x93] - CPU fan: Fan mode. 0x04 Auto, 0x14 Manual
[0x94] - CPU fan: Desired fan speed. 0x00-0xFF. With 0x00 being max speed and 0xFF means fan is off
[0x95] - CPU fan: Actual fan speed (in %? See note below).
[0x96] - GPU fan: Fan mode. 0x04 Auto, 0x14 Manual
[0x97] - GPU fan: Desired fan speed. 0x00-0xFF. With 0x00 being max speed and 0xFF means fan is off
[0x98] - GPU fan: Actual fan speed (in %? See note below).
To test: Open RWEverything, click on Embedded Controller (EC), go to [0x93] and change it to 0x14. Then change [0x94] to 0x00. This will set CPU fan speed to maximum! Sounds like an airplane, doesn't it?
--
If [0x93]/[0x96] fan mode is set to Automatic (0x04), then changing [0x94]/[0x97] will not work. It will simply revert back to the old value.
--
If CPU fan is set to max speed (0x00) in [0x94] then the maximum fan speed it reaches is 0x60 in [0x95].
If GPU fan is set to max speed (0x00) in [0x97] then the maximum fan speed it reaches is 0x45 in [0x98].
--
Fan speed steps and corresponding temperature in Celsius that triggers the change. (Looked at changes in EC [0x94] and [0x97] and at temps in HWMonitor to figure this out):
CPU Fan speed : 0xFF 0xD0 0xB6 0x9E 0x81 ....
CPU Temperature: <? ? ? ? ? ?
GPU fan speed : 0xFF ...
GPU Temprature : <?
--
NOTE on fan speed:
The formula for calculating the actual fan speed in RPM is not yet known. I did find fan speed formulas for other Acer laptops (examined DSDT tables). There are no FAN tables or methods in 3820 DSDT, so we will have to figure out the fan speed formula ourselves. The formulas I found were:
1) ((~ VAL) & 0xFF) * 10. OR in other words: ( NOT( VAL) AND 0xFF) * 10
2) 0x78000 / VAL
3) 1350000 / 8 / VAL
4) 1350000 / 4 / VAL
Where VAL is the fan speed value from [0x94],[0x95],[0x97],[0x98].
As far as I know, the only way we can find the true fan speed formula is to either measure the actual fan speed, or look up the data sheet for the fans and find the maximum (and minimum?) RPM speed. Then use those max/min values to find the formula, knowing that CPU can only go as high as 0x60 in [0x94], etc.
I did some research, but I couldn't find any fan speed information apart from manufacturer and part number. Perhaps, we should email the fan manufacturer and ask for fan speeds?
My computer:
CPU fan: ADDA AB7505HX-R0B DC5V 0.20A (JM31) image
GPU fan: ADDA AB5505HX-Q0B DC5V 0.20A (JM31) image
Found on net:
CPU fan: SUNON Model: MG057PFV1-A P/N: MG50060V1-B000-S99 image
GPU fan: -Manufacturer- -Part number-
--
Information missing: (please help out!)
1. Need to know max/min RPM of CPU and GPU fans for fan speed calculation.
2. Need a screenshot of RWEverything EC window on 3820 T. This model doesn't have GPU fan, so we need to see how EC reflects that.
3. Need CPU/GPU fan speed steps that are there in Automatic mode (0x04). Also temperature in Celsius that triggers each change. Please include your BIOS version.
----------------------------------------------------
RO - means read-only.
SC - means sensor, changes dynamically.
------------- Misc: ----------------
[0x77] - RO? - Fn key: If Fn key is pressed, it is equal to 0x04, otherwise 0x00. Maybe signals other keys too? It could be keyboard controller and we can send key signals to it?
[0x87] - RO - Backlight/brightness level: From 0x00 (backlight off) to 0x64 (backlight 100%). This is a read-only copy of [0x84].
------------------------------------------------------------------
------------- LEDs: ----------------
[0x0A] bit 1 - Power LED: if on(1) it will blink orange.
[0x0C] bit 2 - RO - CapsLock (LED?): If CapsLock key is on, bit is set. (0x04)
[0x0C] bit 4 - RO - NumLock (LED?) : If NumLock is on, bit is set. (0x10)
[0x51] bit 0 - LED next to P button: on(1)/off(0).
------------------------------------------------------
------------- Devices: ----------------
[0x0B] bit 0 - RO - Touchpad: Indicates whether touchpad is enabled (bit set 0x01) or disabled (bit unset 0x00).
[0x71] bit 0 - WiFi status: On(1) or Off(0).
[0x71] bit 1 - Bluetooth status: On(1) or Off(0).
[0x73] bit 0 - WiFi LED or 3G status(?).
---------------------------------------------------------
------------- Sensors: ----------------
[0xA8] - TZS0 in CPUID Hardware Monitor
[0xA9] - TSZ1 in CPUID Hardware Monitor
---------------------------------------------------------
More info to come!mirh likes this. -
I installed Ubuntu 10.10 64-bit on my 3820TG a few days ago and it is working great!
You need to do a bit of tweaks here and there, but otherwise everything works out of the box. 1080p video playback using VLC player is completely smooth both on Intel and ATI right out of the box.
Some tips:
1. Do not install flgrx proprietary ATI driver. This will leave your system in an unbootable state. You can install it if you set video to Discrete in the BIOS, otherwise you will be stuck at the Terminal screen. Speaking from experience...
2. To turn on/off Bluetooth press Fn+F3 once.
3. To turn on/off Wi-fi press Fn+F3 twice (quickly).
4. When you have Switchable graphics option set in BIOS, both ATI and Intel cards will be powered on, and the active one will be Intel. So you will need to manually turn off the unused card (see below). You can also switch between cards as computer is running (see below).
5. When you are on Intel graphics -- HDMI-out will NOT work. This is the case both on Windows and Linux. Just the way it was designed (hardware). Works perfect on ATI.
Some things you need to tweak:
1. To adjust the screen brightness via the Fn+Left Arrow and Fn+Right Arrow keys, you need to add an option to the kernel boot command. Open a terminal and type: sudo gedit /etc/defaults/grub
Look for the GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" line and change to: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux"
Now update grub with: sudo update-grub
Reboot.
2. Depending on the wireless card you have, there might be no wireless drivers pre-installed. If that is the case, then you will need to connect to the internet via cable and then go System-> Administration-> Hardware Drivers, select your Wireless card driver and click Activate. It should automatically install it for you. Reboot.
If you have Broadcom wireless, then it probably doesn't work correctly. Uninstall default Ubuntu driver above and follow install a new one from here Broadcom.com - 802.11 Linux STA driver
3. If graphics option is set to Switchable in the BIOS then both cards will be powered on by default. To save power and cut down on the heat, you can turn off the unused card (ATI) as Intel is good enough for day-to-day activities. You can do this by following this guide here. You should follow the steps up to and including installing switch_between_cards.sh. There is a bug in that script that prevents it from working on 3820TG, so you will need to fix the following two lines. You must add : once in every line after grep (notice the red):
4. The battery life isn't that great by default, so you might want to google for some power saving scripts and tweaks. I recall seeing a few on Ubuntu Forums specifically for 3820TG.
That is all I've done so far to my install. You can google for instructions on enabling multitouch and two-finger scrolling on the touchpad (or see here). I haven't done it myself yet. I might permanently switch to Discrete graphics and try newest ATI proprietary flgrx graphics from ATI website. I'll be trying it out on a test install (external HDD).
Cheers and have fun!
Further reading: https://wiki.archlinux.org/index.php/Acer_TimelineX
Replaced by vga_switcheroo, but still good for reference: [SOLVED] Acer 3820tg battery life - Ubuntu Forums
TO stop WiFi LED blinking. Ubuntu 10.10: how to stop the wifi led blinking | xAppSoftware - the xAppSoftware Web Site -
Here is modded KBC for 1.19 BIOS.
It implements following algorithm for CPU fan:
TZ0<60 - 0% speed
60-66 - fan is running at lowest possible speed F0 (lower that is used in original BIOS)
>66 - not modified.
Fan speed table has next values:
FF FF FF F0 81 6F 6F 6F 6F
How to install:
1. In downloaded BIOS KBC folder replace original file with modded one.
2. Run KBC.bat with admin privileges.
No reboot is needed.Attached Files:
-
-
- "Intel Only" option in BIOS. Completely disable ATI/AMD card
- Acer Aspire TimelineX 3820T/3820TG BIOS recovery (by prikolchik)
- Clearing a BIOS Password on Acer Aspire 3820T/3820TG
- Flashing BIOS + tips
- Not a BIOS mod, buy CPU OC. Just saving link here for now OC regist
Here will be information about different BIOS mods and tweaks.
You can blindly reset to BIOS to default settings. Here is a list of steps:
1. Get into BIOS with F2.
2. Press F9 + Enter (this will load setup defaults)
3. Press ESC + Enter + Enter (this will save the changes)
4. Your computer reboots and you are back!
This should work for 3820/4820/5820 -
Motherboard photos + Internal components
Components:
- Winbond 25Q32BVSIG ( image, pinout, datasheet)
- Nuvoton NPCE781BA0DX image
- Clockgen: SLG8LV595V (older) / ICS VS3197BL (newer)
- CPU fan: ADDA AB7505HX-R0B DC5V 0.20A (JM31) image
- GPU fan: ADDA AB5505HX-Q0B DC5V 0.20A (JM31) image
- LCD+CCD 30-pin cable. JM31_CP (50.4HL.04.012)
Adding SSD to PCI-e port
So... You can add a 2nd PCI-e port, but SSD will probably not work. You CAN install WiFi/3G card though or solder in a USB connector and have a 4th USB port on 3820TG.
Adding PCI-e port and installing UTSM modem
Upgrading to higher resolution screen
So is upgrading to higher resolution screen possible on 3820TG? Probably, but only maximum of 1440x900.
Some ideas for mods
After taking apart the laptop, I noted that Acer considered making CPU fan vent wider. It may be possible to use a carpenters knife to cut out extra holes for better ventilation. That is questionable mod, since 3820TG has an excellent cooling system already.
Changing thermal paste
Backlit keyboard mod
It is possible to purchase Acer 3810T backlit keyboard and install it into 3820TG. It is a bit thicker than 3820TG keyboard, so it might not be an easy fit and it could also leave marks on your screen, when laptop is closed.
You can get Acer 3810T backlit keyboard on ebay for about $25+ship. Here is part number of the keyboard:
There was an idea of making a "switch" (sorry, don't know the proper term) out of status LEDs ( here with diagram, and here) for turning on/off backlit keyboard. The idea is this: power backlit keyboard from USB port (or some other power source) and use a status LED as a switch. I think the best LED for turning keyboard on/off would be the P button (or Backup button as Acer calls it), because it is not really used for anything and LED status can be easily controlled by changing Embedded Controller register [0x51]bit0 by a small program (both on Windows and Linux). OR you could disable any software control and simply turn the LED on/off by pressing the button.
VGA + HDMI monitors. Dual-monitor setup Last edited by a moderator: May 12, 2015 -
Latest Switchable Graphics ATI/Intel drivers
The drivers on Acer website are outdated. You can either fiddle around by switching to Intel-only and ATI-only and installing each graphics driver separately, OR you can install a modded driver package with Switchable Graphics support. You can get it here with instructions translated here.
Prevent Graphics from Auto-switching
NOTE: If you want to prevent auto-switching so that you could use Intel-only graphics, the please read about Intel-only graphics in hidden BIOS settings. This works great with Windows XP, where driver does not power down ATI card when on Intel.
With original Acer drivers, when you plug-in or unplug the AC adapter from the laptop, it switches to a different graphics card to save power or increase performance. It is a feature, not a bug. In the driver, there is an option to disable it, but because driver is buggy, it does not work.
After investigating, it was found that the graphics are switched by a service called AMD External Events Utility (C:\Windows\system32\atiesrxx.exe). If you prevent this service from running, then your graphics will NOT auto-switch, but unused graphics card will not be powered down and you will lose battery life. There is a way to prevent AMD External Events Utility from auto-switching graphics and having unused card powered down too. It can be done by disabling AMD External Events Utility service for two seconds on every SystemEvents.PowerModeChanged system event. inteks came up with this idea and added it to his http://forum.notebookreview.com/acer/562583-3820tray-hardware-control-powerprofiles-cpumonitor.html program. It was confirmed by me that 3820tray is able to keep graphics from auto-switching even with Standby and Hibernate.
This prevent auto-switching method should work pretty much on all computers with Intel/ATI dual-graphics configuration. (such as 4820TG, 5820TG) -
Ufff... Seems TZ temps readings are up and working. The only thing that concerns me from sharing current version is than sometimes (especially when RWEverything is run in background) I'm getting junk instead of temp value.
I found and use next code for EC access:
Code:const int EC_DATAPORT = 0x0062; const int EC_CTRLPORT = 0x0066; const char EC_STAT_OBF = 0x01; // Output buffer full const char EC_STAT_IBF = 0x02; // Input buffer full const char EC_STAT_CMD = 0x08; // Last write was a command write (0=data) const char EC_CTRLPORT_READ = (char)0x80; const char EC_CTRLPORT_WRITE = (char)0x81; const char EC_CTRLPORT_QUERY = (char)0x84; bool waitportstatus(int bits, int onoff= false, int timeout= 1000) { bool ok= false; int port= EC_CTRLPORT, time= 0, tick= 10; // // wait until input on control port has desired state or times out // for (time=0; time < timeout; time+= tick) { DWORD data = PortIn(port); // check for desired result int flagstate= (((char)data) & bits)!=0, wantedstate= onoff!=0; if (flagstate==wantedstate) { ok= true; break; } // try again after a moment ::Sleep(tick); } return ok; } char EmbeddedController::ReadByte(int offset) { // wait for IBF and OBF to clear if (!waitportstatus(EC_STAT_IBF | EC_STAT_OBF, false)) return 0; // tell 'em we want to "READ" PortOut(EC_CTRLPORT, EC_CTRLPORT_READ); // wait for IBF to clear (command byte removed from EC's input queue) if (!waitportstatus(EC_STAT_IBF, false)) return 0; // tell 'em where we want to read from PortOut(EC_DATAPORT, offset); // wait for IBF to clear (address byte removed from EC's input queue) // Note: Techically we should waitportstatus(OBF,TRUE) here,(a byte being // in the EC's output buffer being ready to read). For some reason // this never seems to happen if (!waitportstatus(EC_STAT_IBF, false)) return 0; return static_cast<signed char>(PortIn(EC_DATAPORT)); }
-
Search for a Mutex or look for the R&W Process before acessing the EC. -
1st looks more promising we only need to find proper constant instead of 10, because I don't believe that our CPU Fan has only 1600RPM max (~0x60)*10. -
-
No, I haven't use it.
Don't worry about rpm, use %. -
)) features of my utility is that it allows user to set desired fan speed to maintain. Of course this is only possible only when controller has a capability to return RPM value.
-
Code:public static Ols ols; public static bool InitIO() { ols = new Ols(); // Check support library sutatus switch (ols.GetStatus()) { case (uint)Ols.Status.NO_ERROR: break; case (uint)Ols.Status.DLL_NOT_FOUND: MessageBox.Show("Status Error!! DLL_NOT_FOUND"); return false; case (uint)Ols.Status.DLL_INCORRECT_VERSION: MessageBox.Show("Status Error!! DLL_INCORRECT_VERSION"); return false; case (uint)Ols.Status.DLL_INITIALIZE_ERROR: MessageBox.Show("Status Error!! DLL_INITIALIZE_ERROR"); return false; } // Check WinRing0 status switch (ols.GetDllStatus()) { case (uint)Ols.OlsDllStatus.OLS_DLL_NO_ERROR: break; case (uint)Ols.OlsDllStatus.OLS_DLL_DRIVER_NOT_LOADED: MessageBox.Show("DLL Status Error!! OLS_DRIVER_NOT_LOADED"); return false; case (uint)Ols.OlsDllStatus.OLS_DLL_UNSUPPORTED_PLATFORM: MessageBox.Show("DLL Status Error!! OLS_UNSUPPORTED_PLATFORM"); return false; case (uint)Ols.OlsDllStatus.OLS_DLL_DRIVER_NOT_FOUND: MessageBox.Show("DLL Status Error!! OLS_DLL_DRIVER_NOT_FOUND"); return false; case (uint)Ols.OlsDllStatus.OLS_DLL_DRIVER_UNLOADED: MessageBox.Show("DLL Status Error!! OLS_DLL_DRIVER_UNLOADED"); return false; case (uint)Ols.OlsDllStatus.OLS_DLL_DRIVER_NOT_LOADED_ON_NETWORK: MessageBox.Show("DLL Status Error!! DRIVER_NOT_LOADED_ON_NETWORK"); return false; case (uint)Ols.OlsDllStatus.OLS_DLL_UNKNOWN_ERROR: MessageBox.Show("DLL Status Error!! OLS_DLL_UNKNOWN_ERROR"); return false; } return true; } // ---------------------------------------------------------------------------- // Acer embedded controller functions // ---------------------------------------------------------------------------- // based on the Acer ACPI project developped by Michael Kurz, Petr Tomasek // and Carlos Corbacho : http://aceracpi.googlecode.com // ---------------------------------------------------------------------------- private static bool WaitEC(ushort iPort, byte bVal) { for (int i = 0; i < 300; i++) { var result = ols.ReadIoPortByte(iPort); if (!Convert.ToBoolean(result & bVal)) return true; Thread.Sleep(1); } return false; } private static bool WaitWriteEC() { return WaitEC(0x66, 0x2); } private static bool WaitReadEC() { return WaitEC(0x66, 0x1); } public static bool WriteEC(byte bValue, byte iPort) { if (WaitWriteEC()) { ols.WriteIoPortByte(0x66, 0x81); } else return false; if (WaitWriteEC()) { ols.WriteIoPortByte(0x62, iPort); } if (WaitWriteEC()) { ols.WriteIoPortByte(0x62, bValue); } return true; } public static byte ReadEC(byte iPort) { if (WaitWriteEC()) { ols.WriteIoPortByte(0x66, 0x80); } if (WaitWriteEC()) { ols.WriteIoPortByte(0x62, iPort); } if (WaitReadEC()) { return ols.ReadIoPortByte(0x62); } return 0; } #endregion Acer
-
Hmm, this looks very interesting! I was curious to how you do it on Linux and now I know! Doesn't look as clean as you do it on Linux though
RWEverything doesn't work on Linux (obviously), so if you want to read and change EC values on Linux, acer_ec.pl Perl scirpt (google) can be used. I have tested it and it works well on 3820TG. Some sources say that it is not very safe to use, but I didn't have a problem. I don't plan on creating any scripts/applications that use it. I had to do some minor modifications to make it display EC table in a nice way.
For controlling fan on Linux, we can modify acerhdf kernel module/driver that can be downloaded from here. I've looked at the code and as far as I can see it will require very little modification to work with 3820TG CPU fan.
acerhdf is used to keep the fan off until CPU reaches a certain temperature, and then it returns automatic fan control back to the system. This wouldn't be as good as Windows tool you guys are writing, but it will certainly be better than nothing!
I might create a new tool based off it, but that will NOT be any time soon.
Can anyone tell me if there is a way to read ATI graphics temperature from EC so that we can control the fan speed? As far as I know there isn't, but I just want to be sure.
And what is the register and formula for calculating CPU temperature?
---------------------------
There is another tweak I really want to do. I want to set the LCD brightness to levels much lower than 10%. I have modded the DSDT table in my BIOS to include new levels (1,2,4,6,8%), but unfortunately, it only works on Windows using Windows brightness controls (<Win>+X)
On Ubuntu, when I try to lower brightness by hotkeys <Fn>+right, it does not work. It only goes as low as 10% on matter what I do. Both on ATI and Intel.
When running off ATI as discrete, the LCD brightness can be changed to arbitary value by editing [0x84] to values 0x00-0x64 (from 0 to 100%). That is excellent.
When running off Intel, changing [0x84] makes no difference. After looking at DSDT table, it seems like [0x87] is used to store the brightness level when on Intel. So I tried changing [0x87] like i did with [0x84] for ATI, but unfortunately, the value seems to be locked, and there is no way to change it. So I dug deeper, and found that the actual brightness is changed by reading value from [0x87] (which we can't change in RWEverything) and then writing to an ACPI (DSDT table) value called BCLP (which is then used by the driver?). BCLP is 32bit long and is stored at SystemMemory(ASLB) + Offset(0x316). ASLB value is 32bit long and is stored in SystemMemory(0xFFFF0000) + Offset(0xAA).
My logic is that if I can read ASLB to find the memory location of BCLP and then change the brightness directly by writing to BCLP, then it should work. The problem is that I don't know how to get access to SystemMemory to find ASLB. I think you can do it in RWEverything, but everything I tried did not give me a meaningful value.
Can any of you give me any tips on how to find the ASLB value in SystemMemory? And then change BCLP? In the worst case, I can always rewrite DSDT table, but before doing that I want to figure out if I can control brightness by writing to SystemMemory via RWEverything or some other tool. -
Few questions about WinRing0:
1. Does it need to be somehow installed (with system restart) before use?
2. Does it provide MS signed driver to work under 64bit systems?
3. I can't find a link to download it. All link I found are pointing to WinRing0 | Download WinRing0 software for free at SourceForge.net. And there are no files to download
. Can you share it with me?
I'm asking because I now use TVicPort ( Toolkits - Freeware - TVicPort - Port I/O and Memory access under Win32 and Win 64-bit) for PortIO. It is freeware for non-commercial use, has signed driver and works under any XP/Vista/7 both x86 and 64bit. But it has one major disadvantage: it should be installed with system reboot before use. -
i dont get setfsb to work in c# but its a good example for openlibsys.cs, -
-
2: A signed driver is available.
3: Get the right version. The new one is only able to read and not to write, because the tool was used to damage a the hardware. -
Oookey...
Have added support for CPU speed regulation. Works good so far. Temp is around 50 (with fan off) when in browser.
Just want to add WinRing0 support before posting first beta.
Adding screenshot from my system.
Attached Files:
-
-
Well. Added support for using WinRing0. It works but... Need superadmin privileges which make things very annoying especially when adding program to Autorun.
So I think I'll keep TVicPort support (it does not need superadmin rights to work) for those who has UAC on. Other could use WinRing0.
Now need to spend some time to write short guide how to install/use my utility. -
Mmmm, can't wait to test your programs!
So far, I have updated my original EC post http://forum.notebookreview.com/ace...inex-3820tg-mods-tweaks-only.html#post7260497 with a nice article on using EC to control computer hardware. I hope that will aid others in finding a way to control the fan on their laptops. -
Are you planning on sharing the source code anytime soon? It would be interesting to see how it works!
Comments:
1. It needs a short unique name that is clearly highlighted. I think "Fan Speed Regulator" is too generic and too long. Something like "3820ctl" or something that has "Timeline" in the name?
2. Add an "Apply" button next to where you change fan speeds?
3. To get ATI temperature, maybe have a look at the source code for Open Hardware Monitor. You could probably use an existing solution.
4. You should write your program is such a way that it is possible to easily add support for other computers. Even though 3820TG has Phoenix BIOS and 4820TG/5820TG have InsydeH2O BIOS, I think fan control should be very similar. There is no information yet on fan control on 4820/5820. I might borrow 4820 tomorrow just to figure out how to control the fan
Potential bugs:
1. You shouldn't reset "Current" to "0" if "Auto" check box is ticked, because if it is unticked back then the fan speed is set to manually off (speed of "0"). Perhaps, a better alternative to resetting to default "0" would be to make "Current" text box read-only when fan is set to Auto?
Bugs:
1. When starting FanSpdReg.exe with RWEverything open on EC I got an error.
I know you mentioned the problem with reading garbage values with RWEverything open, so maybe you should give a better error message? Telling the user what happened and suggesting they close RWEverything if open?
2. Serious bug: It is possible to start two copies of your program and running two at the same time creates a race condition. The fan keeps trying to slow down and speed up at the same time. You shouldn't allow more than one instance running.
3. There seems to be something wrong with calculating current RPM speed. If I set Max to "63" and fan is actually spinning at "62", then Current will show "62", and if the actual speed increases to "63+", you program shows "100". There is a sudden jump from 62 to 100 when actual speed increated only by 1%.
4. Serious bug: If I set the fan to manual and speed to "0" and kill your program with Task Manager, then it doesn't restore fan speed back to Auto. This is a serious bug, as hardware could be damaged due to overheating if your program crashes and doesn't restore fan control back to Auto. You should make sure you change the fan speed back to Auto if your program doesn't end properly. -
Guys, why do we need our own fan control? We can just put the values in tpfancontrol.ini and like with any other Acer laptop.
prikolchik, I've actually pasted the control bits and the DSDT code a while back in the big forum, but its so big that I'm not surprised that you didn't know about it.
An other question: can we use HWEverything to set CMOS bit 0x141 to 1?
OH, the BIOS tweak is a godsend.
Finally my laptop has a REAL Intel card and a REAL AMD card. No stuping switching graphics anymore! For me, going into BIOS and switching graphics is much much much less of a hassle compared to the non-existent driver support for our notebooks' display switching.
Finally installing SP1, better Intel drivers, better AMD drivers, everything seems good now! -
You only posted TZ (TimeZone) DSDT code, which is responsible for temperature reporting.
To save you the trouble of looking over your old posts, here is what you posted on the topic: here, here, here. Unfortunately, the information you had was incomplete. And you did not find the fan mode bit, and therefore could not control the fans
I have looked deeper into controlling the brightness than you did, as I wanted to have "unsupported" (levels that are not listed in DSDT table _BCL()) low brightness levels. If there is a way to switch brightness control to manual like there is for fan, then that would be amazing. I haven't found it yet and I doubt there is one.
As for brightness, here is what I know so far:
[0x83] - When you press hotkeys, in ACPI (DSDT table has the code) it sets 0-3 bits to 0x0-0x9 OR 4-7 bits to 0x0-0x9 depending on the value of two variables (BCEN and BNVA?) in DSDT. Then, after this change has happened, something other than DSDT treats these numbers in [0x83] as an index for an array of brightness levels, which is returned via _BCL() function in DSDT. It looks up the brightness level corresponding to the index, adds 0x03 to it (I wonder why) and copies this value to [0x84] and [0x87].
[0x84] - Stores the brightness on ATI card. It can be changed to 0x03-0x67 (0-100 + 3)
[0x87] - Stores the brightness value on Intel card, which is then fed to a SXBL() (or something? cant remember the name) DSDT function that sets the brightness to that value. This brightness is set by writing to some location in the RAM. (see my post on previous page).
Do you remember how you couldn't change brightness when running in Switchable->Discrete mode on ATI-only with certain drivers? Well, on ATI card you can change the brightness directly by writing to [0x84]. This also works on Linux. I haven't tested it on Graphics->Switchable->Currently running ATI though.
It dazzles me as to why Acer engineers would make it THIS complicated, when they could have just took care of it in ACPI directly in _BCM() like they do on Acer Aspire 1410.
Currently, I have managed to run on "unsupported" brightness levels by adding them to the list of supported brightness levels returned by _BCL() and then in Windows I use Win+X key shortcut to change current brightness to those unsupported levels. It does not work on Linux though as it relies on ACPI to do the job, when Windows relies on the video drivers.
My ultimate goal is to have a complete control over brightness in Linux, so that I can set brightness to very low levels. Then I can delete Windows and never look back -
Of course, I didn't figure out the control bit, but at least I tried and spent a stupid amount of time figuring it out.
I think the only downside of using ACFancontrol is that it cannot control two fans. I was thinking about running two instances in parallel, but I don't know if it would be stable.
Here is a thread for some ini files for Acer notebooks, we could enter ours too.
FanControl Board - Working .ini files for ACFanControl
For the display, I am really happy now, that I got rid of every switchable thing I had. I uninstalled all drivers, run Driver Sweeper 2.9 and installed the latest AMD in AMD mode, Intel in Intel mode and I just select in BIOS whenever I like. Takes 10 seconds and I have reliable GFX drivers now.
I don't know brightness in Linux, I use VirtualBox for exactly these reasons. And I found that that I still really need snapshots for using Linux, there is just always something which goes wrong.
Right now my biggest problem with the 3820TG is that it uses 2-3 W more after resume from hibernation, compared to a fresh restart. It is really really bad and I don't know how do solve it. It was like this ever since I had the laptop. -
@prikolchik
Thank you for response.
.
.
. When "auto" checkbox is unchecked this means that user has full control on fan speed and he can set everything hi wants there (0, 100 or whatever).
. Of course assertion is not a solution (it is only temporary solution). But suggest user to close any EC R/W app is not an option
. I'm working on this now. Will add some thoughts later.
. Joking
. Well, I can add checking for running copy, but what to do if it was run by other user? The better way is to divide app on service and UI parts, but it will be complete redesign and I'm not ready to start it now. Maybe later.
.
. What are you suggesting to do here? The program was unexpectedly killed externally
. How program can handle this?
Well, once again, I will return with EC access thoughts later. Just give me some time. -
the fan control in 3820tray is also near ready. soon i post an update.
for those how like allinone tools
i made it stepless. user can input a temp/prozent table and 3820tray calulates all values between this steps. i could look like
50C° 0%
60C° 10%
70C° 20%
80C° 50%
90C° 100%
so @55C° it will be 5% ..... and so on
i like it! it produce very smooth fanspeed changes -
Is there anyone who knows something about disabling/enabling root PCI ports with Devcon and RWEverything? We could write an alternative AMD/Intel Graphics Switcher and just use the official drivers!
Here is a compare about my PCI devices running on Intel only and AMD only mode:
Text Compare
Nando4 answer could be a good starting point, but the shifting of PCI buses makes me confused:
http://forum.notebookreview.com/ace...ix-bios-bios-mod-request-184.html#post7270765 -
I was not able to enable the ATI again. -
BUT it does not saves power !!! it looks like the ati device is still powered. -
Code:while (true) { unsigned char val = [B][COLOR="Red"]YourClass[/COLOR][/B]::ReadEC(0x93); if (val != 0x04) { // any code to notify: dialog or write to file, whatever LOG_WRITE("Error reading EC, expected 0x04, got=0x%x\n", int(val)); } Sleep(9); }
I have tested this on my system and very often get incorrect value from EC. With RWEverything closed - its all much better.
@inteks
O. And one more thing. It seems code you use to read EC is not quite correct:
Code:private static bool WaitEC(ushort iPort, byte bVal) { for (int i = 0; i < 300; i++) { var result = ols.ReadIoPortByte(iPort); if (!Convert.ToBoolean(result & bVal)) return true; Thread.Sleep(1); } return false; } private static bool WaitReadEC() { return WaitEC(0x66, 0x1); }
Code:private static bool WaitEC[B][COLOR="Red"]Full[/COLOR][/B](ushort iPort, byte bVal) { for (int i = 0; i < 300; i++) { var result = ols.ReadIoPortByte(iPort); [B][COLOR="Red"]// ! is removed[/COLOR][/B] if (Convert.ToBoolean(result & bVal)) return true; [COLOR="Red"][B]//Thread.Sleep(1); //on linux here was udelay(10) - delay for 10microseconds, so under windows even Sleep(1) makes this code work incorrect[/B][/COLOR] } return false; } private static bool WaitReadEC() { return WaitEC[B][COLOR="Red"]Full[/COLOR][/B](0x66, 0x1); }
But even this code fails for me with RWEverything on background -
I think the problem is that you poll EC way too often. Have you tried polling it every 1 second instead? I am not sure if you can, but assign a higher priority to the EC polling component? If I remember correctly, by default acerhdf reads temperature from EC every 1.5 second. As for the source code above, I think you can access EC more often on Linux, because you have better control over the hardware.
If I had source code, I could probably test it -
1. Address = [EC_SC]
2. Wait EC free
3. Write 0x80 to [EC_SC]
4. Wait IBF free
5. Write Address to [EC_DATA]
6. Wait IBF free
7. Wait OBF full
8. Read Data from [EC_DATA]
The problem is on stage 7. OBF becomes full just few microseconds after step 5. So even Sleep(1) is not an option here and you forced to constantly read port in cycle and wait until OBF bit is set to true. Of course when CPU is 100% busy system will interrupt your thread leading to odd behavior: Windows user ring is not truly real-time system, so this is main concern when working with EC from here.
I've attached ECTest sources in next message.
Sources are attached.Attached Files:
-
-
i dont use ReadEC on my code. on the 1810tray version i saw that it not working correct any time so i use the MSR to get CPU temp.
for ATI temp (to implement GPU Fan control) all my hope goes to Guru3D.com Forums - View Single Post - MSI Afterburner .NET Class Library
PS:
here some code (winring0 required)
Code:public static int tjMax; public static byte GetCoreTemp(){ //var tjmax = 105; uint dwEAX = 0, dwEDX = 0; ols.RdmsrPx(0x19C, ref dwEAX, ref dwEDX, pz1 ); dwEAX = dwEAX & 0xFF0000; dwEAX = dwEAX >> 16; var core1 = (byte) (tjMax - dwEAX); if (corecount == 1) return core1; dwEAX = 0; dwEDX = 0; ols.RdmsrPx(0x19C, ref dwEAX, ref dwEDX, pz2); dwEAX = dwEAX & 0xFF0000; dwEAX = dwEAX >> 16; var core2 = (byte) (tjMax - dwEAX); ols.RdmsrPx(0x19C, ref dwEAX, ref dwEDX, pz3); dwEAX = dwEAX & 0xFF0000; dwEAX = dwEAX >> 16; var core3 = (byte)(tjMax - dwEAX); ols.RdmsrPx(0x19C, ref dwEAX, ref dwEDX, pz4); dwEAX = dwEAX & 0xFF0000; dwEAX = dwEAX >> 16; var core4 = (byte)(tjMax - dwEAX); byte coremax = 0; if (core1 > coremax) coremax = core1; if (core2 > coremax) coremax = core2; if (core3 > coremax) coremax = core3; if (core4 > coremax) coremax = core4; return coremax; }
-
Code:private static bool WaitEC(ushort iPort, byte bVal) { for (int i = 0; i < 300; i++) { var result = ols.ReadIoPortByte(iPort); if (!Convert.ToBoolean(result & bVal)) return true; var start = DateTime.Now; while((DateTime.Now -start).Ticks < 100){} } return false; }
-
User Retired 2 Notebook Nobel Laureate NBR Reviewer
If it's not power saving then would need to capture a dump of it's pci space (4KB) when it is power saving. Load that into the ATI card after disabling it in Device Manager, then disabling the x16 link.
I believe that will do the trick. Just needs a nice r-w everything script + batch file to manage it all OR Inteks could consider doing the equivalent steps in 3820TGTray. -
-
-
Manually set brightness on 3820T/3820TG/3820TZ/3820TGZ to ANY level. (by prikolchik)
NOTE: The described method works ONLY on 3820xx. It is machine specific. Please DO NOT try it on any computer other than Acer Aspire 3820T/3820TG/3820TZ/3820TGZ.
WARNING: As far as I can tell it is a safe hack. But if it damages your hardware, I will not be responsible. You have been warned!
The described method might work on all 3820s other than 3820TG, i.e. 3820T/3820TZ/3820TGZ.
Intro (you can skip this)
On 3820TG, the lowest screen brightness setting (10%) is too bright for some people. It was really uncomfortable when using laptop in the dark, so I decided to find a way to set the brightness to any level I want.
At first, I extracted ACPI DSDT table from the BIOS and examined it. I found the methods that are supposed to set the brightness by reading Intel ACPI specification. The methods involved were: _BCL(), _BCM(), _BQC(), along with any helper-methods. I have examined the DSDT table code and added extra brightness levels to the package returned by _BCL(). Then I created a modded BIOS (using Phoenix Tools) with my modded DSDT table. I flashed to my modded BIOS. Unfortunately, new brightness levels only worked on Windows with "Adjust brightness" slider in Power Options and in <Win>+X menu. They did not work on Linux. Further investigation was needed.
I have spent more time examining DSDT table and realized that the brightness is controlled in this way: [0x83], [0x84] [0x87]
(UNFINISHED YET!!!!!)
------ This method is for WINDOWS ONLY! -------------
BIOS mod works great on Windows with the brightness-adjust slider.
As for manual control... It can probably be done on Windows, but you need to find the right tools. For discrete ATI you can use RWEverything to write to Embedded Controller, but I couldn't find anything that would let me make ACPI calls for Intel/ATI and Intel-only brightness control. It seems like Windows doesn't allow direct ACPI calls. For information: How issue ACPI calls, Called ACPI method from Windows, MSDN: ACPI Control Method IOCTLs
It may also be possible to write directly to the same place DSDT brightness method is writing to. It will require a lot of work, but it is possible.
-------------------------------------------------------
--------- This method is for LINUX ONLY! ---------------
I have also been working on some Linux mods for 3820TG:
- Yesterday, I figured out a way to manually set screen brightness. I can now set my brightness level to any level I want with no prior BIOS mod needed. All you need is acer_ec.pl (for writing to Embedded Controller, for ATI brightness) and acpi_call (for making calls to ACPI, when on Switchable (Intel/ATI) or Intel-only graphics)
When on Discrete the brightness can be set to the desired level by writing to the [0x84] EC byte. You can set brightness to 0x00-0x64 (0-100 in hexadecimal) -
What about control of right fan? .... It's still spinning, even ATI card is turned off
-
It is possible that your drivers are not working properly, so even when you are running on intel card your ATI card is still powered on (even though it is not in use) and therefore fan has to cool it.
Yeah, I have figured out the EC bytes for right fan. It is in 2nd post of this thread. But like I said, right fan should not spin if ATI card is powered down. -
You have to disable the ATI fan too.
It seems to be a secure function to switch on the right fan, if the left one doesn't run.
I have seen, the same effect with a locked CPU fan with FF. -
windows 7 64b sp1
newest drivers for ATI and Intel from acer.com
I know that on right side is HDD too, but i dont know how to turn it off in windows to find out if it is hdd noise
or
Just a Nick: how to disable ati fan ? -
To check the fan, use the little fire of a candle.
I'm using R&W everything, the registers are on the first page. -
OK i now checked it and VGA 0x98 FF ... its OFF ... then that horrible noise is hard disk .... is it time to buy SSD ?
-
Have downloaded ACFanControl (TPFanControl for Acer) from TPFanControl by troubadix.
Modified ini file to support 3820 (attached it if anybody interested). Same shee-, pardon me, issue: it craps BatteryBar's EC reading same way my app does.
I think, we need to change approach for FAN speed control, since correct working with EC from Windows looks a bit non-trivial (if entirely possible). On XP there was acpiec.sys driver but this is not working under Win 7.
Another possibility is to modify BIOS FAN speed tables, so BIOS will start FAN on higher temps. I know one man who did this for Lenovo. I've already contacted him, maybe he knows how to handle it with 3820.Attached Files:
-
-
OVERCLOCK ATI VBIOS EDIT
!!! TRY AT YOUR ON RISK !!!
1. open PhoenixTool.exe
2. open JM31119.WPH
3. click Advanced and add check "Allow user to modify other modules" and "No SLIC" in the lower right box
4. click go
5. a messagebox apear "You can now make manual alterations to any module in the DUMP directoy" dont click ok.
6. in RBE open %pathtoyourbios%\dump\OPROM01.ROM (HD5650=OPROM01.ROM HD6560=OPROM02.ROM)
7. alter your bios
8. click save (same name,overwrite)
9. on the PhoenixTool messagebox click OK
if you extract this new bios again you see that the settings are saved
EDIT3:
OK i flashed it and it seems to work
my ATI HD5650 runs default on 650/850 now after reboot
(beside that i set Tmin from default 45°C to 55°C but i dont know if it work)
STILL AT YOUT OWN RISK
howto flash: see first post under setion "Flash BIOS in DOS mode"
http://forum.notebookreview.com/acer/480992-acer-laptop-phoenix-bios-bios-mod-request.html
more to come ....
Tool to Insert/Replace SLIC in Phoenix / Insyde / Dell / EFI BIOSes
RBE - Radeon BIOS editorAttached Files:
-
-
Did you increase the voltage to 1.05V?
Acer Aspire TimelineX 3820TG mods/tweaks ONLY!
Discussion in 'Acer' started by prikolchik, Mar 16, 2011.