Re: kernel 5.4.11: problems with usb sound cards

From: Johan Hovold
Date: Sun Feb 02 2020 - 05:19:38 EST


[ +CC: Takashi ]

On Sat, Feb 01, 2020 at 01:26:16PM -0300, edes wrote:
>
> > Can you please post the output of "lsusb -v" for this device on 5.4.10
> > and 5.4.11, respectively?
>
>
> Hello, thanks for your prompt response. Please see attached (I hope that
> is OK) the output of lsusb -v on both 5.4.10 and 5.4.11.
>
> The device in question is the Sound Devices USBPre2, Bus 003 Device 004:
> ID 0926:0202, beginning at line 808.

Ok, so the device has a broken altsetting 3 for interface 1, where
endpoint 0x85 is declared as an isochronous endpoint, despite being used
by interface 2 as an audio endpoint:

Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 3
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0126 1x 294 bytes
bInterval 1

...

Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 4
bDelay 1 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 26
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 6 Discrete
tSamFreq[ 0] 8000
tSamFreq[ 1] 16000
tSamFreq[ 2] 24000
tSamFreq[ 3] 32000
tSamFreq[ 4] 44100
tSamFreq[ 5] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0126 1x 294 bytes
bInterval 4
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x01
Sampling Frequency
bLockDelayUnits 2 Decoded PCM samples
wLockDelay 0x0000


Since commit 3e4f8e21c4f2 ("USB: core: fix check for duplicate
endpoints") USB core ignores any duplicate endpoints, but in this case
we really want to ignore the first instance.

Can you try the below patch, which adds a blacklist quirk for the broken
endpoint descriptor?

Note that the broken altsetting probably should be using endpoint 0x81
just like the other altsettings for that interface, but hopefully you
don't really use this setting so that simply ignoring the endpoint will
make the device work again.

Interestingly enough, in your lsusb output from 5.4.11, the device
reports a second configuration in which this broken altsetting doesn't
exist. Switching to that config should also make the problem go away.

Johan