Toshiba L735-116 et reconnaissance de la batterie sous Linux

La batterie de mon portable n'est pas reconnue par Linux, ce qui veut dire que linux ne me donne pas d'indicateur de charge quand je suis débranché.

Jusqu'à présent je devais à chaque changement de noyau le recompiler avec un patch spécial. J'ai trouvé hier une méthode complémentaire sur un blog qui m'évite d'avoir à recompiler le noyau, je la documente donc ici en français, pour moi-même, mais aussi pour ceux qui auraient le même problème.

Mon portable est un Toshiba L735-116 mais de nombreux autres modèles de Toshiba sont affectés, donc si vous avez le même problème sur votre portable, rien ne vous empêche d'essayer, le geek qui a analysé et trouvé la solution au problème a lui un L650.

Les informations que je synthétise ici en français sont issues de ces deux billets :

Un grand merci donc à leurs auteurs Faheem et Michael Kuron pour avoir partagé leurs connaissances et apporté une solution.

Typiquement, vous savez que vous n'avez pas de batterie reconnue avec ces commandes :

~$ cat /proc/acpi/battery/BAT1/*
present:                 no
present:                 no
present:                 no

Les étapes à suivre sont les suivantes :

  1. ouvrir un terminal et passer en root (sudo -s)
  2. cd /boot/
  3. On récupère le tableau DSDT de la machine
    cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
  4. on le désassemble
    iasl -d dsdt.dat
  5. on ouvre le fichier désassemblé avec son éditeur de texte favori (gedit, geany, vi...)
    geany dsdt.dsl
  6. on cherche la ligne :
    OperationRegion (EMEM, SystemMemory, 0xFF808001, 0xFF)
    et on la remplace par
    OperationRegion (EMEM, EmbeddedControl, 0x00, 0xFF)
  7. On enregistre le fichier
  8. On lance la commande pour le recompiler en un fichier dsdt.aml (ça créera aussi un fichier dsdt.hex mais on s'en servira pas)
    iasl -tc dsdt.dsl
  9. On récupère ce script 01_acpi.txt et on l'enregistre dans le dossier /etc/grub.d/ sous le nom 01_acpi (on enlève l'extension .txt)
  10. On donne à ce script les droits d'exécution
    chmod +x /etc/grub.d/01_acpi
  11. On lance la commande
    update-grub2
  12. On redémarre et normalement c'est bon :)

Pour info, ce bug est déjà signalé dans le bugzilla du kernel depuis deux ans et n'est pas réglé dans le noyau 3.2 que j'utilise (Bug 15707 - can not get AC/DC status).

Vus : 1737
Publié par Pascal Chevrel : 20