View Single Post
Old 09-03-10, 10:57 AM   #7
Stephen Warren
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:

* In linux-next git
* In linux 2.6.36-rc1
* In linux 2.6.35
* In linux

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

* 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:

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:

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:

For other distros, the following bugs have been filed:


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 12:23 PM. Reason: Add status to patches a/b. Update status with kernel versions
Stephen Warren is offline   Reply With Quote