lunes, 14 de marzo de 2011

Como reconocer sonido HDA en Ubuntu

Después de varias ayudas en los foros de Ubuntu-es, he ido recopilando datos. Al final todas las tarjetas de sonido que daban problemas, son las identificadas como HDA, estas tarjetas suelen ser reconocidas por Ubuntu, pero como cada modelo se termina configurando de una manera diferente, Ubuntu se queda a medio configurar y tenemos que terminar de configurar manualmente. Os explico en estos pocos pasos, como conseguir que Ubuntu, termine por reconocer nuestra tarjeta. Dejo algunos de los pasos sacados desde aquí.

Pasos a seguir
Estos son los pasos a seguir, para el reconocimiento de una tarjeta de sonido.

1.- Necesitamos saber cual es la placa que ha detectado el kernel:
lspci | grep Audio

Con esta orden, saldrá que ha reconocido Ubuntu, como tu tarjeta de sonido, este dato se podrá usar para buscar con Google. Si lanzando esta orden no consigues que Ubuntu te de algún dato, vete directamente a los foros de Ubuntu-es o a tu pagina del pc, por que tienes un pequeño problema. Si consigues datos por parte de esta orden sigue al siguiente paso.

2.- Si ha reconocido Ubuntu a tu tarjeta, podemos preguntarle con estas dos ordenes. Con la primera si es HDA y con la segunda, que controlador a comenzado a usar para tu tarjeta.
aplay -l
cat /proc/asound/card0/codec#* | grep Codec

Con estos datos podrás buscar en las siguiente lista y en los dos enlaces que te pongo un poco mas abajo.

3.- Desde este momento te aconsejo que busques con tranquilidad para poder modificar en el siguiente paso.
Con estos datos podriamos comenzar a buscar en esta lista.

Module snd-hda-intel
  --------------------

    Module for Intel HD Audio (ICH6, ICH6M, ESB2, ICH7, ICH8),
        ATI SB450, SB600, RS600,
        VIA VT8251/VT8237A,
        SIS966, ULI M5461

    [Multiple options for each card instance]
    model    - force the model name
    position_fix - Fix DMA pointer (0 = auto, 1 = use LPIB, 2 = POSBUF)
    probe_mask  - Bitmask to probe codecs (default = -1, meaning all slots)
    bdl_pos_adj    - Specifies the DMA IRQ timing delay in samples.
        Passing -1 will make the driver to choose the appropriate
        value based on the controller chip.
    
    [Single (global) options]
    single_cmd  - Use single immediate commands to communicate with
        codecs (for debugging only)
    enable_msi    - Enable Message Signaled Interrupt (MSI) (default = off)
    power_save    - Automatic power-saving timtout (in second, 0 =
        disable)
    power_save_controller - Reset HD-audio controller in power-saving mode
        (default = on)

    This module supports multiple cards and autoprobe.
    
    Each codec may have a model table for different configurations.
    If your machine isn't listed there, the default (usually minimal)
    configuration is set up.  You can pass "model=" option to
    specify a certain model in such a case.  There are different
    models depending on the codec chip.

      Model name    Description
      ----------    -----------
    ALC880
      3stack    3-jack in back and a headphone out
      3stack-digout    3-jack in back, a HP out and a SPDIF out
      5stack    5-jack in back, 2-jack in front
      5stack-digout    5-jack in back, 2-jack in front, a SPDIF out
      6stack    6-jack in back, 2-jack in front
      6stack-digout    6-jack with a SPDIF out
      w810        3-jack
      z71v        3-jack (HP shared SPDIF)
      asus        3-jack (ASUS Mobo)
      asus-w1v    ASUS W1V
      asus-dig    ASUS with SPDIF out
      asus-dig2    ASUS with SPDIF out (using GPIO2)
      uniwill    3-jack
      fujitsu    Fujitsu Laptops (Pi1536)
      F1734        2-jack
      lg        LG laptop (m1 express dual)
      lg-lw        LG LW20/LW25 laptop
      tcl        TCL S700
      clevo        Clevo laptops (m520G, m665n)
      medion    Medion Rim 2150
      test        for testing/debugging purpose, almost all controls can be
            adjusted.  Appearing only when compiled with
            $CONFIG_SND_DEBUG=y
      auto        auto-config reading BIOS (default)

    ALC260
      hp        HP machines
      hp-3013    HP machines (3013-variant)
      fujitsu    Fujitsu S7020
      acer        Acer TravelMate
      will        Will laptops (PB V7900)
      replacer    Replacer 672V
      basic        fixed pin assignment (old default model)
      test        for testing/debugging purpose, almost all controls can
            adjusted.  Appearing only when compiled with
            $CONFIG_SND_DEBUG=y
      auto        auto-config reading BIOS (default)

    ALC262
      fujitsu    Fujitsu Laptop
      hp-bpc    HP xw4400/6400/8400/9400 laptops
      hp-bpc-d7000    HP BPC D7000
      hp-tc-t5735    HP Thin Client T5735
      hp-rp5700    HP RP5700
      benq        Benq ED8
      benq-t31    Benq T31
      hippo        Hippo (ATI) with jack detection, Sony UX-90s
      hippo_1    Hippo (Benq) with jack detection
      sony-assamd    Sony ASSAMD
      ultra        Samsung Q1 Ultra Vista model
      lenovo-3000    Lenovo 3000 y410
      basic        fixed pin assignment w/o SPDIF
      auto        auto-config reading BIOS (default)

    ALC267/268
      quanta-il1    Quanta IL1 mini-notebook
      3stack    3-stack model
      toshiba    Toshiba A205
      acer        Acer laptops
      dell        Dell OEM laptops (Vostro 1200)
      zepto        Zepto laptops
      test        for testing/debugging purpose, almost all controls can
            adjusted.  Appearing only when compiled with
            $CONFIG_SND_DEBUG=y
      auto        auto-config reading BIOS (default)

    ALC269
      basic        Basic preset

    ALC662/663
      3stack-dig    3-stack (2-channel) with SPDIF
      3stack-6ch     3-stack (6-channel)
      3stack-6ch-dig 3-stack (6-channel) with SPDIF
      6stack-dig     6-stack with SPDIF
      lenovo-101e     Lenovo laptop
      eeepc-p701    ASUS Eeepc P701
      eeepc-ep20    ASUS Eeepc EP20
      m51va        ASUS M51VA
      g71v        ASUS G71V
      h13        ASUS H13
      g50v        ASUS G50V
      auto        auto-config reading BIOS (default)

    ALC882/885
      3stack-dig    3-jack with SPDIF I/O
      6stack-dig    6-jack digital with SPDIF I/O
      arima        Arima W820Di1
      targa        Targa T8, MSI-1049 T8
      asus-a7j    ASUS A7J
      asus-a7m    ASUS A7M
      macpro    MacPro support
      mbp3        Macbook Pro rev3
      imac24    iMac 24'' with jack detection
      w2jc        ASUS W2JC
      auto        auto-config reading BIOS (default)

    ALC883/888
      3stack-dig    3-jack with SPDIF I/O
      6stack-dig    6-jack digital with SPDIF I/O
      3stack-6ch    3-jack 6-channel
      3stack-6ch-dig 3-jack 6-channel with SPDIF I/O
      6stack-dig-demo  6-jack digital for Intel demo board
      acer        Acer laptops (Travelmate 3012WTMi, Aspire 5600, etc)
      acer-aspire    Acer Aspire 9810
      medion    Medion Laptops
      medion-md2    Medion MD2
      targa-dig    Targa/MSI
      targa-2ch-dig    Targs/MSI with 2-channel
      laptop-eapd   3-jack with SPDIF I/O and EAPD (Clevo M540JE, M550JE)
      lenovo-101e    Lenovo 101E
      lenovo-nb0763    Lenovo NB0763
      lenovo-ms7195-dig Lenovo MS7195
      haier-w66    Haier W66
      3stack-hp    HP machines with 3stack (Lucknow, Samba boards)
      6stack-dell    Dell machines with 6stack (Inspiron 530)
      mitac        Mitac 8252D
      clevo-m720    Clevo M720 laptop series
      fujitsu-pi2515 Fujitsu AMILO Pi2515
      auto        auto-config reading BIOS (default)

    ALC861/660
      3stack    3-jack
      3stack-dig    3-jack with SPDIF I/O
      6stack-dig    6-jack with SPDIF I/O
      3stack-660    3-jack (for ALC660)
      uniwill-m31    Uniwill M31 laptop
      toshiba    Toshiba laptop support
      asus        Asus laptop support
      asus-laptop    ASUS F2/F3 laptops
      auto        auto-config reading BIOS (default)

    ALC861VD/660VD
      3stack    3-jack
      3stack-dig    3-jack with SPDIF OUT
      6stack-dig    6-jack with SPDIF OUT
      3stack-660    3-jack (for ALC660VD)
      3stack-660-digout 3-jack with SPDIF OUT (for ALC660VD)
      lenovo    Lenovo 3000 C200 & ASUS X20SG, ASUS U1E
      dallas    Dallas laptops, Toshiba satellite L30-106
      hp        HP TX1000
      auto        auto-config reading BIOS (default)

    CMI9880
      minimal    3-jack in back
      min_fp    3-jack in back, 2-jack in front
      full        6-jack in back, 2-jack in front
      full_dig    6-jack in back, 2-jack in front, SPDIF I/O
      allout    5-jack in back, 2-jack in front, SPDIF out
      auto        auto-config reading BIOS (default)

    AD1882
      3stack    3-stack mode (default)
      6stack    6-stack mode

    AD1884A / AD1883 / AD1984A / AD1984B
      desktop    3-stack desktop (default)
      laptop    laptop with HP jack sensing
      mobile    mobile devices with HP jack sensing
      thinkpad    Lenovo Thinkpad X300

    AD1884
      N/A

    AD1981
      basic        3-jack (default)
      hp        HP nx6320
      thinkpad    Lenovo Thinkpad T60/X60/Z60
      toshiba    Toshiba U205

    AD1983
      N/A

    AD1984
      basic        default configuration
      thinkpad    Lenovo Thinkpad T61/X61
      dell        Dell T3400

    AD1986A
      6stack    6-jack, separate surrounds (default)
      3stack    3-stack, shared surrounds
      laptop    2-channel only (FSC V2060, Samsung M50)
      laptop-eapd    2-channel with EAPD (Samsung R65, ASUS A6J)
      laptop-automute 2-channel with EAPD and HP-automute (Lenovo N100)
      ultra        2-channel with EAPD (Samsung Ultra tablet PC)

    AD1988/AD1988B/AD1989A/AD1989B
      6stack    6-jack
      6stack-dig    ditto with SPDIF
      3stack    3-jack
      3stack-dig    ditto with SPDIF
      laptop    3-jack with hp-jack automute
      laptop-dig    ditto with SPDIF
      auto        auto-config reading BIOS (default)
    
    Conexant 5045
      laptop-hpsense    Laptop with HP sense (old model laptop)
      laptop-micsense   Laptop with Mic sense (old model fujitsu)
      laptop-hpmicsense Laptop with HP and Mic senses
      benq        Benq R55E
      test        for testing/debugging purpose, almost all controls
            can be adjusted.  Appearing only when compiled with
            $CONFIG_SND_DEBUG=y

    Conexant 5047
      laptop    Basic Laptop config 
      laptop-hp    Laptop config for some HP models (subdevice 30A5)
      laptop-eapd    Laptop config with EAPD support
      test        for testing/debugging purpose, almost all controls
            can be adjusted.  Appearing only when compiled with
            $CONFIG_SND_DEBUG=y

    Conexant 5051
      laptop    Basic Laptop config (default)
      hp        HP Spartan laptop

    STAC9200
      ref        Reference board
      dell-d21    Dell (unknown)
      dell-d22    Dell (unknown)
      dell-d23    Dell (unknown)
      dell-m21    Dell Inspiron 630m, Dell Inspiron 640m
      dell-m22    Dell Latitude D620, Dell Latitude D820
      dell-m23    Dell XPS M1710, Dell Precision M90
      dell-m24    Dell Latitude 120L
      dell-m25    Dell Inspiron E1505n
      dell-m26    Dell Inspiron 1501
      dell-m27    Dell Inspiron E1705/9400
      gateway    Gateway laptops with EAPD control
      panasonic    Panasonic CF-74

    STAC9205/9254
      ref        Reference board
      dell-m42    Dell (unknown)
      dell-m43    Dell Precision
      dell-m44    Dell Inspiron

    STAC9220/9221
      ref        Reference board
      3stack    D945 3stack
      5stack    D945 5stack + SPDIF
      intel-mac-v1    Intel Mac Type 1
      intel-mac-v2    Intel Mac Type 2
      intel-mac-v3    Intel Mac Type 3
      intel-mac-v4    Intel Mac Type 4
      intel-mac-v5    Intel Mac Type 5
      macmini    Intel Mac Mini (equivalent with type 3)
      macbook    Intel Mac Book (eq. type 5)
      macbook-pro-v1 Intel Mac Book Pro 1st generation (eq. type 3)
      macbook-pro    Intel Mac Book Pro 2nd generation (eq. type 3)
      imac-intel    Intel iMac (eq. type 2)
      imac-intel-20    Intel iMac (newer version) (eq. type 3)
      dell-d81    Dell (unknown)
      dell-d82    Dell (unknown)
      dell-m81    Dell (unknown)
      dell-m82    Dell XPS M1210

    STAC9202/9250/9251
      ref        Reference board, base config
      m2-2        Some Gateway MX series laptops
      m6        Some Gateway NX series laptops
      pa6        Gateway NX860 series

    STAC9227/9228/9229/927x
      ref        Reference board
      3stack    D965 3stack
      5stack    D965 5stack + SPDIF
      dell-3stack    Dell Dimension E520
      dell-bios    Fixes with Dell BIOS setup

    STAC92HD71B*
      ref        Reference board
      dell-m4-1    Dell desktops
      dell-m4-2    Dell desktops

    STAC92HD73*
      ref        Reference board
      dell-m6    Dell desktops

    STAC9872
      vaio        Setup for VAIO FE550G/SZ110
      vaio-ar Setup for VAIO AR

    The model name "genric" is treated as a special case.  When this
    model is given, the driver uses the generic codec parser without
    "codec-patch".  It's sometimes good for testing and debugging.

    If the default configuration doesn't work and one of the above
    matches with your device, report it together with the PCI
    subsystem ID (output of "lspci -nv") to ALSA BTS or alsa-devel
    ML (see the section "Links and Addresses").

    power_save and power_save_controller options are for power-saving
    mode.  See powersave.txt for details.

    Note 2: If you get click noises on output, try the module option
        position_fix=1 or 2.  position_fix=1 will use the SD_LPIB
        register value without FIFO size correction as the current
        DMA pointer.  position_fix=2 will make the driver to use
        the position buffer instead of reading SD_LPIB register.
        (Usually SD_LPLIB register is more accurate than the
        position buffer.)

    NB: If you get many "azx_get_response timeout" messages at
    loading, it's likely a problem of interrupts (e.g. ACPI irq
    routing).  Try to boot with options like "pci=noacpi".  Also, you
    can try "single_cmd=1" module option.  This will switch the
    communication method between HDA controller and codecs to the
    single immediate commands instead of CORB/RIRB.  Basically, the
    single command mode is provided only for BIOS, and you won't get
    unsolicited events, too.  But, at least, this works independently
    from the irq.  Remember this is a last resort, and should be
    avoided as much as possible...
    
    MORE NOTES ON "azx_get_response timeout" PROBLEMS:
    On some hardwares, you may need to add a proper probe_mask option
    to avoid the "azx_get_response timeout" problem above, instead.
    This occurs when the access to non-existing or non-working codec slot
    (likely a modem one) causes a stall of the communication via HD-audio
    bus.  You can see which codec slots are probed by enabling
    CONFIG_SND_DEBUG_VERBOSE, or simply from the file name of the codec
    proc files.  Then limit the slots to probe by probe_mask option.
    For example, probe_mask=1 means to probe only the first slot, and
    probe_mask=4 means only the third slot.

    The power-management is supported
Y en estos dos enlaces que te dejo podrás revisar mas placas de sonido. Esta en Ubuntuforums y esta en kernel.org.
Después de localizar cual es el driver para tu tarjeta de sonido y la forma de completar el archivo de configuración de ALSA, tendremos que modificar el archivo correspondiente.

4.- Como norma las modificaciones tendremos que hacerlas en /etc/modprobe.b/alsa-base.conf/, edita con tu editor favorito, yo usare a nano, podrías usar a gedit,vi o vim.
sudo nano /etc/modprobe.d/alsa-base.conf
Cuando salga la edición del archivo,(sino sale nada vamos a los foros) tendría que salir una larga lista de posibles modificaciones de alsa para snd-hda-intel y las posibles modificaciones, pero si nuestra tarjeta a tenido problemas, tendremos nosotros que añadir la linea que corresponda a nuestra tarjeta después de buscar en las listas que te he pasado de la siguiente forma:


options snd-hda-intel xxx...=xxxx....


Después de añadir la modificación te aconsejo desconectar a pulseaudio, puedes hacerlo de la siguiente forma:


killall pulseaudio

sudo alsa force-reload

pulseaudio -D


Si después de todo esto sigues sin sonido, déjate caer por los foros correspondiente con el siguiente paso que te describo abajo y así dar los datos necesarios para los compañeros.

5.- Para los que no deis pie con bola en este tema y necesiteis ayuda os aconsejo que copies este script que he copiado de ALSA.org
El código del script:
!/bin/bash

echo "ALSA Audio Debug v0.1.0 - $(date)"
echo "http://alsa.opensrc.org/aadebug"
echo "http://www.gnu.org/licenses/gpl.txt"
echo
echo Kernel ----------------------------------------------------
uname -a
echo
echo Loaded Modules --------------------------------------------
lsmod | grep ^snd
lsmod | egrep -q '(^usb-midi|^audio)'
if [ $? -eq 0 ]; then
    echo "Warning: either 'audio' or 'usb-midi' OSS modules are loaded"
    echo "this may interfere with ALSA's snd-usb-audio."
    if [ ! -f /etc/hotplug/blacklist ]; then
        echo "You should create a file '/etc/hotplug/blacklist' with"
    echo "both names on it to avoid hotplug loading them."
    else
    egrep -q '(^usb-midi|^audio)' /etc/hotplug/blacklist
    if [ $? -eq 1 ]; then
        echo "You should add both modules to '/etc/hotplug/blacklist'"
        echo "to avoid hotplug loading them."
    fi
    fi
fi
echo
if [ "$(echo $(uname -r) | grep 2.6)" -a -f /proc/config.gz ]; then
echo Proc Config -----------------------------------------------
zcat /proc/config.gz | egrep "(CONFIG_SOUND|CONFIG_SND)"
echo
fi
echo Modprobe Conf ---------------------------------------------
if [ -f /etc/modprobe.conf ] ; then
    egrep '(sound|snd)' /etc/modprobe.conf
elif [ -f /etc/modules.conf ] ; then
    egrep '(sound|snd)' /etc/modules.conf
else
    echo "Warning: module config file does not exist"
    echo "This means any kernel modules will not be auto loaded"
    echo "See your linux distro docs on how to create this file"
fi
echo
echo Proc Asound -----------------------------------------------
if [ ! -d /proc/asound ] ; then
    echo "Warning: /proc/asound does not exist"
    echo "This indicates that ALSA is not installed correctly"
    echo "Check various logs in /var/log for a clue as to why"
else
    cat /proc/asound/{version,cards,devices,hwdep,pcm,seq/clients}
fi
echo
echo Dev Snd ---------------------------------------------------
if [ ! -d /dev/snd ] ; then
    echo "Warning: /dev/snd does not exist"
else
    /bin/ls -C /dev/snd
fi
echo
echo CPU -------------------------------------------------------
grep -e "model name" -e "cpu MHz" /proc/cpuinfo
echo
echo RAM -------------------------------------------------------
grep -e MemTotal -e SwapTotal /proc/meminfo
echo
echo Hardware --------------------------------------------------
# Note: this command may not be in a non-root users path
lspci | egrep "(Multimedia|Host bridge)"
echo

- Después lo metáis en un archivo de texto y lo renombras con el siguiente nombre aadebug.
- Lo hacemos ejecutable:
chmod +x aadebug
- Desde este momento ya lo podemos ejecutar de la siguiente manera:
./aadebug 
Con la salida que nos dé, que serán unos datos muy interesantes, podremos pedir ayuda en los foros de Ubuntu-es o en la lista de correos de ubuntu-es para que nos echen una mano. Si queréis quedar como un rey usad pastebin o paste.ubuntu.com, para pegar los datos y pegar la /url en vez de la retahíla de datos, que en algunos casos se podrían modificar al pegarlos en los foros o en un correo.
Esperando que os sea de utilidad, soló os pido el marcar en Reacciones vuestra opinión sobre el howto.