Laptop Dell Latitude D600
sites
- Debian Linux on the Dell Latitude D600
- Linux on the Dell Latitude D600
- Linux on Centrino(TM) Laptops and Notebooks
- [1] interesting for IrDA, Bluetooth & power management
- Dell support
- O2Micro SmartCard Reader
- Debian Linux on Dell Inspiron 600m
- Dell Latitude D600 / Inspiron 600m
modprobe i8k force=1
cf http://people.debian.org/~dz/i8k
cat /proc/i8k
Pour activer la sortie TV
atitvout pal atitvout -f t (pour la sorite S-video, TV) atitvout -f l (pour remettre le LCD) atitvout -f c (pour le CRT, à tester) atitvout -f detect
Il faut avoir booté avec la TV branchée sinon ça ne fonctionne pas.
Suspend-to-RAM
cf http://www.loria.fr/~thome/d600/
Ces notes sont tirées de mon expérience et d'un échange de mails avec Emmanuel Thomé.
J'ai utilisé un kernel 2.6.12-4 Debian et ai donc adapté qqs éléments:
J'ai utilisé le s3_late_bios_new.patch.gz
Si vous essayez s3_late_bios_radeon_new.patch, attention, tel quel il injecte le code dans la fonction radeonfb_pci_suspend au lieu de radeonfb_pci_resume!
Il faut le bootparam acpi_sleep=s3_late_bios
Voilà, le suspend-to-RAM fonctionne.
Et cela fonctionne aussi depuis X (version 4.3.0.1 Debian), en effet depuis la version 4.3.0.dfsg.1 un patch d'Emmanuel Thomé et Ole Rohne a été intégré (Closes: #234575)
Petit bémol: Il faut lors du resume appuyer sur une touche sinon il reste inactif qqpart entre le réveil du PCMCIA (Yenta) et le réveil du mini-PCI
Framebuffer
J'ai tout essayé, en vain, pas moyen d'avoir un fb actif qui ne foire pas au resume après le suspend.
Le symptome est toujours le meme: le PC est gelé, l'écran reste éteint.
Juste pour info j'ai essayé les bootparams video=radeonfb:off video=vesafb; video=vesafb:off video=radeonfb; acpi_sleep=s3_late_bios,s3_late_mode
Rien à faire, dès qu'il y a un vga=791 pour activer le fb, le resume plante.
Radeontool
Le radeontool fonctionne parfaitement (éteint l'écran)
Apparemment le dernier xorg (6.8.2) semble avoir appris à faire power-off sur ces cartes video-là ; en tout cas xset dpms force off éteint la lumière, c'est pas mal. Pour info seulement, car un outil non-x comme radeontool a son intérêt de toute façon.
Sur mon XFree version 4.3.0.dfsg.1-14 (Debian) xset dpms force off fonctionne aussi.
Qqs devices récalcitrants
- Le module de la carte réseau tg3 est déchargé avant resume et rechargé après.
- Le touchpad et le petit joystick ne fonctionnaient plus après un resume mais bien une souris externe USB (l'USB se réveille correctement et ses éléments sont redécouverts)
En compilant psmouse en module et en le déchargeant avant resume et rechargeant après cela fonctionne.
Apparemment c'est un problème connu dans les versions courantes 2.6.11 et 2.6.12, cf les bugreports Redhat #160733 et #161546 - Le key-repeat du clavier posait problème après un resume.
Il semble que cela va mieux en mettant atkbd en module mais il ne fait pas le décharger sinon plus moyen d'aider le resume en pressant une touche!
Pour pouvoir mettre atkbd en module:
General setup -> Configure standard kernel features
Device Drivers -> Input device support -> Keyboards -> AT keyboard
(rem: i8042 pourrait aussi etre mis en module)
ACPI handler
/etc/acpi/actions/acpi_handler.pl a été fortement adapté suite à ces remarques et aux particularités de la Debian:
- Debian ignore les fichiers avec un "." dans /etc/acpi/events, j'ai donc renommé trap_all.conf en trap_all
- reloader les modules tels tg3 et psmouse au resume
- appeler les scripts /etc/init.d/xxx start/stop car il n'y a pas de /sbin/service sur Debian
- changer /proc/acpi/wakeup_devices par /proc/acpi/wakeup
Apparemment le nom a changé et il n'y a plus besoin de patch pour l'avoir. - enlever updfstab qui n'existe pas sur Debian.
- ajouter un test sur la présence du bootparam acpi_sleep=s3_late_bios pour éviter les crashes si on boot sur un autre kernel.
Les logs iront dans /var/log/acpid
Todo
J'ai trouve l'erreur suivante lors de chaque resume dans les logs kernel:
Stopping tasks: ========================================| Back to C! Debug: sleeping function called from invalid context at mm/slab.c:2093 in_atomic():0, irqs_disabled():1 [__might_sleep+166/176] __might_sleep+0xa6/0xb0 [kmem_cache_alloc+109/112] kmem_cache_alloc+0x6d/0x70 [acpi_pci_link_set+72/417] acpi_pci_link_set+0x48/0x1a1 [acpi_pci_link_resume+28/34] acpi_pci_link_resume+0x1c/0x22 [irqrouter_resume+27/48] irqrouter_resume+0x1b/0x30 [irqrouter_resume+0/48] irqrouter_resume+0x0/0x30 [sysdev_resume+259/264] sysdev_resume+0x103/0x108 [device_power_up+5/10] device_power_up+0x5/0xa [suspend_enter+54/96] suspend_enter+0x36/0x60 [enter_state+70/112] enter_state+0x46/0x70 [acpi_suspend+42/59] acpi_suspend+0x2a/0x3b [copy_from_user+108/176] copy_from_user+0x6c/0xb0 [acpi_system_write_sleep+105/125] acpi_system_write_sleep+0x69/0x7d [vfs_write+229/352] vfs_write+0xe5/0x160 [sys_write+81/128] sys_write+0x51/0x80 [syscall_call+7/11] syscall_call+0x7/0xb
Visiblement c'est facile de faire disparaitre le warning mais ce n'est pas de la tarte pour faire ça proprement.
On peut espérer que ce soit résolu après 2.6.13-rc5, cf le thread http://bugzilla.kernel.org/show_bug.cgi?id=3469
Comme dit Emmanuel: Ce qui constituerait une raison pour rester calme et attendre de voir que ça se stabilise un peu ; ça n'a pas toujours été comme ça, c'est pas tous les jours qu'on farfouille dans le code du routeur d'irq, encore heureux.
Si ça va dans la direction d'un assainissement de la situation, j'ose
espérer qu'on pourra en conclure que l'ensemble des manips à faire pour que le S3 marche se restreint ; Patience donc.
En résumé
Pour un kernel 2.6.12-4 Debian:
- patch s3_late_bios_new.patch.gz ou mon patch s3_late_bios_new.2.6.12.debian.patch
- mettre psmouse et stkbd en module, ne pas utiliser de fb du tout (cf mon .config )
- bootparam acpi_sleep=s3_late_bios
- un version modifiée de acpi_events.tgz, acpi_handler.pl, radeontool-1.0.tar.gz ou directement mon ensemble compilé et modifié pour Debian acpi_events.tgz
Modem
- Installer ALSA pour Intel8x0
- apt-get install sl-modem-daemon
Multimedia keys
- apt-get install lineakd lineak-defaultplugin lineak-kdeplugins lineak-xosdplugin
- (as user) lineakd -c DELL-D600
- edit ~/.lineak/lineakd.conf
AudioLowerVolume = KMIX_VOLDOWN AudioMute = KMIX_MUTE AudioRaiseVolume = KMIX_VOLUP
- To launch the daemon at each KDE login:
- Create /home/<user>/.kde/Autostart/lineak.desktop with the following content:
[Desktop Entry] Name=Start Lineakd Exec=/usr/bin/lineakd Type=Application Terminal=0
But we have extra keys: cdrom eject, wifi, battery. Try while
tail -f /var/log/messages
- battery:
atkbd.c: Unknown key pressed (translated set 2, code 0x87 on isa0060/serio0). atkbd.c: Use 'setkeycodes e007 <keycode>' to make it known.
- wifi:
atkbd.c: Unknown key pressed (translated set 2, code 0x88 on isa0060/serio0). atkbd.c: Use 'setkeycodes e008 <keycode>' to make it known.
- eject:
atkbd.c: Unknown key pressed (translated set 2, code 0x89 on isa0060/serio0). atkbd.c: Use 'setkeycodes e009 <keycode>' to make it known.
evtest
- battery:
Event: time.270011, type 4 (?), code 4 (?), value 135
- wifi:
Event: time.930135, type 4 (?), code 4 (?), value 136
- eject:
Event: time.374029, type 4 (?), code 4 (?), value 137
You should try for keycode ideas, apparently works better if < 127 (but > 83)
Check if keycodes you attend to bind to those scancodes are not yet used:
for ((i=80;i<256;i++));do getkeycodes|grep -q $i || echo -n "$i ";done
Then assign them:
setkeycodes e008 123 e009 122
Then check what is the corresponding code with xev
If xev doesn't react or produces uninterrupted output, try another keycode
Those are working for me
122->209
123->210
I could not get one more free keycode working properly so I reused 125 for e007 which was already used by e05B, so far it seems ok.
I added the bindings to /etc/init.d/bootmisc.sh
# Add some scancode bindings for keys eject,wifi and battery setkeycodes e007 125 e008 123 e009 122
Create ~/.lineak/lineakkb.def
[DELL-D600] brandname = "Dell" modelname = "D600" [KEYS] AudioLowerVolume = 174 AudioRaiseVolume = 176 AudioMute = 160 Eject = 209 # keycode 122 # Battery = cannot find another free keycode working fine Wireless = 210 # keycode 123 [END KEYS] [END DELL-D600]
And now we can augment our ~/.lineak/lineakd.conf
Eject = EAK_OPEN_TRAY Wireless = sudo ifup eth;sudo kwifimanager # Battery =
Interesting links: