# ACPI: Battery Slot [BAT1] (battery absent)

## __Ankh__

Buenas. No soy nuevo, ocurre que perdí el correo asociado a mi antiguo y deshabilitado usuario: chonzow. 

Como sea, les cuento por qué vine. Hace ya un tiempo me desquicia no entender porqué Linux no detecta mi batería. Fucking linux, i love it. 

Uno del os problemas es que no conozco el modelo exacto de la batería como para deducir cual de todos los drivers del src de kernel tengo que compilar. Esto al margen que mas abajo lshw tira uno datos sobre este punto. El segundo inconveniente es que es posible que no sea un problema de drivers sino de ACPI.

He pensando en cambiar la batería, actualizar la bios, sustituirla, de ser posible, por un coreboot. Pero lo cierto es que no hice nada de eso porque me gustaría estar mas seguro. Lo único que intenté fue compilar y recompilar el kernel sin ningún criterio mas que tocar cosas de ACPI y drivers de batería. 

Considero que estos datos deberían aportar algo: 

Maquina: Toshiba S645-4007

```
# uname -a

Linux MyBox 2.6.36-zen1 #12 ZEN SMP PREEMPT Sat Feb 5 05:12:47 UYST 2011 x86_64 Intel(R) Core(TM) i3 CPU M 350 @ 2.27GHz GenuineIntel GNU/Linux
```

Zen1 es por Zen Kernel. El problema es el mismo para las gentoo-sources, y tambièn para el kernel de fedora, slackware y openbsd. 

```
# dmesg | grep -i acpi

   ....

ACPI: ACPI bus type pnp unregistered

ACPI: AC Adapter [ACAD] (on-line)

ACPI: Power Button [PWRB]

ACPI: Lid Switch [LID]

ACPI: Power Button [PWRF]

ACPI: acpi_idle yielding to intel_idle

ACPI: Battery Slot [BAT1] (battery absent)

acpi device:01: registered as cooling_device4

ACPI: Video Device [GFX0] (multi-head: yes  rom: no  post: no)

ACPI: resource 0000:00:1f.3 [io  0x5000-0x501f] conflicts with ACPI region SMBI [io  0x5000-0x500f window disabled]

ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
```

Llama mi atención el problema de SMBI. Pero no hace mas que eso, llamar mi atención. 

```
# cat /usr/src/linux/.config | egrep -i "^[^#](.*)acpi"

CONFIG_X86_64_ACPI_NUMA=y

CONFIG_ACPI=y

CONFIG_ACPI_SLEEP=y

CONFIG_ACPI_PROCFS=y

CONFIG_ACPI_PROCFS_POWER=y

CONFIG_ACPI_POWER_METER=y

CONFIG_ACPI_SYSFS_POWER=y

CONFIG_ACPI_PROC_EVENT=y

CONFIG_ACPI_AC=y

CONFIG_ACPI_BATTERY=y

CONFIG_ACPI_BUTTON=y

CONFIG_ACPI_VIDEO=y

CONFIG_ACPI_FAN=y

CONFIG_ACPI_PROCESSOR=y

CONFIG_ACPI_HOTPLUG_CPU=y

CONFIG_ACPI_THERMAL=y

CONFIG_ACPI_NUMA=y

CONFIG_ACPI_BLACKLIST_YEAR=0

CONFIG_ACPI_CONTAINER=y

CONFIG_ACPI_SBS=y

CONFIG_X86_ACPI_CPUFREQ=y

CONFIG_PNPACPI=y

CONFIG_ATA_ACPI=y
```

```
# cat /usr/src/linux/.config | egrep -i "^[^#](.*)batt"

CONFIG_ACPI_BATTERY=y
```

```
#lshw

   ....

  *-power UNCLAIMED

       description: OEM_Define1

       product: OEM_Define5

       vendor: OEM_Define2

       physical id: 1

       version: OEM_Define6

       serial: OEM_Define3

       capacity: 75mWh

  *-battery

       description: Lithium Ion Battery

       product: CRB Battery 0

       vendor: -Virtual Battery 0-

       physical id: 2

       version: 10/12/2007

       serial: Battery 0

       slot: Fake
```

```
 # lspci 

00:00.0 Host bridge: Intel Corporation Arrandale DRAM Controller (rev 02)

00:02.0 VGA compatible controller: Intel Corporation Arrandale Integrated Graphics Controller (rev 02)

00:16.0 Communication controller: Intel Corporation Ibex Peak HECI Controller (rev 06)

00:1a.0 USB Controller: Intel Corporation Ibex Peak USB2 Enhanced Host Controller (rev 05)

00:1b.0 Audio device: Intel Corporation Ibex Peak High Definition Audio (rev 05)

00:1c.0 PCI bridge: Intel Corporation Ibex Peak PCI Express Root Port 1 (rev 05)

00:1c.4 PCI bridge: Intel Corporation Ibex Peak PCI Express Root Port 5 (rev 05)

00:1c.5 PCI bridge: Intel Corporation Ibex Peak PCI Express Root Port 6 (rev 05)

00:1d.0 USB Controller: Intel Corporation Ibex Peak USB2 Enhanced Host Controller (rev 05)

00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev a5)

00:1f.0 ISA bridge: Intel Corporation Ibex Peak LPC Interface Controller (rev 05)

00:1f.2 SATA controller: Intel Corporation Ibex Peak 4 port SATA AHCI Controller (rev 05)

00:1f.3 SMBus: Intel Corporation Ibex Peak SMBus Controller (rev 05)

00:1f.6 Signal processing controller: Intel Corporation Ibex Peak Thermal Subsystem (rev 05)

02:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device 8172 (rev 10)

03:00.0 Ethernet controller: Attansic Technology Corp. Device 1073 (rev c0)

ff:00.0 Host bridge: Intel Corporation QuickPath Architecture Generic Non-core Registers (rev 02)

ff:00.1 Host bridge: Intel Corporation QuickPath Architecture System Address Decoder (rev 02)

ff:02.0 Host bridge: Intel Corporation QPI Link 0 (rev 02)

ff:02.1 Host bridge: Intel Corporation QPI Physical 0 (rev 02)

ff:02.2 Host bridge: Intel Corporation Device 2d12 (rev 02)

ff:02.3 Host bridge: Intel Corporation Device 2d13 (rev 02)
```

Acepto todo tipo de sugerencias. Incluso sobre comprar otra notebook.

----------

## edgar_uriel84

Si pones el comando acpi_listen y quitas el adaptador de corriente lo detecta? no te dice que si hay batería?

----------

## __Ankh__

Al conectar y desconectar el adaptador de corriente la salida de acpi_listen es vacía. Sin embargo si responde a otros eventos como bajar y levantar el monitor.Last edited by __Ankh__ on Fri Feb 18, 2011 2:37 pm; edited 1 time in total

----------

## agdg

Tal vez es una pregunta tonta pero... ¿Tienes compilado el soporte ACPI para la batería?

```
Power management and ACPI options  --->  

 [*] ACPI (Advanced Configuration and Power Interface) Support  --->

  < >   Battery  

  < >   Smart Battery System   
```

```
agd-desktop linux # grep -i  CONFIG_ACPI_BATTERY .config

# CONFIG_ACPI_BATTERY is not set

agd-desktop linux # grep -i  CONFIG_ACPI_SBS .config

# CONFIG_ACPI_SBS is not set
```

----------

## __Ankh__

Si.  De hecho lo puse al comienzo del hilo:

```
# cat /usr/src/linux/.config | egrep -i "^[^#](.*)batt" 

CONFIG_ACPI_BATTERY=y
```

Así tengo la config del ACPI:

```

 --- ACPI (Advanced Configuration and Power Interface) Support                           

  │ │                                            [*]   Deprecated /proc/acpi files                       

  │ │                                            [*]   Deprecated power /proc/acpi directories    

  │ │                                            <*>   ACPI 4.0 power meter                            

  │ │                                            [*]   Future power /sys interface                        

  │ │                                            < >   EC read/write access through /sys/kernel/debug/ec 

  │ │                                            [*]   Deprecated /proc/acpi/event support                       

  │ │                                            <*>   AC Adapter                                                         

  │ │                                            <*>   Battery                                                               

  │ │                                            -*-   Button                                                                  

  │ │                                            -*-   Video                                                                   

  │ │                                            <*>   Fan                                                                    

  │ │                                            [ ]   Dock                                                                    

  │ │                                            <*>   Processor                                                          

  │ │                                            < >     Processor Aggregator                                        

  │ │                                            <*>     Thermal Zone                                                  

  │ │                                            -*-   NUMA support                                                      

  │ │                                            [ ]   Debug Statements                                                

  │ │                                            < >   PCI slot detection driver                                      

  │ │                                            -*-   Container and Module Devices (EXPERIMENTAL)     

  │ │                                            <*>   Smart Battery System                                        

  │ │                                            < >   Hardware Error Device                                        

  │ │                                            [ ]   ACPI Platform Error Interface (APEI)          
```

----------

## agdg

Efectivamente era una pregunta tonta, porque lo tenías puesto en el primer post.

Prueba a compilar, si no lo tienes ya compilado:

```
  ┌──────────────────────────── Search Results ─────────────────────────────┐

  │ Symbol: ACPI_TOSHIBA [=n]                                               │  

  │ Type  : tristate                                                        │  

  │ Prompt: Toshiba Laptop Extras                                           │  

  │   Defined at drivers/platform/x86/Kconfig:516                           │  

  │   Depends on: X86 [=y] && X86_PLATFORM_DEVICES [=n] && ACPI [=n] && BAC │  

  │   Location:                                                             │  

  │     -> Device Drivers                                                   │  

  │       -> X86 Platform Specific Device Drivers (X86_PLATFORM_DEVICES [=n │  

  │   Selects: LEDS_CLASS [=n] && NEW_LEDS [=n] && INPUT_POLLDEV [=y] && IN │  

  │                                                                         │  

  │                                                                         │  

  │ Symbol: TOSHIBA [=n]                                                    │  

  │ Type  : tristate                                                        │  

  │ Prompt: Toshiba Laptop support                                          │  

  │   Defined at arch/x86/Kconfig:901                                       │  

  │   Depends on: X86_32 [=n]                                               │  

  │   Location:                                                             │  

  │     -> Processor type and features                                      │
```

----------

## __Ankh__

Bueno, recuerdo haber activado la primera. Pero fue un manotazo de ahogado puesto había leído la documentación:

 *Quote:*   

> Please note: This driver is only intended to provide the extra support for ACPI functionality specific to Toshiba laptops. In other words, this driver is not intended to cover standard ACPI functions such as shutdown, reboot, suspend, hibernate, battery info, etc. Such generic functions are being supported by the ACPI4Linux project and the Software Suspend 2 project. 

 

Es decir que es para funciones extras que no tienen que ver con la batería. 

La segunda pide el simbolo x86_32 y yo uso Gentoo Amd64.

----------

## __Ankh__

 *__Ankh__ wrote:*   

> Buenas. No soy nuevo, ocurre que perdí el correo asociado a mi antiguo y deshabilitado usuario: chonzow. 
> 
> Como sea, les cuento por qué vine. Hace ya un tiempo me desquicia no entender porqué Linux no detecta mi batería. Fucking linux, i love it. 
> 
> Uno del os problemas es que no conozco el modelo exacto de la batería como para deducir cual de todos los drivers del src de kernel tengo que compilar. Esto al margen que mas abajo lshw tira uno datos sobre este punto. El segundo inconveniente es que es posible que no sea un problema de drivers sino de ACPI.
> ...

 

Al final, me compré otra notebook y esa fue mi solucion.  Pero hace poco volví a usar la anterior y conseguí arreglar el problema.

Bastó con modificar el DSDT y decirle al kernel que los use.

```
GentooBox ~ # cat /sys/firmware/acpi/tables/DSDT > DSDT.dat

GentooBox ~ # iasl -d DSDT.dat  #Decompilo

GentooBox ~ # cp DSDT.dsl DSDT-old.dsl #Una copia para evaluar las diferencias.

GentooBox ~ # vim DSDT.dsl #Edito

GentooBox ~ # diff DSDT-old.dsl DSDT.dsl 

5971c5971

<                     OperationRegion (EMEM, SystemMemory, 0xFF808001, 0xFF)

---

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

GentooBox ~ # iasl -tc DSDT.dsl #Compilo las moficaciones.

```

Esto me genera dos archivos, DSDT.hex y DSDT.aml

El .hex se puede pasar en la configuración del kernel que se incluya al compilar el mismo. El aml se puede pasar como argumento del kernel al bootear. Yo opté por usar el .hex, ya que lo otro es en realidad más complicado.

```
GentooBox ~ # cp DSDT.hex /usr/src/linux/include
```

Modifico la configuración del kernel para que quede así:

```

GentooBox ~ # cat /usr/src/linux/.config | grep DSDT.hex

CONFIG_ACPI_CUSTOM_DSDT_FILE="DSDT.hex"

```

Ahora solo queda recompilar e instalar el kernel, y al rebootear se solucionan todos los problemas.

Espero que a alguien le sea útil.

----------

