Pulseaudio, multiple cards and naming built-in audio

If you ever have a case where you have multiple sound cards and pulseaudio calls them all “built-in audio” then here is the answer.

Create an udev rule in “/etc/udev/rules.d” called “90-pulseaudio.rules” with the following contents:

SUBSYSTEM!="sound", GOTO="djb_end"
ACTION!="change", GOTO="djb_end"
KERNEL!="card*", GOTO="djb_end"

SUBSYSTEMS=="pci", ATTRS{vendor}=="0x1102", ATTRS{device}=="0x0002", ATTRS{subsystem_vendor}=="0x1102", ATTRS{subsystem_device}=="0x8022", ENV{SOUND_FORM_FACTOR}="external"
SUBSYSTEMS=="pci", ATTRS{vendor}=="0x13f6", ATTRS{device}=="0x0111", ATTRS{subsystem_vendor}=="0x10fd", ATTRS{subsystem_device}=="0xa715", ENV{SOUND_FORM_FACTOR}="external"

LABEL="djb_end"

Change the PCI vendor, device, subsystem_vendor, and subsystem_device to match the offending sound cards that are getting named as “built-in audio”. Use “lspci -nn” to get the bus info for the card in question. Then use “lspci -nn -s {bus}:{device} -vvv” to get the details.

Examples:
lspci -nn

00:0a.0 Multimedia audio controller [0401]: Creative Labs SB Live! EMU10k1 [1102:0002] (rev 07)
00:0e.0 Multimedia audio controller [0401]: C-Media Electronics Inc CMI8738/CMI8768 PCI Audio [13f6:0111] (rev 10)

Let us look at the first one in detail:
lspci -nn -s 0:a -vvv

00:0a.0 Multimedia audio controller [0401]: Creative Labs SB Live! EMU10k1 [1102:0002] (rev 07)
	Subsystem: Creative Labs CT4780 SBLive! Value [1102:8022]
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 32 (500ns min, 5000ns max)
	Interrupt: pin A routed to IRQ 18
	Region 0: I/O ports at b800 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: snd_emu10k1
	Kernel modules: snd_emu10k1

Now you see where the numbers come from.

Ban “built-in audio” forever :grinning:

4 Likes