1 /* $NetBSD: uaudioreg.h,v 1.12 2004/11/05 19:08:29 kent Exp $ */
2 /* $FreeBSD$ */
3
4 /*-
5 * SPDX-License-Identifier: BSD-2-Clause-NetBSD
6 *
7 * Copyright (c) 1999 The NetBSD Foundation, Inc.
8 * All rights reserved.
9 *
10 * This code is derived from software contributed to The NetBSD Foundation
11 * by Lennart Augustsson (lennart@augustsson.net) at
12 * Carlstedt Research & Technology.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions
16 * are met:
17 * 1. Redistributions of source code must retain the above copyright
18 * notice, this list of conditions and the following disclaimer.
19 * 2. Redistributions in binary form must reproduce the above copyright
20 * notice, this list of conditions and the following disclaimer in the
21 * documentation and/or other materials provided with the distribution.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
24 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
25 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
27 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 */
35
36 #ifndef _UAUDIOREG_H_
37 #define _UAUDIOREG_H_
38
39 #define UAUDIO_VERSION_10 0x0100
40 #define UAUDIO_VERSION_20 0x0200
41 #define UAUDIO_VERSION_30 0x0300
42
43 #define UAUDIO_PROTOCOL_20 0x20
44
45 #define UDESC_CS_UNDEFINED 0x20
46 #define UDESC_CS_DEVICE 0x21
47 #define UDESC_CS_CONFIG 0x22
48 #define UDESC_CS_STRING 0x23
49 #define UDESC_CS_INTERFACE 0x24
50 #define UDESC_CS_ENDPOINT 0x25
51
52 #define UDESCSUB_AC_HEADER 1
53 #define UDESCSUB_AC_INPUT 2
54 #define UDESCSUB_AC_OUTPUT 3
55 #define UDESCSUB_AC_MIXER 4
56 #define UDESCSUB_AC_SELECTOR 5
57 #define UDESCSUB_AC_FEATURE 6
58 #define UDESCSUB_AC_PROCESSING 7
59 #define UDESCSUB_AC_EXTENSION 8
60 /* ==== USB audio v2.0 ==== */
61 #define UDESCSUB_AC_EFFECT 7
62 #define UDESCSUB_AC_PROCESSING_V2 8
63 #define UDESCSUB_AC_EXTENSION_V2 9
64 #define UDESCSUB_AC_CLOCK_SRC 10
65 #define UDESCSUB_AC_CLOCK_SEL 11
66 #define UDESCSUB_AC_CLOCK_MUL 12
67 #define UDESCSUB_AC_SAMPLE_RT 13
68
69 /* These macros check if the endpoint descriptor has additional fields */
70 #define UEP_MINSIZE 7
71 #define UEP_HAS_REFRESH(ep) ((ep)->bLength >= 8)
72 #define UEP_HAS_SYNCADDR(ep) ((ep)->bLength >= 9)
73
74 /* The first fields are identical to struct usb_endpoint_descriptor */
75 typedef struct {
76 uByte bLength;
77 uByte bDescriptorType;
78 uByte bEndpointAddress;
79 uByte bmAttributes;
80 uWord wMaxPacketSize;
81 uByte bInterval;
82 /*
83 * The following two entries are only used by the Audio Class.
84 * And according to the specs the Audio Class is the only one
85 * allowed to extend the endpoint descriptor.
86 * Who knows what goes on in the minds of the people in the USB
87 * standardization? :-(
88 */
89 uByte bRefresh;
90 uByte bSynchAddress;
91 } __packed usb_endpoint_descriptor_audio_t;
92
93 struct usb_audio_control_descriptor {
94 uByte bLength;
95 uByte bDescriptorType;
96 uByte bDescriptorSubtype;
97 uWord bcdADC;
98 uWord wTotalLength;
99 uByte bInCollection;
100 uByte baInterfaceNr[1];
101 } __packed;
102
103 struct usb_audio_streaming_interface_descriptor {
104 uByte bLength;
105 uByte bDescriptorType;
106 uByte bDescriptorSubtype;
107 uByte bTerminalLink;
108 uByte bDelay;
109 uWord wFormatTag;
110 } __packed;
111
112 struct usb_audio_streaming_endpoint_descriptor {
113 uByte bLength;
114 uByte bDescriptorType;
115 uByte bDescriptorSubtype;
116 uByte bmAttributes;
117 #define UA_SED_FREQ_CONTROL 0x01
118 #define UA_SED_PITCH_CONTROL 0x02
119 #define UA_SED_MAXPACKETSONLY 0x80
120 uByte bLockDelayUnits;
121 uWord wLockDelay;
122 } __packed;
123
124 struct usb_midi_streaming_endpoint_descriptor {
125 uByte bLength;
126 uByte bDescriptorType;
127 uByte bDescriptorSubtype;
128 uByte bNumEmbMIDIJack;
129 } __packed;
130
131 struct usb_audio_streaming_type1_descriptor {
132 uByte bLength;
133 uByte bDescriptorType;
134 uByte bDescriptorSubtype;
135 uByte bFormatType;
136 uByte bNrChannels;
137 uByte bSubFrameSize;
138 uByte bBitResolution;
139 uByte bSamFreqType;
140 #define UA_SAMP_CONTNUOUS 0
141 uByte tSamFreq[0];
142 #define UA_GETSAMP(p, n) ((uint32_t)((((p)->tSamFreq[((n)*3)+0]) | \
143 ((p)->tSamFreq[((n)*3)+1] << 8) | \
144 ((p)->tSamFreq[((n)*3)+2] << 16))))
145 #define UA_SAMP_LO(p) UA_GETSAMP(p, 0)
146 #define UA_SAMP_HI(p) UA_GETSAMP(p, 1)
147 } __packed;
148
149 struct usb_audio_cluster {
150 uByte bNrChannels;
151 uWord wChannelConfig;
152 #define UA_CHANNEL_LEFT 0x0001
153 #define UA_CHANNEL_RIGHT 0x0002
154 #define UA_CHANNEL_CENTER 0x0004
155 #define UA_CHANNEL_LFE 0x0008
156 #define UA_CHANNEL_L_SURROUND 0x0010
157 #define UA_CHANNEL_R_SURROUND 0x0020
158 #define UA_CHANNEL_L_CENTER 0x0040
159 #define UA_CHANNEL_R_CENTER 0x0080
160 #define UA_CHANNEL_SURROUND 0x0100
161 #define UA_CHANNEL_L_SIDE 0x0200
162 #define UA_CHANNEL_R_SIDE 0x0400
163 #define UA_CHANNEL_TOP 0x0800
164 uByte iChannelNames;
165 } __packed;
166
167 /* Shared by all units and terminals */
168 struct usb_audio_unit {
169 uByte bLength;
170 uByte bDescriptorType;
171 uByte bDescriptorSubtype;
172 uByte bUnitId;
173 };
174
175 /* UDESCSUB_AC_INPUT */
176 struct usb_audio_input_terminal {
177 uByte bLength;
178 uByte bDescriptorType;
179 uByte bDescriptorSubtype;
180 uByte bTerminalId;
181 uWord wTerminalType;
182 uByte bAssocTerminal;
183 uByte bNrChannels;
184 uWord wChannelConfig;
185 uByte iChannelNames;
186 /* uByte iTerminal; */
187 } __packed;
188
189 /* UDESCSUB_AC_OUTPUT */
190 struct usb_audio_output_terminal {
191 uByte bLength;
192 uByte bDescriptorType;
193 uByte bDescriptorSubtype;
194 uByte bTerminalId;
195 uWord wTerminalType;
196 uByte bAssocTerminal;
197 uByte bSourceId;
198 uByte iTerminal;
199 } __packed;
200
201 /* UDESCSUB_AC_MIXER */
202 struct usb_audio_mixer_unit_0 {
203 uByte bLength;
204 uByte bDescriptorType;
205 uByte bDescriptorSubtype;
206 uByte bUnitId;
207 uByte bNrInPins;
208 uByte baSourceId[0]; /* [bNrInPins] */
209 /* struct usb_audio_mixer_unit_1 */
210 } __packed;
211 struct usb_audio_mixer_unit_1 {
212 uByte bNrChannels;
213 uWord wChannelConfig;
214 uByte iChannelNames;
215 uByte bmControls[0]; /* [see source code] */
216 /* uByte iMixer; */
217 } __packed;
218
219 /* UDESCSUB_AC_SELECTOR */
220 struct usb_audio_selector_unit {
221 uByte bLength;
222 uByte bDescriptorType;
223 uByte bDescriptorSubtype;
224 uByte bUnitId;
225 uByte bNrInPins;
226 uByte baSourceId[0]; /* [bNrInPins] */
227 /* uByte iSelector; */
228 } __packed;
229
230 /* UDESCSUB_AC_FEATURE */
231 struct usb_audio_feature_unit {
232 uByte bLength;
233 uByte bDescriptorType;
234 uByte bDescriptorSubtype;
235 uByte bUnitId;
236 uByte bSourceId;
237 uByte bControlSize;
238 uByte bmaControls[0]; /* [bControlSize * x] */
239 /* uByte iFeature; */
240 } __packed;
241
242 /* UDESCSUB_AC_PROCESSING */
243 struct usb_audio_processing_unit_0 {
244 uByte bLength;
245 uByte bDescriptorType;
246 uByte bDescriptorSubtype;
247 uByte bUnitId;
248 uWord wProcessType;
249 uByte bNrInPins;
250 uByte baSourceId[0]; /* [bNrInPins] */
251 /* struct usb_audio_processing_unit_1 */
252 } __packed;
253 struct usb_audio_processing_unit_1 {
254 uByte bNrChannels;
255 uWord wChannelConfig;
256 uByte iChannelNames;
257 uByte bControlSize;
258 uByte bmControls[0]; /* [bControlSize] */
259 #define UA_PROC_ENABLE_MASK 1
260 } __packed;
261
262 struct usb_audio_processing_unit_updown {
263 uByte iProcessing;
264 uByte bNrModes;
265 uWord waModes[0]; /* [bNrModes] */
266 } __packed;
267
268 /* UDESCSUB_AC_EXTENSION */
269 struct usb_audio_extension_unit_0 {
270 uByte bLength;
271 uByte bDescriptorType;
272 uByte bDescriptorSubtype;
273 uByte bUnitId;
274 uWord wExtensionCode;
275 uByte bNrInPins;
276 uByte baSourceId[0]; /* [bNrInPins] */
277 /* struct usb_audio_extension_unit_1 */
278 } __packed;
279
280 struct usb_audio_extension_unit_1 {
281 uByte bNrChannels;
282 uWord wChannelConfig;
283 uByte iChannelNames;
284 uByte bControlSize;
285 uByte bmControls[0]; /* [bControlSize] */
286 #define UA_EXT_ENABLE_MASK 1
287 #define UA_EXT_ENABLE 1
288 /* uByte iExtension; */
289 } __packed;
290
291 /* USB terminal types */
292 #define UAT_UNDEFINED 0x0100
293 #define UAT_STREAM 0x0101
294 #define UAT_VENDOR 0x01ff
295 /* input terminal types */
296 #define UATI_UNDEFINED 0x0200
297 #define UATI_MICROPHONE 0x0201
298 #define UATI_DESKMICROPHONE 0x0202
299 #define UATI_PERSONALMICROPHONE 0x0203
300 #define UATI_OMNIMICROPHONE 0x0204
301 #define UATI_MICROPHONEARRAY 0x0205
302 #define UATI_PROCMICROPHONEARR 0x0206
303 /* output terminal types */
304 #define UATO_UNDEFINED 0x0300
305 #define UATO_SPEAKER 0x0301
306 #define UATO_HEADPHONES 0x0302
307 #define UATO_DISPLAYAUDIO 0x0303
308 #define UATO_DESKTOPSPEAKER 0x0304
309 #define UATO_ROOMSPEAKER 0x0305
310 #define UATO_COMMSPEAKER 0x0306
311 #define UATO_SUBWOOFER 0x0307
312 /* bidir terminal types */
313 #define UATB_UNDEFINED 0x0400
314 #define UATB_HANDSET 0x0401
315 #define UATB_HEADSET 0x0402
316 #define UATB_SPEAKERPHONE 0x0403
317 #define UATB_SPEAKERPHONEESUP 0x0404
318 #define UATB_SPEAKERPHONEECANC 0x0405
319 /* telephony terminal types */
320 #define UATT_UNDEFINED 0x0500
321 #define UATT_PHONELINE 0x0501
322 #define UATT_TELEPHONE 0x0502
323 #define UATT_DOWNLINEPHONE 0x0503
324 /* external terminal types */
325 #define UATE_UNDEFINED 0x0600
326 #define UATE_ANALOGCONN 0x0601
327 #define UATE_DIGITALAUIFC 0x0602
328 #define UATE_LINECONN 0x0603
329 #define UATE_LEGACYCONN 0x0604
330 #define UATE_SPDIF 0x0605
331 #define UATE_1394DA 0x0606
332 #define UATE_1394DV 0x0607
333 /* embedded function terminal types */
334 #define UATF_UNDEFINED 0x0700
335 #define UATF_CALIBNOISE 0x0701
336 #define UATF_EQUNOISE 0x0702
337 #define UATF_CDPLAYER 0x0703
338 #define UATF_DAT 0x0704
339 #define UATF_DCC 0x0705
340 #define UATF_MINIDISK 0x0706
341 #define UATF_ANALOGTAPE 0x0707
342 #define UATF_PHONOGRAPH 0x0708
343 #define UATF_VCRAUDIO 0x0709
344 #define UATF_VIDEODISCAUDIO 0x070a
345 #define UATF_DVDAUDIO 0x070b
346 #define UATF_TVTUNERAUDIO 0x070c
347 #define UATF_SATELLITE 0x070d
348 #define UATF_CABLETUNER 0x070e
349 #define UATF_DSS 0x070f
350 #define UATF_RADIORECV 0x0710
351 #define UATF_RADIOXMIT 0x0711
352 #define UATF_MULTITRACK 0x0712
353 #define UATF_SYNTHESIZER 0x0713
354
355 #define SET_CUR 0x01
356 #define GET_CUR 0x81
357 #define SET_MIN 0x02
358 #define GET_MIN 0x82
359 #define SET_MAX 0x03
360 #define GET_MAX 0x83
361 #define SET_RES 0x04
362 #define GET_RES 0x84
363 #define SET_MEM 0x05
364 #define GET_MEM 0x85
365 #define GET_STAT 0xff
366
367 #define MUTE_CONTROL 0x01
368 #define VOLUME_CONTROL 0x02
369 #define BASS_CONTROL 0x03
370 #define MID_CONTROL 0x04
371 #define TREBLE_CONTROL 0x05
372 #define GRAPHIC_EQUALIZER_CONTROL 0x06
373 #define AGC_CONTROL 0x07
374 #define DELAY_CONTROL 0x08
375 #define BASS_BOOST_CONTROL 0x09
376 #define LOUDNESS_CONTROL 0x0a
377 /* ==== USB audio v2.0 ==== */
378 #define INPUT_GAIN_CONTROL 0x0b
379 #define INPUT_GAIN_PAD_CONTROL 0x0c
380 #define PHASE_INVERTER_CONTROL 0x0d
381 #define UNDERFLOW_CONTROL 0x0e
382 #define OVERFLOW_CONTROL 0x0f
383 #define LATENCY_CONTROL 0x10
384
385 #define FU_MASK(u) (1 << ((u)-1))
386
387 #define MASTER_CHAN 0
388
389 #define MS_GENERAL 1
390 #define AS_GENERAL 1
391 #define FORMAT_TYPE 2
392 #define FORMAT_SPECIFIC 3
393 /* ==== USB audio v2.0 ==== */
394 #define FORMAT_ENCODER 3
395 #define FORMAT_DECODER 4
396
397 #define UA_FMT_PCM 1
398 #define UA_FMT_PCM8 2
399 #define UA_FMT_IEEE_FLOAT 3
400 #define UA_FMT_ALAW 4
401 #define UA_FMT_MULAW 5
402 #define UA_FMT_MPEG 0x1001
403 #define UA_FMT_AC3 0x1002
404
405 #define SAMPLING_FREQ_CONTROL 0x01
406 #define PITCH_CONTROL 0x02
407
408 #define FORMAT_TYPE_UNDEFINED 0
409 #define FORMAT_TYPE_I 1
410 #define FORMAT_TYPE_II 2
411 #define FORMAT_TYPE_III 3
412
413 #define UA_PROC_MASK(n) (1<< ((n)-1))
414 #define PROCESS_UNDEFINED 0
415 #define XX_ENABLE_CONTROL 1
416 #define UPDOWNMIX_PROCESS 1
417 #define UD_ENABLE_CONTROL 1
418 #define UD_MODE_SELECT_CONTROL 2
419 #define DOLBY_PROLOGIC_PROCESS 2
420 #define DP_ENABLE_CONTROL 1
421 #define DP_MODE_SELECT_CONTROL 2
422 #define P3D_STEREO_EXTENDER_PROCESS 3
423 #define P3D_ENABLE_CONTROL 1
424 #define P3D_SPACIOUSNESS_CONTROL 2
425 #define REVERBATION_PROCESS 4
426 #define RV_ENABLE_CONTROL 1
427 #define RV_LEVEL_CONTROL 2
428 #define RV_TIME_CONTROL 3
429 #define RV_FEEDBACK_CONTROL 4
430 #define CHORUS_PROCESS 5
431 #define CH_ENABLE_CONTROL 1
432 #define CH_LEVEL_CONTROL 2
433 #define CH_RATE_CONTROL 3
434 #define CH_DEPTH_CONTROL 4
435 #define DYN_RANGE_COMP_PROCESS 6
436 #define DR_ENABLE_CONTROL 1
437 #define DR_COMPRESSION_RATE_CONTROL 2
438 #define DR_MAXAMPL_CONTROL 3
439 #define DR_THRESHOLD_CONTROL 4
440 #define DR_ATTACK_TIME_CONTROL 5
441 #define DR_RELEASE_TIME_CONTROL 6
442
443 /*------------------------------------------------------------------------*
444 * USB audio v2.0 definitions
445 *------------------------------------------------------------------------*/
446
447 struct usb_audio20_streaming_interface_descriptor {
448 uByte bLength;
449 uByte bDescriptorType;
450 uByte bDescriptorSubtype;
451 uByte bTerminalLink;
452 uByte bmControls;
453 uByte bFormatType;
454 uDWord bmFormats;
455 uByte bNrChannels;
456 uDWord bmChannelConfig;
457 uByte iChannelNames;
458 } __packed;
459
460 struct usb_audio20_encoder_descriptor {
461 uByte bLength;
462 uByte bDescriptorType;
463 uByte bDescriptorSubtype;
464 uByte bEncoderID;
465 uByte bEncoder;
466 uDWord bmControls;
467 uByte iParam1;
468 uByte iParam2;
469 uByte iParam3;
470 uByte iParam4;
471 uByte iParam5;
472 uByte iParam6;
473 uByte iParam7;
474 uByte iParam8;
475 uByte iEncoder;
476 } __packed;
477
478 struct usb_audio20_streaming_endpoint_descriptor {
479 uByte bLength;
480 uByte bDescriptorType;
481 uByte bDescriptorSubtype;
482 uByte bmAttributes;
483 #define UA20_MPS_ONLY 0x80
484 uByte bmControls;
485 #define UA20_PITCH_CONTROL_MASK 0x03
486 #define UA20_DATA_OVERRUN_MASK 0x0C
487 #define UA20_DATA_UNDERRUN_MASK 0x30
488 uByte bLockDelayUnits;
489 uWord wLockDelay;
490 } __packed;
491
492 struct usb_audio20_feedback_endpoint_descriptor {
493 uByte bLength;
494 uByte bDescriptorType;
495 uByte bEndpointAddress;
496 uByte bmAttributes;
497 uWord wMaxPacketSize;
498 uByte bInterval;
499 } __packed;
500
501 #define UA20_CS_CUR 0x01
502 #define UA20_CS_RANGE 0x02
503 #define UA20_CS_MEM 0x03
504
505 struct usb_audio20_cur1_parameter {
506 uByte bCur;
507 } __packed;
508
509 struct usb_audio20_ctl1_range_sub {
510 uByte bMIN;
511 uByte bMAX;
512 uByte bRES;
513 } __packed;
514
515 struct usb_audio20_ctl1_range {
516 uWord wNumSubRanges;
517 struct usb_audio20_ctl1_range_sub sub[1];
518 } __packed;
519
520 struct usb_audio20_cur2_parameter {
521 uWord wCur;
522 } __packed;
523
524 struct usb_audio20_ctl2_range_sub {
525 uWord wMIN;
526 uWord wMAX;
527 uWord wRES;
528 } __packed;
529
530 struct usb_audio20_ctl2_range {
531 uWord wNumSubRanges;
532 struct usb_audio20_ctl2_range_sub sub[1];
533 } __packed;
534
535 struct usb_audio20_cur4_parameter {
536 uDWord dCur;
537 } __packed;
538
539 struct usb_audio20_ctl4_range_sub {
540 uDWord dMIN;
541 uDWord dMAX;
542 uDWord dRES;
543 } __packed;
544
545 struct usb_audio20_ctl4_range {
546 uWord wNumSubRanges;
547 struct usb_audio20_ctl4_range_sub sub[1];
548 } __packed;
549
550 struct usb_audio20_cc_cluster_descriptor {
551 uByte bNrChannels;
552 uDWord bmChannelConfig;
553 uByte iChannelNames;
554 } __packed;
555
556 struct usb_audio20_streaming_type1_descriptor {
557 uByte bLength;
558 uByte bDescriptorType;
559 uByte bDescriptorSubtype;
560 uByte bFormatType;
561 uByte bSubslotSize;
562 uByte bBitResolution;
563 } __packed;
564
565 #define UA20_EERROR_NONE 0
566 #define UA20_EERROR_MEMORY 1
567 #define UA20_EERROR_BANDWIDTH 2
568 #define UA20_EERROR_CPU 3
569 #define UA20_EERROR_FORMATFR_ER 4
570 #define UA20_EERROR_FORMATFR_SM 5
571 #define UA20_EERROR_FORMATFR_LG 6
572 #define UA20_EERROR_DATAFORMAT 7
573 #define UA20_EERROR_NUMCHANNELS 8
574 #define UA20_EERROR_SAMPLERATE 9
575 #define UA20_EERROR_BITRATE 10
576 #define UA20_EERROR_PARAM 11
577 #define UA20_EERROR_NREADY 12
578 #define UA20_EERROR_BUSY 13
579
580 struct usb_audio20_cc_alt_setting {
581 uByte bControlSize;
582 uDWord bmValidAltSettings;
583 } __packed;
584
585 struct usb_audio20_interrupt_message {
586 uByte bInfo;
587 uByte bAttribute;
588 uDWord wValue;
589 uDWord wIndex;
590 } __packed;
591
592 /* UDESCSUB_AC_CLOCK_SRC */
593 struct usb_audio20_clock_source_unit {
594 uByte bLength;
595 uByte bDescriptorType;
596 uByte bDescriptorSubtype;
597 uByte bClockId;
598 uByte bmAttributes;
599 uByte bmControls;
600 uByte bAssocTerminal;
601 uByte iClockSource;
602 } __packed;
603
604 /* UDESCSUB_AC_CLOCK_SEL */
605 struct usb_audio20_clock_selector_unit_0 {
606 uByte bLength;
607 uByte bDescriptorType;
608 uByte bDescriptorSubtype;
609 uByte bClockId;
610 uByte bNrInPins;
611 uByte baCSourceId[0];
612 } __packed;
613
614 struct usb_audio20_clock_selector_unit_1 {
615 uByte bmControls;
616 uByte iClockSelector;
617 } __packed;
618
619 /* UDESCSUB_AC_CLOCK_MUL */
620 struct usb_audio20_clock_multiplier_unit {
621 uByte bLength;
622 uByte bDescriptorType;
623 uByte bDescriptorSubtype;
624 uByte bClockId;
625 uByte bCSourceId;
626 uByte bmControls;
627 uByte iClockMultiplier;
628 } __packed;
629
630 /* UDESCSUB_AC_INPUT */
631 struct usb_audio20_input_terminal {
632 uByte bLength;
633 uByte bDescriptorType;
634 uByte bDescriptorSubtype;
635 uByte bTerminalId;
636 uWord wTerminalType;
637 uByte bAssocTerminal;
638 uByte bCSourceId;
639 uByte bNrChannels;
640 uDWord bmChannelConfig;
641 uByte iCHannelNames;
642 uWord bmControls;
643 uByte iTerminal;
644 } __packed;
645
646 /* UDESCSUB_AC_OUTPUT */
647 struct usb_audio20_output_terminal {
648 uByte bLength;
649 uByte bDescriptorType;
650 uByte bDescriptorSubtype;
651 uByte bTerminalId;
652 uWord wTerminalType;
653 uByte bAssocTerminal;
654 uByte bSourceId;
655 uByte bCSourceId;
656 uWord bmControls;
657 uByte iTerminal;
658 } __packed;
659
660 /* UDESCSUB_AC_MIXER */
661 struct usb_audio20_mixer_unit_0 {
662 uByte bLength;
663 uByte bDescriptorType;
664 uByte bDescriptorSubtype;
665 uByte bUnitId;
666 uByte bNrInPins;
667 uByte baSourceId[0];
668 /* struct usb_audio20_mixer_unit_1 */
669 } __packed;
670
671 struct usb_audio20_mixer_unit_1 {
672 uByte bNrChannels;
673 uDWord bmChannelConfig;
674 uByte iChannelNames;
675 uByte bmControls[0];
676 /* uByte iMixer; */
677 } __packed;
678
679 /* UDESCSUB_AC_SELECTOR */
680 struct usb_audio20_selector_unit {
681 uByte bLength;
682 uByte bDescriptorType;
683 uByte bDescriptorSubtype;
684 uByte bUnitId;
685 uByte bNrInPins;
686 uByte baSourceId[0];
687 /* uByte iSelector; */
688 } __packed;
689
690 /* UDESCSUB_AC_FEATURE */
691 struct usb_audio20_feature_unit {
692 uByte bLength;
693 uByte bDescriptorType;
694 uByte bDescriptorSubtype;
695 uByte bUnitId;
696 uByte bSourceId;
697 uDWord bmaControls[0];
698 /* uByte iFeature; */
699 } __packed;
700
701 /* UDESCSUB_AC_SAMPLE_RT */
702 struct usb_audio20_sample_rate_unit {
703 uByte bLength;
704 uByte bDescriptorType;
705 uByte bDescriptorSubtype;
706 uByte bUnitId;
707 uByte bSourceId;
708 uByte bSourceInId;
709 uByte bSourceOutId;
710 uByte iSrc;
711 } __packed;
712
713 /* UDESCSUB_AC_EFFECT */
714 struct usb_audio20_effect_unit {
715 uByte bLength;
716 uByte bDescriptorType;
717 uByte bDescriptorSubtype;
718 uByte bUnitId;
719 uWord wEffectType;
720 uByte bSourceId;
721 uDWord bmaControls[0];
722 uByte iEffects;
723 } __packed;
724
725 /* UDESCSUB_AC_PROCESSING_V2 */
726 struct usb_audio20_processing_unit_0 {
727 uByte bLength;
728 uByte bDescriptorType;
729 uByte bDescriptorSubtype;
730 uByte bUnitId;
731 uWord wProcessType;
732 uByte bNrInPins;
733 uByte baSourceId[0]; /* [bNrInPins] */
734 } __packed;
735
736 struct usb_audio20_processing_unit_1 {
737 uByte bNrChannels;
738 uDWord bmChannelConfig;
739 uByte iChannelNames;
740 uWord bmControls;
741 uByte iProcessing;
742 } __packed;
743
744 /* UDESCSUB_AC_EXTENSION_V2 */
745 struct usb_audio20_extension_unit_0 {
746 uByte bLength;
747 uByte bDescriptorType;
748 uByte bDescriptorSubtype;
749 uByte bUnitId;
750 uWord wExtensionCode;
751 uByte bNrInPins;
752 uByte baSourceId[0];
753 } __packed;
754
755 struct usb_audio20_extension_unit_1 {
756 uByte bNrChannels;
757 uDWord bmChannelConfig;
758 uByte iChannelNames;
759 uByte bmControls;
760 uByte iExtension;
761 } __packed;
762
763 struct usb_audio20_cluster {
764 uByte bNrChannels;
765 uDWord bmChannelConfig;
766 uByte iChannelNames;
767 } __packed;
768
769 #define UA20_TF_UNDEFINED 0x00
770 #define UA20_TF_DESKTOP_SPEAKER 0x01
771 #define UA20_TF_HOME_THEATER 0x02
772 #define UA20_TF_MICROPHONE 0x03
773 #define UA20_TF_HEADSET 0x04
774 #define UA20_TF_TELEPHONE 0x05
775 #define UA20_TF_CONVERTER 0x06
776 #define UA20_TF_SOUND_RECORDER 0x07
777 #define UA20_TF_IO_BOX 0x08
778 #define UA20_TF_MUSICAL_INSTRUMENT 0x09
779 #define UA20_TF_PRO_AUDIO 0x0A
780 #define UA20_TF_AV 0x0B
781 #define UA20_TF_CONTROL_PANEL 0x0C
782 #define UA20_TF_OTHER 0xFF
783
784 #define UA20_CS_SAM_FREQ_CONTROL 0x01
785 #define UA20_CS_CLOCK_VALID_CONTROL 0x02
786
787 #define UA20_TE_COPY_PROTECT_CONTROL 0x01
788 #define UA20_TE_CONNECTOR_CONTROL 0x02
789 #define UA20_TE_OVERLOAD_CONTROL 0x03
790 #define UA20_TE_CLUSTER_CONTROL 0x04
791 #define UA20_TE_UNDERFLOW_CONTROL 0x05
792 #define UA20_TE_OVERFLOW_CONTROL 0x06
793 #define UA20_TE_LATENCY_CONTROL 0x07
794
795 #define UA20_MU_MIXER_CONTROL 0x01
796 #define UA20_MU_CLUSTER_CONTROL 0x02
797 #define UA20_MU_UNDERFLOW_CONTROL 0x03
798 #define UA20_MU_OVERFLOW_CONTROL 0x04
799 #define UA20_MU_LATENCY_CONTROL 0x05
800
801 #define UA20_FMT_PCM (1U << 0)
802 #define UA20_FMT_PCM8 (1U << 1)
803 #define UA20_FMT_FLOAT (1U << 2)
804 #define UA20_FMT_ALAW (1U << 3)
805 #define UA20_FMT_MULAW (1U << 4)
806 #define UA20_FMT_RAW (1U << 31)
807
808 #endif /* _UAUDIOREG_H_ */
Cache object: e9d8bafcc3b99efea372c62833b66cc9
|