Thursday, January 15, 2009

Fedora F10 x86_64 on Dell latitude D830 sound woes

There's some weird stuff going on with the sound on my dell latitude D830 laptop. I recently got that laptop and put fedora F10 (64 bit version) on it, so I'm not sure if it's a fedora issue or a more general one, as I haven't used any other distro on this machine.

The biggest problem is that there are a few issues causing audio to fail.

Here's what you can try to do to resolve it:

  1. run 'paman' (the PulseAudio Manager)
    if you can't connect, then pulse isnt running for some reason.. issue start-pulseaudio-x11 from your user account to restart it.

  2. in paman, check if Devices->Sinks actually shows a hardware device and NOT the Null Output device. If you have the Null Output, it means pulse was unable to open your hardware device, this happens when something had the alsa device open when starting pulse (e.g. I had this due to a KVM virtual machine that had a sound device attached to it).

    To debug, from a shell start pulse in commandline mode:
    $ pulseaudio -nC -vvv


    then issue:
    >>> load-module module-hal-detect


    and watch the debug output, it might say it can't open /dev/snd/pcmXXXX
    to check what is keeping that device open, issue:

    # fuser -v /dev/snd* /dev/dsp*


    kill the apps, then restart pulse from your user shell (start-pulseaudio-x11) and recheck in paman if the Sink is now showing the alsa device.

  3. if all this is ok and the pulseaudio volume program even shows sound playing, but you still get no sound, then most likely alsa didn't setup the sound codec correctly.. this was the case on my D830 which has a SigmaTel STAC9205 (you can find this info in /proc/asound/card0/codec#0)

  4. first try adding an option to modprobe, e.g.

    $ cat /etc/modprobe.d/dell
    options snd-hda-intel model=dell-m42


    and restart your machine, make sure the above issues don't popup again. If you have a different codec, you might check the alsa doc for something that fits your machine.

  5. If that didn't help.. grab hda-verb then look for the speaker node in /proc/asound/card0/codec#0

    e.g. on my laptop:

    Node 0x0d [Pin Complex] wcaps 0x400181: Stereo
    Pincap 0x0000003f: IN OUT HP Detect Trigger ImpSense
    Pin Default 0x90170310: [Fixed] Speaker at Int N/A
    Conn = Analog, Color = Unknown
    DefAssociation = 0x1, Sequence = 0x0
    Misc = NO_PRESENCE
    Pin-ctls: 0x40: OUT
    Unsolicited: tag=00, enabled=0
    Connection: 1
    0x10


    If the Pin-Ctls doesnt have OUT, then you will get no output. You can fix this with the hda-verb command:

    # hda-verb /dev/snd/hwC0D0 0x0d SET_PIN_WIDGET_CONTROL 0x40


    This should enable the sound output on your speakers.

  6. Last issue, speakers might work but as soon as you plug in a headphone, your sound goes away. (ie. sound doesnt work from the headphone).
    Look in the codec file for a headphone node:


    Node 0x0a [Pin Complex] wcaps 0x400181: Stereo
    Pincap 0x0000173f: IN OUT HP Detect Trigger ImpSense
    Vref caps: HIZ 50 GRD 80
    Pin Default 0x0321101f: [Jack] HP Out at Ext Left
    Conn = 1/8, Color = Black
    DefAssociation = 0x1, Sequence = 0xf
    Pin-ctls: 0x00: VREF_HIZ
    Unsolicited: tag=3a, enabled=1
    Connection: 2
    0x10* 0x11


    Then enable the OUT with the same hda-verb as shown above, but update the node id:

    # hda-verb /dev/snd/hwC0D0 0x0a SET_PIN_WIDGET_CONTROL 0x40

Hopefully you will have sound by now.

3 comments:

Anonymous said...

Since i had the same laptop before ( literally ;) ), I can see Ubuntu works perfectly on your laptop :) So i guess it's a Fedora issue, and not a global one.

Karl Vogel said...

Heard it worked on an older kernel release on F10 too.. so probably just an issue with the current kernel.
Or for all I know, it might be the bits of pizza still stuck between the keys that is causing it :-)

Anonymous said...

You rock! My D830 was completely silent and would not produce any sound at all through the speakers or the headphones. Your hda-verb commands did the trick.