diff --git a/.config/wireplumber/wireplumber.conf.d/51-nuforce-no-suspend.conf b/.config/wireplumber/wireplumber.conf.d/51-nuforce-no-suspend.conf new file mode 100644 index 0000000..15b7cc4 --- /dev/null +++ b/.config/wireplumber/wireplumber.conf.d/51-nuforce-no-suspend.conf @@ -0,0 +1,23 @@ +# The NuForce uDAC (Savitech chip) has flaky firmware: when PipeWire +# idles and then resumes its ALSA node, the device often fails the +# resulting SET_INTERFACE / sample-rate renegotiation with a USB stall +# (spa.alsa: set_hw_params: Broken pipe). Enough of these in a row make +# the device drop off the USB bus and require a physical replug. +# +# Keeping the node's hardware stream open (no idle-suspend) avoids the +# repeated renegotiation and stops the crashes. + +monitor.alsa.rules = [ + { + matches = [ + { + node.name = "~alsa_output.usb-Nuforce_Inc\\._NuForce_USB_Audio-.*" + } + ] + actions = { + update-props = { + session.suspend-timeout-seconds = 0 + } + } + } +] diff --git a/.config/yadm/bootstrap##distro.arch b/.config/yadm/bootstrap##distro.arch index 6d9e2e5..822aee9 100755 --- a/.config/yadm/bootstrap##distro.arch +++ b/.config/yadm/bootstrap##distro.arch @@ -68,6 +68,22 @@ EOF sudo systemctl reload sshd +# --- NuForce uDAC USB audio quirks -------------------------------------- +# This DAC's firmware (262a:10aa) stalls on rapid SET_INTERFACE / sample +# rate renegotiation, which without these quirks eventually drops the +# device off the USB bus and requires a physical replug. Scoped to this +# exact VID:PID so it's a no-op on any machine without the device +# attached. Takes effect next time snd_usb_audio (re)probes the device +# (reboot, module reload, or replug) -- not applied retroactively here. +sudo install -d -m 755 /etc/modprobe.d +sudo tee /etc/modprobe.d/nuforce-udac-quirks.conf > /dev/null <<'EOF' +# fixed_rate (bit 21): device only offers one sample rate; stop the +# driver re-sending SET_CUR for it ("cannot set freq 48000 to ep 0x3"). +# ctl_msg_delay (bit 8): 20ms pause around each USB control message. +# iface_delay (bit 11): 50ms pause around each SET_INTERFACE call. +options snd_usb_audio quirk_flags=262a:10aa:0x200900 +EOF + if [ ! -d "$HOME/repos/yay" ]; then mkdir -p "$HOME/repos" cd "$HOME/repos"