Linux AT Whoopy.it
< Author: Iacopo_I - 09 Jun 2005 >

Problem with ACPI for Acer Laptops 1680 series (1681WLCi) DEFINITIVELY RESOLVED

In the past week I have worked a lot to try to resolve some problems regarding the use of the Power Management on my laptop. Thanks to google I find a lot of useful information but I was unable to find a real definitive solution for this kind of laptop.
The problem are:
    1- This kind of laptops doesn't support APM (Advanced Power Management) but only ACPI (Advanced Configuration and Power Interface)
    2- Today many company build their BIOS only supporting Microsoft OS, so they are incompatible with some standard used by every other OS
    3- I can't find anything in the directories /proc/acpi/ac_adapter and /proc/acpi/battery so I was unable to see the status of my battery and I can't implement the functionality of ACPI on my system
    4- The DSDT (se below) resulted to be bugged, I had to correct it
    5- There is a missing ECDT (see below) on my system so I have had to patch the kernel to resolve this problem
    6- Acer Laptops uses a so called Smart Batteries that have a different way to work

INTRO

What is DSDT?
Differentiated System Description Table (DSDT), from the ACPI Spec we can have this definition: "An OEM must supply a DSDT to an ACPI-compatible OS. The DSDT contains the Differentiated Definition Block, which supplies the implementation and configuration information about the base system. The OS always inserts the DSDT information into the ACPI Namespace at system boot time and never removes it."
DSDT describes simply the hardware configuration of your system. It describe all the functionality of ACPI and the devices that use it. Every OS can extract it from the BIOS of your sytem.

What is ACPI?
Advanced Configuration and Power Interface (ACPI) is the successor to APM, which places the responsibility of power management away from the BIOS and into the hands of the operating system. ACPI Linux is newer than APM Linux, more flexible in responding to power management events, has seen much more development as of late, and as a result of all this is prone to its own share of bugs from time to time.
ACPI site at sourceforge - http://sourceforge.net/projects/acpi
acpi specification - http://www.acpi.info/index.html

What is a ECDT?
The ECDT (Embedded Control Description Table) is used to provide some minimal information about the Embedded Controller to the ACPI drivers before the Embedded Controller region has actually been parsed from the DSDT.

Disclaimer
This document is not an official one, I have resolved my problem following these steps but I don't guarantee anithing for you. Use this document as an example and follow these instructions only if you know what you are doing. If you want to try please conseder that you can broke your system. For official assistance please contact your laptop constructors of the official ACPI developers. I describe only the problem i found, I corrected them based on what I have found on internet, I can't be sure everything is ok. Be careful!!

Tested System
I use Suse 9.3 Pro with its original kernel. But I think that with the appropriate modifications you can apply this technique to other system
My laptop is Acer Aspire 1681WLCi, I'm not sure but I think for 1680 series is the same
I have the version 20050513 of the Intel's iasl compiler
 

FIX BROKEN DSDT

1) Download the latest sbs-cm tgz-archive from http://sourceforge.net/projects/sbs-linux

2) Download the Intel's iasl compiler from http://developer.intel.com/technology/iapc/acpi/downloads.htm

3) Install iasl compiler

# tar xfz acpica-unix-20050513.tar.gz
# cd acpica-unix-20050513/compiler
# make


If everything is fine, you should have a binary file called "iasl" in this directory. Copy it anywhere to your $PATH or remind where it's located.

4) Extract the current DSDT from your running kernel

#cat /proc/acpi/dsdt > dsdt.dat

This will give you a file, dsdt.dat that contains your current compiled dsdt. Now we have to disassemble it so we can recompile it.

5) Disassemble the DSDT

#PATH_TO_IASL/iasl -d dsdt.dat

This will create a file called dsdt.dsl, which contains the disassembled DSDT. You are able to see it with common text editor.

6) Recompile the disassembled DSDT

#PATH_TO_IASL/iasl -tc dsdt.dsl

If it works it will create two files, dsdt.hex and DSDT.aml. But probably if you are following these steps it doesn't work properly, and the compiler stops with some errors.

You can find some fixed dsdt at this address:
    -  http://acpi.sourceforge.net/dsdt/view.php?id=140

I resolve my problems and I made a tar.gz file with the fixed DSDT. There you can find it fixed for the other steps of this document with two patches (see below). To have it please download:
    -
dsdtAspire1680.tar.gz

To solve other kind of problems have a look at:
    - www.google.it
    -
http://forums.gentoo.org/viewtopic.php?t=122145
    - http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt

7) Patch your fixed DSDT:
At this address https://sourceforge.net/projects/sbs-linux/  you can find the SourceForge project dedicate to Smart Battery System (SBS). It works to solve the problems of that laptops that use this kind of battery. There you can find the official patch, but it doesn't work on 1680 series if you don't modify before the dsdt. In the file dsdtAspire1680.tar.gz you can find the work already done, you have only to untar the archive and follow next steps.

If you want to patch your dsdt follow these simple steps:

7a) Patch dsdt.dsl with the patches from sbs-cm (verify, that all .asl files and the diff file of your choice is in the same directory as dsdt.dsl)

# cd PATH_TO_PATCH_AND_DSDT.DSL
# patch <acer-tm4xxx-sbs-cm.diff
   patching file dsdt.dsl
#


7b) Compile the modified dsdt.dsl with iasl - Follow the step 6

8) Add the fixed DSDT into the kernel, there are several ways to follow to do this work:

    If you are using SuSe 9.3 there are non problems
        8a) copy the compiled DSDT.aml file e.g. to /etc
        8b) add the path pointing to e.g. /etc/DSDT.aml to /etc/sysconfig/kernel
                ACPI_DSDT="/etc/DSDT.aml"

    If you are not using Suse visit http://forums.gentoo.org/viewtopic.php?t=122145  on this forum you can find at chapter 9 some useful ways to follow.

9) Patch your kernel source code:
This kind of Laptops has another problem over the bugged DSDT, there is a missing ECDT. The ECDT is used to provide some minimal information about the Embedded Controller to the ACPI drivers before the Embedded Controller region has actually been parsed from the DSDT. This is frequently necessary before initializing the battery and ac adapter, so if you have errors in dmesg from the battery, adapter or EmbeddedControl, the ECDT is the likely culprit. The problem was that after booting, my /proc/acpi/ac_adapter and /proc/acpi/battery directories were empty.
To resolve this problem there is a patch at this address http://bugzilla.kernel.org/attachment.cgi?id=1690&action=view. This patch restore the missing ECDT-related functionality. It may be applied to both the 2.4 and 2.6 kernel source.
If you are using Suse 9.3 it doesn't work, because the sources file name change, but the code is the same. In the file acpi_patch.tar.gz you can find all the corrected files you need, you have only to copy them into the appropriate directory of your system (after a back-up of existing files!! - Naturally! ;P ).
I don't have the knowledge of how to make a patch, so I include in the tar archive a file called "differences.txt". It is an approximation of a patch, I hope someone is able to build one and send it to me.
 

Download: acpi_patch.tar.gz
Files to modify:
#################################

1) PATH_TO_KERNEL/drivers/acpi/ec.c
2) PATH_TO_KERNEL/drivers/acpi/events/evregion.c
3) PATH_TO_KERNEL/drivers/acpi/executer/exregion.c
4) PATH_TO_KERNEL/drivers/acpi/utilities/utglobal.c
5) PATH_TO_KERNEL/include/acpi/acglobal.h
6) PATH_TO_KERNEL/include/acpi/acinterp.h

Probably you have to change the "PATH_TO_KERNEL" with "/usr/src/linux", but is better that you follow your system documentation.

 

10) Make sure you followed the steps 1, 2, 3, 4, 5, 6, 7, 8, 9

11) Recompile your kernel. If you don't know how to do please refer to an official guide for your system. Basic steps are:
    11a) cd /usr/src/linux            <- directory of your sources
    11b) make menuconfig        <- to configure the parameters of your kernel
    11c) make                            <- built
    11d) make modules_install        <- install modules
    11e) make install                    <- install kernel

12) Reboot

13) To verify:
    - look at the directories /proc/acpi/ac_adapter and /proc/acpi/battery and see if they contain something
    - dmesg |grep -i acpi      <- to see if there are errors

 

Links:
http://www.whoopy.it/linux/ - This document
http://forums.gentoo.org/viewtopic.php?t=122145 - HOWTO: Fix Common ACPI Problems (DSDT, ECDT, etc.)
http://lists.suse.com/archive/suse-laptop/2005-Mar/0108.html - [suse-laptop mailing list] Re: [ACPI] acpi related problem on ACER TM 4002WLMi running SuSE 9.2
https://sourceforge.net/projects/sbs-linux/ - SBS SouceForge project home page
http://acpi.sourceforge.net/ - ACPI SourgeForge Project home page
http://www.acpi.info/ - ACPI official site
http://www.renninger.de/powersave/  - Powersave Documentation / HOWTO

 

<back>
 

Statistiche web e counter web