NVidia GT220 HDMI sound

From LinuxMCE
Revision as of 15:38, 24 February 2010 by Uplink (Talk | contribs) (Added link to another driver)

Jump to: navigation, search

Summary

The nVidia GT220 (together with the other GT2xx cards) no longer has a S/PDIF input plug on it. Instead, it comes with a built-in sound card that isn't supported by ALSA yet.

There's a patch, which works find so far, but it's a bit hacky and I don't see any traces of it in ALSA's SVN. Uplink 21:50, 18 February 2010 (CET)

Status

Experimental

The people at XMBC have a page in that Wiki which points to a patch that makes sound work through the HDMI connector of the GT220 and GT240.

  • PCM sound: WORKS
  • Passthrough for AC3 and DTS: WORKS
  • GT240s have some issues with PCM (not confirmed, as I only have a GT220)

The patch from the XBMC wiki creates four sound devices for some reason (3, 7, 8, 9), but only one of them plays any sound: device 7. You need to unmute it with alsamixer.

The hacky part

Because the "hdmi" device is no longer valid with a GT220, I took the liberty of making the following changes, in order to maintain maximum software compatibility:

  • File: /etc/modprobe.d/gt220.conf
options snd-hda-intel enable_msi=0 index=1
  • File: /etc/asound.conf (add this to your existing file)
pcm.!hdmi {
        @args [ AES0 AES1 AES2 AES3 ]
        @args.AES0 {
                type integer
                # consumer, not-copyright, emphasis-none, mode=0
                default 0x04
        }
        @args.AES1 {
                type integer
                # original, PCM coder
                default 0x82
        }
        @args.AES2 {
                type integer
                # source and channel
                default 0x00
        }
        @args.AES3 {
                type integer
                # fs=48000Hz, clock accuracy=1000ppm
                default 0x02
        }
        type hooks
        slave.pcm {
                type hw
                card 1
                device 7
        }
        hooks.0 {
                type ctl_elems
                hook_args [
                {
                        name "IEC958 Playback Default"
                        lock true
                        preserve true
                        value [ $AES0 $AES1 $AES2 $AES3 ]
                }
                {
                        name "IEC958 Playback Switch"
                        lock true
                        preserve true
                        value true
                }
                ]
        }
}

I took my inspiration from these files: /usr/share/alsa/pcm/hdmi.conf and /usr/share/alsa/cards/HDA-Intel.conf

Notice that because of parameter "index=1" for snd-hda-intel, the card will always have index 1, even if you disable or remove your real sound card (either on-board or removing it from its PCI slot) so asound.conf doesn't need to track it.

Also notice that if your real sound card is driven by snd-hda-intel you may get unexpected results and you are expected to update this wiki page if you find a solution.

How this affects LinuxMCE

No changes needed in any of DCE applications. You select "HDMI" in the AVWizard as you'd normally do and LinuxMCE wouldn't really care that the "hdmi" pcm has been altered, as it works exactly the same through the "asym_hdmi" pcm as it ever did.

Some code may be needed to detect the GT220 and make the modifications accordinly.

Other links

  • Discussion about sound on the GT220 under Linux [1]