AW: [PATCH 0/8] USB Audio Gadget part 2: Feedback endpoint, Volume/Mute support

From: Johannes Freyberger
Date: Tue Mar 02 2021 - 02:12:26 EST


Hi Ruslan,

thanks a lot for your quick answer.

> -----Ursprüngliche Nachricht-----
> Von: Ruslan Bilovol
> Gesendet: Montag, 1. März 2021 22:34
> An: Johannes Freyberger <Johannes@xxxxxxxxxxxxx>
> Cc: Felipe Balbi <balbi@xxxxxxxxxx>; Jonathan Corbet <corbet@xxxxxxx>;
> Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>; Glenn Schmottlach
> <gschmottlach@xxxxxxxxx>; linux-doc@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; Linux USB <linux-usb@xxxxxxxxxxxxxxx>
> Betreff: Re: [PATCH 0/8] USB Audio Gadget part 2: Feedback endpoint,
> Volume/Mute support
>
> Hi Johannes,
>
> On Mon, Mar 1, 2021 at 6:49 PM Johannes Freyberger
> <Johannes@xxxxxxxxxxxxx> wrote:
> >
> > Hi Ruslan,
> >
> > thanks for all your efforts to make the USB Audio Gadget work in Win10
> > using UAC2. Meanwhile I managed to apply and compile your previous
> > modifications and now my Raspberry PI shows up in the Windows Device
> > Manager as a valid
> > UAC2 audio device. Unfortunately it still doesn't work to transfer any
> > audio as it seems the audio endpoints or the topology is not working.
>
> Are you testing my previous version of the patches on some older kernel?
>
> Just for records - these two patch sets (part 1 and part 2) are based on Greg's
> usb-next branch (commit b5a12546e779d4f5586f58e60e0ef5070a833a64
> which is based on v5.11-rc5 tag). I retested them today with a BBB board and
> it works fine under Win 10. Also I rebased these two patchsets today against
> latest Greg's usb-next branch which is now Linus's v5.12-rc1 tag and again it
> works fine under Win10 - both Volume/Mute controls and audio streaming.
>
> These patches have been tested previously on Raspberry PI 4 running v5.9
> and v5.10 stable kernels. The only issues I've seen were because of
> Raspberry's DWC2 DMA issue in the driver that I described in this cover
> letter.
> However if you disable volume/mute controls, it won't affect you.
>
> > I checked it
> > with some tools and found one providing some information on the USB
> > part (it's called UVCview.exe and is part of the Windows Driver Kit).
> > Here's the output which I hope can give some hints on the problems
> > still existing in this driver:
>
> From the output below I see UAC2 descriptors are completely screwed up
> (or UVCview.exe doesn't show them correctly). Windows is very strict to the
> descriptors and doesn't allow devices to start in case of any issues.
> So if it appears as a valid UAC2 device in Device Manager, most likely
> UVCview.exe doesn't decode UAC2 descriptors well.
>

You are right, they really look screwed up. Meanwhile I found another similar tool which also knows Audio 2.0 and here everything looks fine ( https://www.uwe-sieber.de/usbtreeview.html#download )

> Could you please also apply these patches to the latest kernel (v5.12-rc1) and
> test?

Yes, I'd like to do this and I want to apologize for my newbie questions in advance. But I have to admit I'm rather new to Linux, Kernel compiling etc. and I followed the description on https://www.raspberrypi.org/documentation/linux/kernel/building.md and then applied your patches - partially I had to do some modifications by hand as the sources had changed. The version I downloaded via "git clone --depth=1 https://github.com/raspberrypi/linux"; seems to be Linux 5.10.17-v7l. And I cannot see the version you mention at https://github.com/raspberrypi/linux/branches . Where can I get the version v5.12-rc1 for these tests?

>
> Thanks,
> Ruslan
>

Thanks to you for helping beginners like me,
best regards,
Johannes

> >
> > ---===>Device Information<===--- English product name:
> > "Linux USB Audio Gadget"
> >
> > ConnectionStatus:
> > Current Config Value: 0x01 -> Device Bus Speed: High
> > Device Address: 0x0F
> > Open Pipes: 0
> > *!*ERROR: No open pipes!
> >
> > ===>Device Descriptor<===
> > bLength: 0x12
> > bDescriptorType: 0x01
> > bcdUSB: 0x0200
> > bDeviceClass: 0xEF -> This is a Multi-interface
> > Function Code Device
> > bDeviceSubClass: 0x02 -> This is the Common Class Sub
> > Class
> > bDeviceProtocol: 0x01 -> This is the Interface
> > Association Descriptor protocol
> > bMaxPacketSize0: 0x40 = (64) Bytes
> > idVendor: 0x1D6B = The Linux Foundation
> > idProduct: 0x0101
> > bcdDevice: 0x0510
> > iManufacturer: 0x01
> > English (United States) "Linux 5.10.17-v7l-R3LAY_TEST+ with
> > fe980000.usb"
> > iProduct: 0x02
> > English (United States) "Linux USB Audio Gadget"
> > iSerialNumber: 0x00
> > bNumConfigurations: 0x01
> >
> > ===>Configuration Descriptor<===
> > bLength: 0x09
> > bDescriptorType: 0x02
> > wTotalLength: 0x00E2 -> Validated
> > bNumInterfaces: 0x03
> > bConfigurationValue: 0x01
> > iConfiguration: 0x00
> > bmAttributes: 0xC0 -> Bus Powered
> > MaxPower: 0x01 = 2 mA
> >
> > ===>IAD Descriptor<===
> > bLength: 0x08
> > bDescriptorType: 0x0B
> > bFirstInterface: 0x00
> > bInterfaceCount: 0x03
> > bFunctionClass: 0x01 -> Audio Interface Class
> > bFunctionSubClass: 0x00
> > *!*CAUTION: This appears to be an invalid bFunctionSubClass
> > bFunctionProtocol: 0x20
> > iFunction: 0x04
> > English (United States) "R3lay PI"
> >
> > ===>Interface Descriptor<===
> > bLength: 0x09
> > bDescriptorType: 0x04
> > bInterfaceNumber: 0x00
> > bAlternateSetting: 0x00
> > bNumEndpoints: 0x00
> > bInterfaceClass: 0x01 -> Audio Interface Class
> > bInterfaceSubClass: 0x01 -> Audio Control Interface SubClass
> > bInterfaceProtocol: 0x20
> > CAUTION: This may be an invalid bInterfaceProtocol
> > iInterface: 0x05
> > English (United States) "Topology Control"
> >
> > ===>Audio Control Interface Header Descriptor<===
> > bLength: 0x09
> > bDescriptorType: 0x24
> > bDescriptorSubtype: 0x01
> > bcdADC: 0x0200
> > wTotalLength: 0x5308
> > bInCollection: 0x00
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x08
> > bDescriptorType: 0x24
> > 08 24 0A 06 01 01 00 06
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x08
> > bDescriptorType: 0x24
> > 08 24 0A 05 01 01 00 07
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x11
> > bDescriptorType: 0x24
> > 11 24 02 01 01 01 00 05 02 03 00 00 00 00 03 00
> > 08
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x11
> > bDescriptorType: 0x24
> > 11 24 02 02 00 02 00 06 02 03 00 00 00 00 03 00
> > 09
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x0C
> > bDescriptorType: 0x24
> > 0C 24 03 04 01 01 00 02 06 03 00 0A
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x0C
> > bDescriptorType: 0x24
> > 0C 24 03 03 00 03 00 01 05 03 00 0B
> >
> > ===>Interface Descriptor<===
> > bLength: 0x09
> > bDescriptorType: 0x04
> > bInterfaceNumber: 0x01
> > bAlternateSetting: 0x00
> > bNumEndpoints: 0x00
> > bInterfaceClass: 0x01 -> Audio Interface Class
> > bInterfaceSubClass: 0x02 -> Audio Streaming Interface
> > SubClass
> > bInterfaceProtocol: 0x20
> > CAUTION: This may be an invalid bInterfaceProtocol
> > iInterface: 0x0C
> > English (United States) "Playback Inactive"
> >
> > ===>Interface Descriptor<===
> > bLength: 0x09
> > bDescriptorType: 0x04
> > bInterfaceNumber: 0x01
> > bAlternateSetting: 0x01
> > bNumEndpoints: 0x02
> > bInterfaceClass: 0x01 -> Audio Interface Class
> > bInterfaceSubClass: 0x02 -> Audio Streaming Interface
> > SubClass
> > bInterfaceProtocol: 0x20
> > CAUTION: This may be an invalid bInterfaceProtocol
> > iInterface: 0x0D
> > English (United States) "Playback Active"
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x10
> > bDescriptorType: 0x24
> > 10 24 01 01 00 01 01 00 00 00 02 03 00 00 00 00
> >
> > ===>Audio Streaming Format Type Descriptor<===
> > bLength: 0x06
> > bDescriptorType: 0x24
> > bDescriptorSubtype: 0x02
> > bFormatType: 0x01
> > bNrChannels: 0x02
> > bSubframeSize: 0x10
> > bBitResolution: 0x07
> > bSamFreqType: 0x05
> > tSamFreq[1]: 0x380501 (3671297 Hz)
> > tSamFreq[2]: 0x080401 (525313 Hz)
> > tSamFreq[3]: 0x000125 (293 Hz)
> > tSamFreq[4]: 0x000000 (0 Hz)
> > tSamFreq[5]: 0x050700 (329472 Hz)
> >
> > ===>Endpoint Descriptor<===
> > bLength: 0x07
> > bDescriptorType: 0x05
> > bEndpointAddress: 0x01 -> Direction: OUT - EndpointID: 1
> > bmAttributes: 0x05 -> Isochronous Transfer Type
> > Synchronization Type = Asynchronous Bulk Transfer
> > Type
> > wMaxPacketSize: 0x0138 = 1 transactions per microframe,
> > 0x138 max bytes
> > bInterval: 0x04
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x08
> > bDescriptorType: 0x25
> > 08 25 01 00 00 00 00 00
> >
> > ===>Endpoint Descriptor<===
> > bLength: 0x07
> > bDescriptorType: 0x05
> > bEndpointAddress: 0x81 -> Direction: IN - EndpointID: 1
> > bmAttributes: 0x11 -> Isochronous Transfer Type
> > Synchronization Type = No Synchronization Bulk
> > Transfer Type
> > wMaxPacketSize: 0x0004 = 1 transactions per microframe,
> > 0x04 max bytes
> > bInterval: 0x04
> >
> > ===>Interface Descriptor<===
> > bLength: 0x09
> > bDescriptorType: 0x04
> > bInterfaceNumber: 0x02
> > bAlternateSetting: 0x00
> > bNumEndpoints: 0x00
> > bInterfaceClass: 0x01 -> Audio Interface Class
> > bInterfaceSubClass: 0x02 -> Audio Streaming Interface
> > SubClass
> > bInterfaceProtocol: 0x20
> > CAUTION: This may be an invalid bInterfaceProtocol
> > iInterface: 0x0E
> > English (United States) "Capture Inactive"
> >
> > ===>Interface Descriptor<===
> > bLength: 0x09
> > bDescriptorType: 0x04
> > bInterfaceNumber: 0x02
> > bAlternateSetting: 0x01
> > bNumEndpoints: 0x01
> > bInterfaceClass: 0x01 -> Audio Interface Class
> > bInterfaceSubClass: 0x02 -> Audio Streaming Interface
> > SubClass
> > bInterfaceProtocol: 0x20
> > CAUTION: This may be an invalid bInterfaceProtocol
> > iInterface: 0x0F
> > English (United States) "Capture Active"
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x10
> > bDescriptorType: 0x24
> > 10 24 01 04 00 01 01 00 00 00 02 03 00 00 00 00
> >
> > ===>Audio Streaming Format Type Descriptor<===
> > bLength: 0x06
> > bDescriptorType: 0x24
> > bDescriptorSubtype: 0x02
> > bFormatType: 0x01
> > bNrChannels: 0x02
> > bSubframeSize: 0x10
> > bBitResolution: 0x07
> > bSamFreqType: 0x05
> > tSamFreq[1]: 0xC40582 (12846466 Hz)
> > tSamFreq[2]: 0x080400 (525312 Hz)
> > tSamFreq[3]: 0x000125 (293 Hz)
> > tSamFreq[4]: 0x000000 (0 Hz)
> > tSamFreq[5]: 0x000000 (0 Hz)
> >
> > ===>Endpoint Descriptor<===
> > bLength: 0x07
> > bDescriptorType: 0x05
> > bEndpointAddress: 0x82 -> Direction: IN - EndpointID: 2
> > bmAttributes: 0x05 -> Isochronous Transfer Type
> > Synchronization Type = Asynchronous Bulk Transfer
> > Type
> > wMaxPacketSize: 0x00C4 = 1 transactions per microframe,
> > 0xC4 max bytes
> > bInterval: 0x04
> >
> > ===>Descriptor Hex Dump<===
> > bLength: 0x08
> > bDescriptorType: 0x25
> > 08 25 01 00 00 00 00 00
> >