L’audio ne fonctionnait à nouveau plus correctement , malgré shutdown , reboot , et plus d’une minute avec bouton power enfoncé .
sudo /usr/local/bin//speaker.sh
[sudo] Mot de passe de stefan :
Configuring amp at address 0x38 on i2c-17
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Done configuring amp at 0x38
Configuring amp at address 0x3e on i2c-17
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Error: Write failed
Done configuring amp at 0x3e
~ 6s
❯ cat /usr/local/bin//speaker.sh
#!/bin/bash
i2c_bus=17
amp_addresses=(0x38 0x3e)
for i2c_addr in "${amp_addresses[@]}"; do
echo "Configuring amp at address $i2c_addr on i2c-$i2c_bus"
i2cset -f -y $i2c_bus $i2c_addr 0x00 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x7f 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x01 0x01
i2cset -f -y $i2c_bus $i2c_addr 0x0e 0xc4
i2cset -f -y $i2c_bus $i2c_addr 0x0f 0x40
i2cset -f -y $i2c_bus $i2c_addr 0x5c 0xd9
i2cset -f -y $i2c_bus $i2c_addr 0x60 0x10
i2cset -f -y $i2c_bus $i2c_addr 0x0a 0x2e
i2cset -f -y $i2c_bus $i2c_addr 0x0d 0x01
i2cset -f -y $i2c_bus $i2c_addr 0x16 0x40
i2cset -f -y $i2c_bus $i2c_addr 0x00 0x01
i2cset -f -y $i2c_bus $i2c_addr 0x17 0xc8
i2cset -f -y $i2c_bus $i2c_addr 0x00 0x04
i2cset -f -y $i2c_bus $i2c_addr 0x30 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x31 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x32 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x33 0x01
i2cset -f -y $i2c_bus $i2c_addr 0x00 0x08
i2cset -f -y $i2c_bus $i2c_addr 0x18 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x19 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x1a 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x1b 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x28 0x40
i2cset -f -y $i2c_bus $i2c_addr 0x29 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x2a 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x2b 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x00 0x0a
i2cset -f -y $i2c_bus $i2c_addr 0x48 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x49 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x4a 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x4b 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x58 0x40
i2cset -f -y $i2c_bus $i2c_addr 0x59 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x5a 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x5b 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x00 0x00
i2cset -f -y $i2c_bus $i2c_addr 0x02 0x00
echo "Done configuring amp at $i2c_addr"
done
lspci -nn | grep -i audio
00:1f.3 Multimedia audio controller [0401]: Intel Corporation Meteor Lake-P HD Audio Controller [8086:7e28] (rev 20)
~
❯ lspci -nnk | grep -iA 3 0403
La déconnexion de la batterie a permis une réinitialisation profonde du contrôleur intégré (EC) et des circuits de gestion d’alimentation de l’ordinateur portable. Sur des modèles comme le Lenovo Yoga Pro 9i, les amplificateurs audio (tels que TAS2781 ou similaires, intégrés au codec ALC287) peuvent entrer dans un état « bloqué » ou de basse puissance en raison de bogues firmware, d’interactions avec le noyau, ou de problèmes de gestion d’alimentation sous Linux. Cet état empêche les écritures I2C réussies (entraînant les erreurs « Write failed » dans le script), même si les périphériques sont physiquement présents. La réinitialisation efface cet état, restaurant une communication normale sans nécessairement modifier l’énumération des périphériques dans les outils comme lspci ou i2cdetect (qui sonde les accusés de réception I2C).
Pourquoi la détection reste identique : i2cdetect repose sur les réponses des périphériques avec un accusé de réception (ACK) lors d’une sonde. Si les amplificateurs étaient dans un mode de défaillance partielle, ils pouvaient ne pas répondre, entraînant un scan vide. Cependant, après la réinitialisation, ils peuvent maintenant accepter les écritures de votre script, permettant une configuration appropriée et une sortie audio complète (incluant les basses). Ce comportement est connu dans les configurations audio Linux pour les appareils Lenovo, où la visibilité et la fonctionnalité peuvent se dissocier en raison des particularités de gestion d’alimentation.
Compilation du kernel :


https://bbs.archlinux.org/viewtopic.php?id=310168
https://github.com/CachyOS/distribution/issues/245
https://www.reddit.com/r/NixOS/comments/1ogr99v/wireplumber_and_audio_interface_input_issues/