Le son ne fonctionne pas lorsque la carte son et HDMI utilisent le pilote Intel HDA. Comment échanger l'ordre de chargement de leur appareil?

10

J'ai un netbook Acer Aspire One 522 qui a une carte son Intel HDA basée sur le chipset Conexant CX20584. Bien que KDE émette du son au démarrage, le flash et probablement de nombreuses autres applications qui recherchent un /dev/dspappareil ne peuvent tout simplement pas émettre de son à travers lui, ce qui rend une expérience multimédia à peu près inutile.

Lorsque j'ai vérifié mes appareils de lecture ALSA avec aplay -l, j'ai pu voir que l'appareil audio principal était reconnu comme la carte 1 au lieu de 0, qui était connectée à HDMI à la place:

**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

De cette façon, j'obtiens un /dev/dsp1, mais il semble que la plupart des applications soient simplement codées en dur à utiliser /dev/dsp, alors j'ai cherché un moyen d'échanger les index des cartes. Après quelques recherches dans la documentation ALSA, j'ai essayé d'attribuer des index aux modules pilotes utilisés par HDMI et Intel HDA avec ce /etc/modprobe.d/asound.conffichier:

options snd cards_limit=2
options snd-hda-codec-conexant index=0
options snd-hda-codec-hdmi index=1
options snd slots=snd-hda-codec-conexant,snd-hda-codec-hdmi

Cela n'a pas fonctionné cependant, et sur la base d'un lien oublié dans ma quête sans fin d'une réponse, cela semble être parce que ces indexdirectives sont censées coordonner l'ordre de chargement des modules, mais ces deux codecs Conexant et HDMI utilisent le même Intel HDA module pilote, il ne semble donc pas s'appliquer dans ce cas.

Cela dit, existe-t-il un moyen de définir des index de carte corrects lorsque les appareils utilisent le même module de pilote ALSA (Intel HDA dans ce cas)?

Claudio
la source

Réponses:

10

J'ai finalement trouvé une réponse à ce problème sur la base de ce post d'un autre forum (voir "Tentative 1b" pour référence). Selon lui, on peut spécifier l'id du module, même si le driver utilisé est le même:

alias char-major-116 snd
alias snd-card-0 snd-hda-intel
alias snd-card-1 snd-hda-intel

options snd cards_limit=2

options snd-hda-intel id=SB index=0
options snd-hda-intel id=HDMI index=1

permettant ainsi de commander correctement la carte et de faire fonctionner le son comme prévu:

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: SB [HDA ATI SB], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Pour postuler à d'autres cas similaires, vous pouvez inspecter les /proc/asoundliens symboliques vers vos cartes, ce seront les ID de modules souhaités:

$ ls -l /proc/asound/
total 0
lrwxrwxrwx 1 root root 5 Jan 26 19:19 HDMI -> card1
lrwxrwxrwx 1 root root 5 Jan 26 19:19 SB -> card0
dr-xr-xr-x 4 root root 0 Jan 26 19:19 card0
dr-xr-xr-x 3 root root 0 Jan 26 19:19 card1
-r--r--r-- 1 root root 0 Jan 26 19:19 cards
-r--r--r-- 1 root root 0 Jan 26 19:19 devices
-r--r--r-- 1 root root 0 Jan 26 19:19 hwdep
-r--r--r-- 1 root root 0 Jan 26 19:19 modules
dr-xr-xr-x 2 root root 0 Jan 26 19:19 oss
-r--r--r-- 1 root root 0 Jan 26 19:19 pcm
dr-xr-xr-x 2 root root 0 Jan 26 19:19 seq
-r--r--r-- 1 root root 0 Jan 26 19:19 timers
-r--r--r-- 1 root root 0 Jan 26 19:19 version
Claudio
la source