Fix NuForce uDAC USB disconnects
Cheap Savitech chip firmware stalls on rapid SET_INTERFACE / sample-rate renegotiation, eventually dropping off the USB bus and requiring a physical replug. Two fixes, both scoped to this exact device only: - snd_usb_audio quirk_flags (262a:10aa): fixed_rate + ctl_msg_delay + iface_delay, applied via /etc/modprobe.d during bootstrap. - WirePlumber: disable idle-suspend for the device's ALSA node so PipeWire doesn't repeatedly reopen the stream during normal use.
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user