linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ruslan Bilovol <ruslan.bilovol@gmail.com>
To: Johannes Freyberger <Johannes@freyberger.de>
Cc: Felipe Balbi <balbi@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Glenn Schmottlach <gschmottlach@gmail.com>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	Linux USB <linux-usb@vger.kernel.org>
Subject: Re: [PATCH 0/8] USB Audio Gadget part 2: Feedback endpoint, Volume/Mute support
Date: Mon, 1 Mar 2021 23:34:09 +0200	[thread overview]
Message-ID: <CAB=otbQLO451REYQg3ZAR+bwAFaX5VFfz9_fVGvY3yGGxEWsaA@mail.gmail.com> (raw)
In-Reply-To: <002f01d70eba$d1b365a0$751a30e0$@Freyberger.de>

Hi Johannes,

On Mon, Mar 1, 2021 at 6:49 PM Johannes Freyberger
<Johannes@freyberger.de> 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.

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

Thanks,
Ruslan

>
>           ---===>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
>

  reply	other threads:[~2021-03-01 21:38 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-01 16:49 [PATCH 0/8] USB Audio Gadget part 2: Feedback endpoint, Volume/Mute support Johannes Freyberger
2021-03-01 21:34 ` Ruslan Bilovol [this message]
2021-03-01 22:11   ` AW: " Johannes Freyberger
  -- strict thread matches above, loose matches on Subject: below --
2021-03-01 13:05 Ruslan Bilovol
2021-03-23 11:56 ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAB=otbQLO451REYQg3ZAR+bwAFaX5VFfz9_fVGvY3yGGxEWsaA@mail.gmail.com' \
    --to=ruslan.bilovol@gmail.com \
    --cc=Johannes@freyberger.de \
    --cc=balbi@kernel.org \
    --cc=corbet@lwn.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=gschmottlach@gmail.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).