Tuesday, April 30, 2013

How to Solve Toshiba Satellite L655 Battery not Shown in Linux

Toshiba Satellite L655
Battery icon is not there when Ubuntu or Fedora is installed on Toshiba Satellite L655. Here is the way to show the battery.

Step 1: Take a copy of current Differentiated System Description Table as follows.

sudo cat /sys/firmware/acpi/tables/DSDT > DSDT.dat


Step 2: De-assemble it with "iasl -d DSDT.dat".

[kasun@localhost ~]$ iasl -d DSDT.dat

Intel ACPI Component Architecture
AML Disassembler version 20100528 [Oct 17 2012]
Copyright (c) 2000 - 2010 Intel Corporation
Supports ACPI Specification Revision 4.0a

Loading Acpi table from file DSDT.dat
Acpi table [DSDT] successfully installed and loaded
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)
................................................................................
Parsing completed

Found 5 external control methods, reparsing with new information
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)
................................................................................
Parsing completed
Disassembly completed, written to "DSDT.dsl"
[kasun@localhost ~]$ 

Step 3: Search for following line and edit as follows. Do not do copy and paste which give you compilation error of non ASCII characters.

Search for:
OperationRegion (EMEM, SystemMemory, 0xFF808001, 0xFF)

Change in to:

OperationRegion (EMEM, EmbeddedControl, 0x00, 0xFF)



Step 4: Compile the de-assembled file with "iasl -tc DSDT.dsl".

[kasun@localhost ~]$ iasl -tc DSDT.dsl

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20100528 [Oct 17 2012]
Copyright (c) 2000 - 2010 Intel Corporation
Supports ACPI Specification Revision 4.0a

DSDT.dsl  2656:                     0x00000000,         // Length
Error    4122 -                              ^ Invalid combination of Length and Min/Max fixed flags

DSDT.dsl  2663:                     0x00000000,         // Length
Error    4122 -                              ^ Invalid combination of Length and Min/Max fixed flags

DSDT.dsl  2918:             Method (CBRL, 0, NotSerialized)
Warning  1088 -                        ^ Not all control paths return a value (CBRL)

DSDT.dsl  2980:                 Name (_T_0, Zero)
Remark   5111 -                          ^ Use of compiler reserved name (_T_0)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                              Output truncated. 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DSDT.dsl 12889:             Method (BTST, 0, NotSerialized)
Warning  1088 -                        ^ Not all control paths return a value (BTST)

ASL Input:  DSDT.dsl - 12992 lines, 476098 bytes, 5451 keywords
Compilation complete. 2 Errors, 3 Warnings, 32 Remarks, 7 Optimizations

Step 5: If you get "Invalid combination of Length and Min/Max fixed flags" compilation error like follows go to the line in vim and find the set the Length as (Range Maximum - Range Minimum) + 1 in hex.

Error 1 

DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
    0x00000000,         // Granularity
    0x00000000,         // Range Minimum
    0xFEAFFFFF,         // Range Maximum
    0x00000000,         // Translation Offset
    0x00000000,         // Length

Calculated Length is (0xFEAFFFFF - 0x00000000 +1) = 0xFEB00000

Corrected Value:

DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
    0x00000000,         // Granularity
    0x00000000,         // Range Minimum
    0xFEAFFFFF,         // Range Maximum
    0x00000000,         // Translation Offset
    0xFEB00000,         // Length

Error 2 

DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
    0x00000000,         // Granularity
    0xFED40000,         // Range Minimum
    0xFED44FFF,         // Range Maximum
    0x00000000,         // Translation Offset
    0x00000000,         // Length

Calculated Length is (0xFED44FFF - 0xFED40000 +1) = 0x00005000

Corrected Value:

DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
    0x00000000,         // Granularity
    0xFED40000,         // Range Minimum
    0xFED44FFF,         // Range Maximum
    0x00000000,         // Translation Offset
    0x00005000,         // Length

Step 6: Compile the de-assembled file with out errors.

[kasun@localhost ~]$ iasl -d DSDT.dat

Step 7: Compilation will generate DSDT.aml file. Copy it to /boot/ as follows with name of dsdt.aml.

[kasun@localhost ~]$ sudo cp DSDT.aml /boot/dsdt.aml

Step 8: Edit /boot/grub2/grub.cfg and find the top menu entry as follows.

menuentry 'Fedora (3.8.9-200.fc18.x86_64)' --class fedora --class gnu-linux --class gnu  {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1  

And add line "acpi ($root)/dsdt.aml" for fedora.

menuentry 'Fedora (3.8.9-200.fc18.x86_64)' --class fedora --class gnu-linux --class gnu   {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
        acpi ($root)/dsdt.aml
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1  

Note:  Add line "acpi /boot/dsdt.aml" for Ubuntu.

Step 9: Reboot and have fun.

Image Credits: http://us.toshiba.com/computers/laptops/satellite/l650/l655-s5150/

No comments: