Module Name:    src
Committed By:   mlelstv
Date:           Sun Apr  2 14:43:35 UTC 2023

Modified Files:
        src/sys/dev/usb: uaudioreg.h

Log Message:
Add support for USB Audio Class 2.0.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/dev/usb/uaudioreg.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/uaudioreg.h
diff -u src/sys/dev/usb/uaudioreg.h:1.16 src/sys/dev/usb/uaudioreg.h:1.17
--- src/sys/dev/usb/uaudioreg.h:1.16	Fri May 18 07:52:54 2012
+++ src/sys/dev/usb/uaudioreg.h	Sun Apr  2 14:43:35 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: uaudioreg.h,v 1.16 2012/05/18 07:52:54 jdc Exp $	*/
+/*	$NetBSD: uaudioreg.h,v 1.17 2023/04/02 14:43:35 mlelstv Exp $	*/
 
 /*
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -30,7 +30,8 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#define UAUDIO_VERSION		0x100
+#define UAUDIO_VERSION1		0x100
+#define UAUDIO_VERSION2		0x200
 
 #define UDESC_CS_CONFIG		0x22
 #define UDESC_CS_STRING		0x23
@@ -43,8 +44,13 @@
 #define UDESCSUB_AC_MIXER	4
 #define UDESCSUB_AC_SELECTOR	5
 #define UDESCSUB_AC_FEATURE	6
-#define UDESCSUB_AC_PROCESSING	7
-#define UDESCSUB_AC_EXTENSION	8
+#define UDESCSUB_AC_EFFECT      7
+#define UDESCSUB_AC_PROCESSING	8
+#define UDESCSUB_AC_EXTENSION	9
+#define UDESCSUB_AC_CLKSRC	10
+#define UDESCSUB_AC_CLKSEL	11
+#define UDESCSUB_AC_CLKMULT	12
+#define UDESCSUB_AC_RATECONV    13
 
 /* The first fields are identical to usb_endpoint_descriptor_t */
 typedef struct {
@@ -82,7 +88,7 @@ struct usb_audio_control_descriptor {
 	uByte		baInterfaceNr[1];
 } UPACKED;
 
-struct usb_audio_streaming_interface_descriptor {
+struct usb_audio_streaming_interface_v1_descriptor {
 	uByte		bLength;
 	uByte		bDescriptorType;
 	uByte		bDescriptorSubtype;
@@ -91,6 +97,24 @@ struct usb_audio_streaming_interface_des
 	uWord		wFormatTag;
 } UPACKED;
 
+struct usb_audio_streaming_interface_v2_descriptor {
+	uByte		bLength;
+	uByte		bDescriptorType;
+	uByte		bDescriptorSubtype;
+	uByte		bTerminalLink;
+	uByte		bmControls;
+	uByte		bFormatType;
+	uDWord		bmFormats;
+	uByte		bNrChannels;
+	uDWord		bmChannelConfig;
+	uByte		iChannelNames;
+} UPACKED;
+
+union usb_audio_streaming_interface_descriptor {
+	struct usb_audio_streaming_interface_v1_descriptor v1;
+	struct usb_audio_streaming_interface_v2_descriptor v2;
+};
+
 struct usb_audio_streaming_endpoint_descriptor {
 	uByte		bLength;
 	uByte		bDescriptorType;
@@ -103,7 +127,7 @@ struct usb_audio_streaming_endpoint_desc
 	uWord		wLockDelay;
 } UPACKED;
 
-struct usb_audio_streaming_type1_descriptor {
+struct usb_audio_streaming_type1_v1_descriptor {
 	uByte		bLength;
 	uByte		bDescriptorType;
 	uByte		bDescriptorSubtype;
@@ -112,13 +136,27 @@ struct usb_audio_streaming_type1_descrip
 	uByte		bSubFrameSize;
 	uByte		bBitResolution;
 	uByte		bSamFreqType;
-#define UA_SAMP_CONTNUOUS 0
+#define UA_SAMP_CONTINUOUS 0
 	uByte		tSamFreq[3*AUFMT_MAX_FREQUENCIES];
 #define UA_GETSAMP(p, n) ((p)->tSamFreq[(n)*3+0] | ((p)->tSamFreq[(n)*3+1] << 8) | ((p)->tSamFreq[(n)*3+2] << 16))
 #define UA_SAMP_LO(p) UA_GETSAMP(p, 0)
 #define UA_SAMP_HI(p) UA_GETSAMP(p, 1)
 } UPACKED;
 
+struct usb_audio_streaming_type1_v2_descriptor {
+	uByte		bLength;
+	uByte		bDescriptorType;
+	uByte		bDescriptorSubtype;
+	uByte		bFormatType;
+	uByte		bSubslotSize;
+	uByte		bBitResolution;
+} UPACKED;
+
+union usb_audio_streaming_type1_descriptor {
+	struct usb_audio_streaming_type1_v1_descriptor v1;
+	struct usb_audio_streaming_type1_v2_descriptor v2;
+};
+
 struct usb_audio_cluster {
 	uByte		bNrChannels;
 	uWord		wChannelConfig;
@@ -260,6 +298,41 @@ struct usb_audio_extension_unit_1 {
 	/*uByte		iExtension;*/
 } UPACKED;
 
+/* UDESCSUB_AC_CLKSRC */
+struct usb_audio_clksrc_unit {
+	uByte		bLength;
+	uByte		bDescriptorType;
+	uByte		bDescriptorSubtype;
+	uByte		bClockId;
+	uByte		bmAttributes;
+	uByte		bmControls;
+	uByte		bAssocTerminal;
+	uByte		iClockSource;
+} UPACKED;
+
+/* UDESCSUB_AC_CLKSEL */
+struct usb_audio_clksel_unit {
+	uByte		bLength;
+	uByte		bDescriptorType;
+	uByte		bDescriptorSubtype;
+	uByte		bClockId;
+	uByte		bNrInPins;
+	uByte		baCSourceId[255];
+	/*uByte		bmControls;*/
+	/*uByte		iClockSelector;*/
+} UPACKED;
+
+/* UDESCSUB_AC_CLKMULT */
+struct usb_audio_clkmult_unit {
+	uByte		bLength;
+	uByte		bDescriptorType;
+	uByte		bDescriptorSubtype;
+	uByte		bClockId;
+	uByte		bCSourceId;
+	uByte		bmControls;
+	uByte		iClockMultiplier;
+} UPACKED;
+
 /* USB terminal types */
 #define UAT_UNDEFINED		0x0100
 #define UAT_STREAM		0x0101
@@ -336,6 +409,12 @@ struct usb_audio_extension_unit_1 {
 #define SET_MEM 0x05
 #define GET_MEM 0x85
 #define GET_STAT 0xff
+#define V2_CUR        0x01
+#define V2_RANGES     0x02
+
+#define V2_CUR_CLKFREQ	0x01
+#define V2_CUR_CLKSEL	0x01
+
 
 #define MUTE_CONTROL	0x01
 #define VOLUME_CONTROL	0x02
@@ -347,6 +426,9 @@ struct usb_audio_extension_unit_1 {
 #define DELAY_CONTROL	0x08
 #define BASS_BOOST_CONTROL 0x09
 #define LOUDNESS_CONTROL 0x0a
+#define GAIN_CONTROL	0x0b
+#define GAINPAD_CONTROL	0x0c
+#define PHASEINV_CONTROL 0x0d
 
 #define FU_MASK(u) (1 << ((u)-1))
 
@@ -364,6 +446,12 @@ struct usb_audio_extension_unit_1 {
 #define UA_FMT_MPEG	0x1001
 #define UA_FMT_AC3	0x1002
 
+#define UA_V2_FMT_PCM		0x01
+#define UA_V2_FMT_PCM8		0x02
+#define UA_V2_FMT_IEEE_FLOAT	0x04
+#define UA_V2_FMT_ALAW		0x08
+#define UA_V2_FMT_MULAW		0x10
+
 #define SAMPLING_FREQ_CONTROL	0x01
 #define PITCH_CONTROL		0x02
 

Reply via email to