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