This adds functionality for the Basic Audio Device (BADD) subset that is defined in the USB Audio Class 3 (UAC3). In a BADD compliant driver, all Class Specific descriptors are inferred and so they should all be generated in the *host* as the device wont expose those. This also applies to the new HIGH CAPABILITY descriptor as the GET request is not to be supported in a BADD compliant driver.
The new class requires the device to have 3 usb configurations as follows:
1: Legacy Mode: UAC1 or UAC2. 2: BADD device with a prefined topology. (Minimum). 3: UAC3 device for more detailed description or more complex devices that can't be covered by the BADD profile.
This patch series also includes some minor fixes to sound/usb.
It has been tested with an actual UAC3 compliant device in different host machines and all configs (UAC1/2, BADD and UAC3) work.
Also, this has been implemented on top of the the patch which adds UAC3 support to the usb sound card driver:
commit ddd452d7b04b86fb5f9285a19ac54deca9264ac1 Author: Ruslan Bilovol ruslan.bilovol@gmail.com Date: Tue Nov 7 04:01:20 2017 +0200
Jorge Sanjuan (6): usb: audio: Add bi-directional terminal types. usb: audio: Fix variable length field to be variable. ALSA: usb: UAC3. Add initial mixer support. ALSA: usb: Only get AudioControl header for UAC1 class. ALSA: usb: Use Class Specific EP for UAC3 devices. ALSA: usb: ADC3: Add initial BADD spec support
include/linux/usb/audio-v3.h | 2 +- include/uapi/linux/usb/audio.h | 21 +- sound/usb/Makefile | 3 +- sound/usb/badd.c | 518 +++++++++++++++++++++++++++++++++++++++++ sound/usb/badd.h | 14 ++ sound/usb/card.c | 25 +- sound/usb/mixer.c | 24 ++ sound/usb/stream.c | 165 ++++++++----- sound/usb/usbaudio.h | 1 + 9 files changed, 702 insertions(+), 71 deletions(-) create mode 100644 sound/usb/badd.c create mode 100644 sound/usb/badd.h