
On 8/1/25 04:50, Takashi Iwai wrote:
On Thu, 31 Jul 2025 23:49:11 +0200, Sean Anderson wrote:
Hi,
On 9/2/22 01:52, Takashi Iwai wrote:
On Thu, 01 Sep 2022 17:25:41 +0200, Sean Anderson wrote:
On 8/28/22 3:49 AM, Takashi Iwai wrote:
On Fri, 26 Aug 2022 20:57:53 +0200, Sean Anderson wrote:
On 8/26/22 12:36 PM, Takashi Iwai wrote: > On Fri, 26 Aug 2022 18:22:24 +0200, > Sean Anderson wrote: >> >> Hi all, >> >> I have a "FiiO DigiHug USB Audio" sound card (1852:7022) [3]. I have had >> no problems with the audio, but I did notice a large number of message >> like >> >> retire_capture_urb: 4992 callbacks suppressed >> >> in my dmesg [1]. This is caused by the "Corrected urb data len." >> warning. > > What exact values are shown there?
Unfortunately, as detailed below, I was unable to turn off ratelimiting.
> The problem is that your hardware > (likely a buggy firmware) returns the unaligned size of bytes as the > data. Maybe it's worth to replace dev_warn_ratelimited() there with > dev_warn() and take all warnings once. Then we can see what kind of > values are delivered from the hardware.
I'll have an attempt at that next week
>> The patch adding this warning [2] makes it seem like >> this warning should be an uncommon occurance. However, based on the >> number of suppressed callbacks, this seems to be happening at a rate of >> around 500 Hz. >> >> Is this buggy hardware? Or is this a bug in the driver? Does there need >> to be a quirk? Or perhaps the warning above should be a debug instead? > > There is no quirk for that. As long as the device works with that > workaround (except for messages), we can simply add a quirk to not > warn but always apply the workaround silently for such devices.
OK. I wasn't sure what the correct resolution would be.
Actually I was wrong: the existing quirk QUIRK_FLAG_ALIGN_TRANSFER should cover that.
Could you try to pass quirk_flags=0x04 for the corresponding card slot (the option takes an array) to snd-usb-audio module? Alternatively, try to pass quirk_alias=18557022:0e510408 to snd-usb-audio?
I tried both options, but neither worked.
I have no further idea. You should try the latest kernel without modification before checking further.
And, looking at the code again, it's really strange that you get those messages. Actually the transfer size *is* aligned to the audio frames as default *unless* QUIRK_FLAG_ALIGN_TRANSFER is passed. And the check is done rather the audio sample size alignment -- which must fit within the audio frame alignment.
So, QUIRK_FLAG_ALIGN_TRANSFER is already set for your device by some reason incorrectly, or the code is doing wrong on your kernel. We need to check what values are shown there actually, then check whether the problem happens with the latest vanilla kernel.
Sorry for the very long hiatus. I have reproduced this issue on kernel 6.15.8.
From closer inspection this message seems to be from the first print and not the second one:
if (urb->iso_frame_desc[i].status && printk_ratelimit()) { dev_dbg(&subs->dev->dev, "frame %d active: %d\n", i, urb->iso_frame_desc[i].status); // continue; }
This probably be a dev_dbg_ratelimited. Indeed, that suppresses these messages.
The use or printk_ratelimit() like the above is already discouraged, so it makes more sense to switch to dev_dbg_ratelimited() if it works.
OK, I'll send a patch.
The actual message that's being ratelimited is
usb 3-11.2: frame 0 active: -71
which is EPROTO. Looks like that comes from xhci_hcd. With debug enabled I get a lot of
xhci_hcd 0000:80:14.0: Transfer error for slot 36 ep 4 on endpoint
The spec says this is
| Asserted in the case where the host did not receive a valid response | from the device (Timeout, CRC, Bad PID, unexpected NYET, etc.).
and I don't really know what to make of that. Should I send a patch to convert that dev_dbg to dev_dbg_ratelimited? Or do you want to debug this further?
Usually EPROTO means something the USB controller doesn't like :) It's often a device firmware problem, but can be other means, too. You can try to connect to a different port or a machine, and see whether the problem is seen consistently.
As it happens, this with a different motherboard than before. So I guess this is a problem with the device?
I attached a pcap. From looking through it, it seems like many of the "URB_ISOCHRONOUS in" are failing. But this is sort of strange, since the card is just a DAC+headphone amp and there is no physical input.
In pactl [1] I see there is an input. It doesn't seem to function no matter what profile I use. So maybe the quirk should be that this card does not actually have an input?
--Sean
[1] Output of "pactl list" excluding sections not containing "FiiO"
Module #49 Name: module-alsa-card Argument: device_id="0" name="usb-FiiO_DigiHug_USB_Audio-01" card_name="alsa_card.usb-FiiO_DigiHug_USB_Audio-01" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1" Usage counter: 9 Properties: module.author = "Lennart Poettering" module.description = "ALSA Card" module.version = "13.99.1"
Sink #22 State: IDLE Name: alsa_output.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo Description: DigiHug USB Audio Analog Stereo Driver: module-alsa-card.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 49 Mute: no Volume: front-left: 30419 / 46% / -20.00 dB, front-right: 30419 / 46% / -20.00 dB balance 0.00 Base Volume: 65536 / 100% / 0.00 dB Monitor Source: alsa_output.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo.monitor Latency: 54206 usec, configured 40000 usec Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY Properties: alsa.resolution_bits = "16" device.api = "alsa" device.class = "sound" alsa.class = "generic" alsa.subclass = "generic-mix" alsa.name = "USB Audio" alsa.id = "USB Audio" alsa.subdevice = "0" alsa.subdevice_name = "subdevice #0" alsa.device = "0" alsa.card = "0" alsa.card_name = "DigiHug USB Audio" alsa.long_card_name = "FiiO DigiHug USB Audio at usb-0000:80:14.0-11.2, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "pci-0000:80:14.0-usb-0:11.2:1.1" sysfs.path = "/devices/pci0000:80/0000:80:14.0/usb3/3-11/3-11.2/3-11.2:1.1/sound/card0" udev.id = "usb-FiiO_DigiHug_USB_Audio-01" device.bus = "usb" device.vendor.id = "1852" device.vendor.name = "GYROCOM C&C Co., LTD" device.product.id = "7022" device.product.name = "DigiHug USB Audio" device.serial = "FiiO_DigiHug_USB_Audio" device.string = "front:0" device.buffering.buffer_size = "352800" device.buffering.fragment_size = "176400" device.access_mode = "mmap+timer" device.profile.name = "analog-stereo" device.profile.description = "Analog Stereo" device.description = "DigiHug USB Audio Analog Stereo" module-udev-detect.discovered = "1" device.icon_name = "audio-card-usb" Ports: analog-output: Analog Output (priority: 9900) Active Port: analog-output Formats: pcm
Source #44 State: RUNNING Name: alsa_output.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo.monitor Description: Monitor of DigiHug USB Audio Analog Stereo Driver: module-alsa-card.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 49 Mute: no Volume: front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB balance 0.00 Base Volume: 65536 / 100% / 0.00 dB Monitor of Sink: alsa_output.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo Latency: 0 usec, configured 40000 usec Flags: DECIBEL_VOLUME LATENCY Properties: device.description = "Monitor of DigiHug USB Audio Analog Stereo" device.class = "monitor" alsa.card = "0" alsa.card_name = "DigiHug USB Audio" alsa.long_card_name = "FiiO DigiHug USB Audio at usb-0000:80:14.0-11.2, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "pci-0000:80:14.0-usb-0:11.2:1.1" sysfs.path = "/devices/pci0000:80/0000:80:14.0/usb3/3-11/3-11.2/3-11.2:1.1/sound/card0" udev.id = "usb-FiiO_DigiHug_USB_Audio-01" device.bus = "usb" device.vendor.id = "1852" device.vendor.name = "GYROCOM C&C Co., LTD" device.product.id = "7022" device.product.name = "DigiHug USB Audio" device.serial = "FiiO_DigiHug_USB_Audio" device.string = "0" module-udev-detect.discovered = "1" device.icon_name = "audio-card-usb" Formats: pcm
Source #45 State: RUNNING Name: alsa_input.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo Description: DigiHug USB Audio Analog Stereo Driver: module-alsa-card.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 49 Mute: no Volume: front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB balance 0.00 Base Volume: 65536 / 100% / 0.00 dB Monitor of Sink: n/a Latency: 1497109 usec, configured 40000 usec Flags: HARDWARE DECIBEL_VOLUME LATENCY Properties: alsa.resolution_bits = "16" device.api = "alsa" device.class = "sound" alsa.class = "generic" alsa.subclass = "generic-mix" alsa.name = "USB Audio" alsa.id = "USB Audio" alsa.subdevice = "0" alsa.subdevice_name = "subdevice #0" alsa.device = "0" alsa.card = "0" alsa.card_name = "DigiHug USB Audio" alsa.long_card_name = "FiiO DigiHug USB Audio at usb-0000:80:14.0-11.2, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "pci-0000:80:14.0-usb-0:11.2:1.1" sysfs.path = "/devices/pci0000:80/0000:80:14.0/usb3/3-11/3-11.2/3-11.2:1.1/sound/card0" udev.id = "usb-FiiO_DigiHug_USB_Audio-01" device.bus = "usb" device.vendor.id = "1852" device.vendor.name = "GYROCOM C&C Co., LTD" device.product.id = "7022" device.product.name = "DigiHug USB Audio" device.serial = "FiiO_DigiHug_USB_Audio" device.string = "front:0" device.buffering.buffer_size = "352800" device.buffering.fragment_size = "176400" device.access_mode = "mmap+timer" device.profile.name = "analog-stereo" device.profile.description = "Analog Stereo" device.description = "DigiHug USB Audio Analog Stereo" module-udev-detect.discovered = "1" device.icon_name = "audio-card-usb" Ports: analog-input: Analog Input (priority: 10000) Active Port: analog-input Formats: pcm
Card #24 Name: alsa_card.usb-FiiO_DigiHug_USB_Audio-01 Driver: module-alsa-card.c Owner Module: 49 Properties: alsa.card = "0" alsa.card_name = "DigiHug USB Audio" alsa.long_card_name = "FiiO DigiHug USB Audio at usb-0000:80:14.0-11.2, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "pci-0000:80:14.0-usb-0:11.2:1.1" sysfs.path = "/devices/pci0000:80/0000:80:14.0/usb3/3-11/3-11.2/3-11.2:1.1/sound/card0" udev.id = "usb-FiiO_DigiHug_USB_Audio-01" device.bus = "usb" device.vendor.id = "1852" device.vendor.name = "GYROCOM C&C Co., LTD" device.product.id = "7022" device.product.name = "DigiHug USB Audio" device.serial = "FiiO_DigiHug_USB_Audio" device.string = "0" device.description = "DigiHug USB Audio" module-udev-detect.discovered = "1" device.icon_name = "audio-card-usb" Profiles: input:analog-stereo: Analog Stereo Input (sinks: 0, sources: 1, priority: 65, available: yes) input:iec958-stereo: Digital Stereo (IEC958) Input (sinks: 0, sources: 1, priority: 55, available: yes) output:analog-stereo: Analog Stereo Output (sinks: 1, sources: 0, priority: 6500, available: yes) output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (sinks: 1, sources: 1, priority: 6565, available: yes) output:analog-stereo+input:iec958-stereo: Analog Stereo Output + Digital Stereo (IEC958) Input (sinks: 1, sources: 1, priority: 6555, available: yes) output:iec958-stereo: Digital Stereo (IEC958) Output (sinks: 1, sources: 0, priority: 5500, available: yes) output:iec958-stereo+input:analog-stereo: Digital Stereo (IEC958) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 5565, available: yes) output:iec958-stereo+input:iec958-stereo: Digital Stereo Duplex (IEC958) (sinks: 1, sources: 1, priority: 5555, available: yes) off: Off (sinks: 0, sources: 0, priority: 0, available: yes) Active Profile: output:analog-stereo+input:analog-stereo Ports: analog-input: Analog Input (priority: 10000, latency offset: 0 usec) Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo, output:iec958-stereo+input:analog-stereo iec958-stereo-input: Digital Input (S/PDIF) (priority: 0, latency offset: 0 usec) Part of profile(s): input:iec958-stereo, output:analog-stereo+input:iec958-stereo, output:iec958-stereo+input:iec958-stereo analog-output: Analog Output (priority: 9900, latency offset: 0 usec) Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo, output:analog-stereo+input:iec958-stereo iec958-stereo-output: Digital Output (S/PDIF) (priority: 0, latency offset: 0 usec) Part of profile(s): output:iec958-stereo, output:iec958-stereo+input:analog-stereo, output:iec958-stereo+input:iec958-stereo