Solved No audio on Ryzen HD Audio Controller (B650 chipset)

A solution for no audio output on SPDIF when using a B650 (or the like) motherboard. Claude helped me figure out that the dsp device for it was missing and suggested a fix :)

Version: FreeBSD 15.1-RELEASE-p6

In Short:
Problem: Missing device to output sound to.
Solution: Set UAUDIO_MAX_CHILD to 3 in /usr/src/sys/dev/sound/usb/uaudio.c and recompile the kernel.
Code:
# diff -u /usr/src/sys/dev/sound/usb/uaudio.c.orig /usr/src/sys/dev/sound/usb/uaudio.c

--- /usr/src/sys/dev/sound/usb/uaudio.c.orig    2026-10-23 05:09:49.176032000 +1000
+++ /usr/src/sys/dev/sound/usb/uaudio.c 2026-10-23 04:44:57.225849000 +1000
@@ -352,7 +352,7 @@
 #define        UAUDIO_SPDIF_OUT_96K    0x04    /* Out sample rate = 96K */
 #define        UAUDIO_SPDIF_IN_MIX     0x10    /* Input mix enable */
 
-#define        UAUDIO_MAX_CHILD 2
+#define        UAUDIO_MAX_CHILD 3
 
 struct uaudio_softc_child {
        device_t pcm_device;

Checking if you have this device

Code:
# pciconf -lv | grep -A4 '^hdac'

    vendor     = 'Advanced Micro Devices, Inc. [AMD/ATI]'
    device     = 'Navi 48 HDMI/DP Audio Controller'
    class      = multimedia
    subclass   = HDA
--
    vendor     = 'Advanced Micro Devices, Inc. [AMD/ATI]'
    device     = 'Radeon High Definition Audio Controller'
    class      = multimedia
    subclass   = HDA
--
    vendor     = 'Advanced Micro Devices, Inc. [AMD]'
    device     = 'Ryzen HD Audio Controller'
    class      = multimedia
    subclass   = HDA
 
The issue has to do with the USB audio device having more than 2 interfaces for which to map a /dev/dsp* device to. Ideally the hard coded count should be removed and actually find the real count.

USB interfaceDirectionTerminal typeFormats
4PlaybackSpeaker2/4/6/8 ch, 16/24/32-bit
5PlaybackHeadphones2 ch, 16/24/32-bit
6PlaybackS/PDIF2 ch (plus a non-PCM mode)
1, 2CaptureAnalog line inputs2 ch
3CaptureMicrophone2 ch
 
Back
Top