View Single Post
Old 09-03-10, 11:57 AM   #7
Stephen Warren
Moderator
 
Stephen Warren's Avatar
 
Join Date: Aug 2005
Posts: 1,327
Default Re: ALSA and GTX 4XX Series

For future reference for anyone reading this thread:

The standard kernel ALSA drivers handle the audio portion of NVIDIA GPUs and chipset.

The NVIDIA binary driver is required to pass some of the monitor information to the audio driver.

X must be running for audio to work.

The latest ALSA drivers and library have a couple issues that prevent all this working in some cases. You'll need a few patches from ALSA git to solve this.

a) For all GPUs, and the MCP89 chipset: You need a fix for the PresenceDetect issue:

http://git.kernel.org/?p=linux/kerne...1cb5fbe7fc9c75

Status:
* In linux-next git
* In linux 2.6.36-rc1
* In linux 2.6.35
* In linux 2.6.34.2

b) For all FERMI GPUs: You need a fix so that the kernel driver knows it can handle the new codec IDs:

http://git.kernel.org/?p=linux/kerne...bf7cef5a942070

Status:
* In linux-next git
* In linux 2.6.36-rc1
* I hope to get this into 2.6.34/2.6.35 stable git soon.

c) The ALSA library and pulseaudio enumerate only a single "high-level" audio device ("PCM") per NVIDIA GPU. However, there are in fact four of them.

The fix for ALSA is at:

http://git.alsa-project.org/?p=alsa-...dd4916121a4f6a

There is no fix for pulseaudio yet, although there was a mailing list discussion where it was agreed that all 4 devices should be exposed.

An alternative is to use the "probe_mask" ALSA module parameter as described on this page:

http://wiki.xbmc.org/?title=HOW-TO_s...20%2C_or_GT240

However, please note that the actual values for probe_mask on that page don't make sense; the correct values you should try are 0x101, 0x102, 0x104, 0x108. You can determine which you need by plugging in your HDMI monitor, starting X, then viewing /proc/asound/card*/eld*. Whichever eld file has your monitor's information in it will tell you which probe_mask to use; eld#0.0 -> 0x101, eld#1.0 -> 0x102, eld#2.0 -> 0x104, eld#3.0 -> 0x108. If you use multiple HDMI monitors and want audio on both, logical/bitwise OR the probe_mask values together. Note that the required probe_mask will change if you move monitors to different connectors on your graphics board.

=====

For Ubuntu, I think both (a) and (b) should be part of the modules described here:
https://wiki.ubuntu.com/Audio/Instal...aDriverModules.

For other distros, the following bugs have been filed:
Ubuntu: https://bugs.launchpad.net/ubuntu/+s...ux/+bug/611810
Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=619873
RHEL 5: https://bugzilla.redhat.com/show_bug.cgi?id=622846
RHEL 6: https://bugzilla.redhat.com/show_bug.cgi?id=619877
Novell/SuSe: https://bugzilla.novell.com/show_bug.cgi?id=627212

=====

I do intend to add the above information to the driver README at some point. However, I'm hoping that the situation will simplify soon (i.e. various distros picking up the patches in their standard repositories, so it'll work automatically etc.)

Last edited by Stephen Warren; 09-10-10 at 01:23 PM. Reason: Add status to patches a/b. Update status with kernel versions
Stephen Warren is offline   Reply With Quote