restricting usb device allowed format/depth

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, I'm wondering if there's any way to restrict the bit depth/format
that a USB audio device advertises to the system (for downstream
consumption by pipewire etc.). Short version:
an older laptop with USB 2.0 and a 3.5mm-USB adapter that offers
S16_LE and S24_3LE formats for microphone, any application that tries
to request S24_3LE freezes.

The background is I have an old T420 laptop that I sometimes use for
Zoom and Teams calls which has a very noisy onboard microphone and USB
2.0 ports, and an Anker USB to 3.5mm converter that lsusb identifies
as "Conexant Systems (Rockwell), Inc. Hi-Res Audio". On a
significantly newer laptop with USB 3 ports using the Anker device
works, Zoom test call sound is okay and audacity can record from it
both direct via ALSA and via Pipewire.

Even on this system, on plugging in the adapter to a port I see this
in the kernel ring:
-----
[ 4952.171359] usb 3-1: new full-speed USB device number 5 using xhci_hcd
[ 4952.337534] usb 3-1: New USB device found, idVendor=0572,
idProduct=1b08, bcdDevice= 0.10
[ 4952.337538] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 4952.337540] usb 3-1: Product: Hi-Res Audio
[ 4952.337542] usb 3-1: Manufacturer: Synaptics
[ 4952.337543] usb 3-1: SerialNumber: 000000000000000000000000
[ 4952.530669] input: Synaptics Hi-Res Audio as
/devices/pci0000:00/0000:00:08.1/0000:05:00.4/usb3/3-1/3-1:1.3/0003:0572:1B08.0008/input/input30
[ 4952.582643] hid-generic 0003:0572:1B08.0008: input,hidraw5: USB HID
v1.11 Device [Synaptics Hi-Res Audio] on usb-0000:05:00.4-1/input3
[ 4953.238361] usb 3-1: Not enough bandwidth for new device state.
[ 4953.238366] usb 3-1: Not enough bandwidth for altsetting 1
[ 4953.238368] endpoint_set_interface: 70 callbacks suppressed
[ 4953.238370] usb 3-1: 1:1: usb_set_interface failed (-28)
[ 4953.238485] usb 3-1: Not enough bandwidth for new device state.
[ 4953.238487] usb 3-1: Not enough bandwidth for altsetting 1
[ 4953.238489] usb 3-1: 1:1: usb_set_interface failed (-28)
[ 4953.238604] usb 3-1: Not enough bandwidth for new device state.
[ 4953.238607] usb 3-1: Not enough bandwidth for altsetting 1
[ 4953.238608] usb 3-1: 1:1: usb_set_interface failed (-28)
[ 4953.238755] usb 3-1: Not enough bandwidth for new device state.
[ 4953.238757] usb 3-1: Not enough bandwidth for altsetting 1
[ 4953.238759] usb 3-1: 1:1: usb_set_interface failed (-28)
[ 4953.238883] usb 3-1: Not enough bandwidth for new device state.
[ 4953.238886] usb 3-1: Not enough bandwidth for altsetting 1
[ 4953.238887] usb 3-1: 1:1: usb_set_interface failed (-28)
[ 4953.239178] usb 3-1: Not enough bandwidth for new device state.
----
...repeats these two lines a lot but eventually settles down.

However on the T420 system things just don't work. Zoom when trying to
access this device (specifically the microphone, either selecting it
via Audio Settings, during the test call microphone test stage, or
trying to change the device during a call) will just freeze. Audacity
does the same if trying to use it, and additionally has a lot of
trouble starting (will refuse to start if plugged in). I did have
success recording in Audacity if I set the format to 16 bit.

Don't have direct access to the T420 today, but the messages it
reports are slightly different (F39 so a slightly newer kernel),
however it is a urb not enough bandwidth error similar to:
[  778.937439] cannot submit urb 0, error -28: not enough bandwidth
(https://forum.odroid.com/viewtopic.php?t=23485)
Mar 12 18:25:05 kernel: cannot submit urb 0, error -28: not enough bandwidth
(https://forums.gentoo.org/viewtopic-t-862035-start-0.html)

The /proc/asound/cardX/stream0 file indicates S16_LE and S24_3LE
interfaces for capture and playback:
----
Synaptics Hi-Res Audio at usb-0000:05:00.4-1, full speed : USB Audio

Playback:
  Status: Running
    Interface = 2
    Altset = 2
    Packet Size = 432
    Momentary freq = 48000 Hz (0x30.0000)
  Interface 2
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 0x01 (1 OUT) (ADAPTIVE)
    Rates: 8000, 16000, 32000, 44100, 48000, 96000
    Bits: 16
    Channel map: FL FR
  Interface 2
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 0x01 (1 OUT) (ADAPTIVE)
    Rates: 44100, 48000, 96000
    Bits: 24
    Channel map: FL FR

Capture:
  Status: Running
    Interface = 1
    Altset = 2
    Packet Size = 288
    Momentary freq = 48000 Hz (0x30.0000)
  Interface 1
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 0x81 (1 IN) (ASYNC)
    Rates: 44100, 48000
    Bits: 16
    Channel map: FL FR
  Interface 1
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 0x81 (1 IN) (ASYNC)
    Rates: 44100, 48000
    Bits: 24
    Channel map: FL FR
----

I could try adjusting the pipewire configuration to force alsa devices
to S16_LE (already experimenting with that), however it wouldn't solve
the problem with programs like audacity that try to access ALSA
directly. Any suggestions? I've been trying to see if it can be done
in asound.con, but most results I've found seem to be about setting up
dmix devices, which doesn't really solve the problem of an available
device on the system offering S24. I can't see any snd-usb-audio
module options that would do it.

-- 
imalone


_______________________________________________
Alsa-user mailing list
Alsa-user@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-user



[Index of Archives]     [ALSA Devel]     [Linux Audio Users]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]

  Powered by Linux