uaudioreg.h revision 330897
1/* $NetBSD: uaudioreg.h,v 1.12 2004/11/05 19:08:29 kent Exp $ */ 2/* $FreeBSD: stable/11/sys/dev/sound/usb/uaudioreg.h 330897 2018-03-14 03:19:51Z eadler $ */ 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 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 */ 75typedef 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 93struct 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 103struct 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 112struct 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 124struct usb_midi_streaming_endpoint_descriptor { 125 uByte bLength; 126 uByte bDescriptorType; 127 uByte bDescriptorSubtype; 128 uByte bNumEmbMIDIJack; 129} __packed; 130 131struct 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 149struct 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 */ 168struct usb_audio_unit { 169 uByte bLength; 170 uByte bDescriptorType; 171 uByte bDescriptorSubtype; 172 uByte bUnitId; 173}; 174 175/* UDESCSUB_AC_INPUT */ 176struct 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 */ 190struct 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 */ 202struct 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; 211struct 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 */ 220struct 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 */ 231struct 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 */ 243struct 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; 253struct 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 262struct usb_audio_processing_unit_updown { 263 uByte iProcessing; 264 uByte bNrModes; 265 uWord waModes[0]; /* [bNrModes] */ 266} __packed; 267 268/* UDESCSUB_AC_EXTENSION */ 269struct 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 280struct 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 356#define SET_CUR 0x01 357#define GET_CUR 0x81 358#define SET_MIN 0x02 359#define GET_MIN 0x82 360#define SET_MAX 0x03 361#define GET_MAX 0x83 362#define SET_RES 0x04 363#define GET_RES 0x84 364#define SET_MEM 0x05 365#define GET_MEM 0x85 366#define GET_STAT 0xff 367 368#define MUTE_CONTROL 0x01 369#define VOLUME_CONTROL 0x02 370#define BASS_CONTROL 0x03 371#define MID_CONTROL 0x04 372#define TREBLE_CONTROL 0x05 373#define GRAPHIC_EQUALIZER_CONTROL 0x06 374#define AGC_CONTROL 0x07 375#define DELAY_CONTROL 0x08 376#define BASS_BOOST_CONTROL 0x09 377#define LOUDNESS_CONTROL 0x0a 378/* ==== USB audio v2.0 ==== */ 379#define INPUT_GAIN_CONTROL 0x0b 380#define INPUT_GAIN_PAD_CONTROL 0x0c 381#define PHASE_INVERTER_CONTROL 0x0d 382#define UNDERFLOW_CONTROL 0x0e 383#define OVERFLOW_CONTROL 0x0f 384#define LATENCY_CONTROL 0x10 385 386#define FU_MASK(u) (1 << ((u)-1)) 387 388#define MASTER_CHAN 0 389 390#define MS_GENERAL 1 391#define AS_GENERAL 1 392#define FORMAT_TYPE 2 393#define FORMAT_SPECIFIC 3 394/* ==== USB audio v2.0 ==== */ 395#define FORMAT_ENCODER 3 396#define FORMAT_DECODER 4 397 398#define UA_FMT_PCM 1 399#define UA_FMT_PCM8 2 400#define UA_FMT_IEEE_FLOAT 3 401#define UA_FMT_ALAW 4 402#define UA_FMT_MULAW 5 403#define UA_FMT_MPEG 0x1001 404#define UA_FMT_AC3 0x1002 405 406#define SAMPLING_FREQ_CONTROL 0x01 407#define PITCH_CONTROL 0x02 408 409#define FORMAT_TYPE_UNDEFINED 0 410#define FORMAT_TYPE_I 1 411#define FORMAT_TYPE_II 2 412#define FORMAT_TYPE_III 3 413 414#define UA_PROC_MASK(n) (1<< ((n)-1)) 415#define PROCESS_UNDEFINED 0 416#define XX_ENABLE_CONTROL 1 417#define UPDOWNMIX_PROCESS 1 418#define UD_ENABLE_CONTROL 1 419#define UD_MODE_SELECT_CONTROL 2 420#define DOLBY_PROLOGIC_PROCESS 2 421#define DP_ENABLE_CONTROL 1 422#define DP_MODE_SELECT_CONTROL 2 423#define P3D_STEREO_EXTENDER_PROCESS 3 424#define P3D_ENABLE_CONTROL 1 425#define P3D_SPACIOUSNESS_CONTROL 2 426#define REVERBATION_PROCESS 4 427#define RV_ENABLE_CONTROL 1 428#define RV_LEVEL_CONTROL 2 429#define RV_TIME_CONTROL 3 430#define RV_FEEDBACK_CONTROL 4 431#define CHORUS_PROCESS 5 432#define CH_ENABLE_CONTROL 1 433#define CH_LEVEL_CONTROL 2 434#define CH_RATE_CONTROL 3 435#define CH_DEPTH_CONTROL 4 436#define DYN_RANGE_COMP_PROCESS 6 437#define DR_ENABLE_CONTROL 1 438#define DR_COMPRESSION_RATE_CONTROL 2 439#define DR_MAXAMPL_CONTROL 3 440#define DR_THRESHOLD_CONTROL 4 441#define DR_ATTACK_TIME_CONTROL 5 442#define DR_RELEASE_TIME_CONTROL 6 443 444/*------------------------------------------------------------------------* 445 * USB audio v2.0 definitions 446 *------------------------------------------------------------------------*/ 447 448struct usb_audio20_streaming_interface_descriptor { 449 uByte bLength; 450 uByte bDescriptorType; 451 uByte bDescriptorSubtype; 452 uByte bTerminalLink; 453 uByte bmControls; 454 uByte bFormatType; 455 uDWord bmFormats; 456 uByte bNrChannels; 457 uDWord bmChannelConfig; 458 uByte iChannelNames; 459} __packed; 460 461struct usb_audio20_encoder_descriptor { 462 uByte bLength; 463 uByte bDescriptorType; 464 uByte bDescriptorSubtype; 465 uByte bEncoderID; 466 uByte bEncoder; 467 uDWord bmControls; 468 uByte iParam1; 469 uByte iParam2; 470 uByte iParam3; 471 uByte iParam4; 472 uByte iParam5; 473 uByte iParam6; 474 uByte iParam7; 475 uByte iParam8; 476 uByte iEncoder; 477} __packed; 478 479struct usb_audio20_streaming_endpoint_descriptor { 480 uByte bLength; 481 uByte bDescriptorType; 482 uByte bDescriptorSubtype; 483 uByte bmAttributes; 484#define UA20_MPS_ONLY 0x80 485 uByte bmControls; 486#define UA20_PITCH_CONTROL_MASK 0x03 487#define UA20_DATA_OVERRUN_MASK 0x0C 488#define UA20_DATA_UNDERRUN_MASK 0x30 489 uByte bLockDelayUnits; 490 uWord wLockDelay; 491} __packed; 492 493struct usb_audio20_feedback_endpoint_descriptor { 494 uByte bLength; 495 uByte bDescriptorType; 496 uByte bEndpointAddress; 497 uByte bmAttributes; 498 uWord wMaxPacketSize; 499 uByte bInterval; 500} __packed; 501 502#define UA20_CS_CUR 0x01 503#define UA20_CS_RANGE 0x02 504#define UA20_CS_MEM 0x03 505 506struct usb_audio20_cur1_parameter { 507 uByte bCur; 508} __packed; 509 510struct usb_audio20_ctl1_range_sub { 511 uByte bMIN; 512 uByte bMAX; 513 uByte bRES; 514} __packed; 515 516struct usb_audio20_ctl1_range { 517 uWord wNumSubRanges; 518 struct usb_audio20_ctl1_range_sub sub[1]; 519} __packed; 520 521struct usb_audio20_cur2_parameter { 522 uWord wCur; 523} __packed; 524 525struct usb_audio20_ctl2_range_sub { 526 uWord wMIN; 527 uWord wMAX; 528 uWord wRES; 529} __packed; 530 531struct usb_audio20_ctl2_range { 532 uWord wNumSubRanges; 533 struct usb_audio20_ctl2_range_sub sub[1]; 534} __packed; 535 536struct usb_audio20_cur4_parameter { 537 uDWord dCur; 538} __packed; 539 540struct usb_audio20_ctl4_range_sub { 541 uDWord dMIN; 542 uDWord dMAX; 543 uDWord dRES; 544} __packed; 545 546struct usb_audio20_ctl4_range { 547 uWord wNumSubRanges; 548 struct usb_audio20_ctl4_range_sub sub[1]; 549} __packed; 550 551struct usb_audio20_cc_cluster_descriptor { 552 uByte bNrChannels; 553 uDWord bmChannelConfig; 554 uByte iChannelNames; 555} __packed; 556 557struct usb_audio20_streaming_type1_descriptor { 558 uByte bLength; 559 uByte bDescriptorType; 560 uByte bDescriptorSubtype; 561 uByte bFormatType; 562 uByte bSubslotSize; 563 uByte bBitResolution; 564} __packed; 565 566#define UA20_EERROR_NONE 0 567#define UA20_EERROR_MEMORY 1 568#define UA20_EERROR_BANDWIDTH 2 569#define UA20_EERROR_CPU 3 570#define UA20_EERROR_FORMATFR_ER 4 571#define UA20_EERROR_FORMATFR_SM 5 572#define UA20_EERROR_FORMATFR_LG 6 573#define UA20_EERROR_DATAFORMAT 7 574#define UA20_EERROR_NUMCHANNELS 8 575#define UA20_EERROR_SAMPLERATE 9 576#define UA20_EERROR_BITRATE 10 577#define UA20_EERROR_PARAM 11 578#define UA20_EERROR_NREADY 12 579#define UA20_EERROR_BUSY 13 580 581struct usb_audio20_cc_alt_setting { 582 uByte bControlSize; 583 uDWord bmValidAltSettings; 584} __packed; 585 586struct usb_audio20_interrupt_message { 587 uByte bInfo; 588 uByte bAttribute; 589 uDWord wValue; 590 uDWord wIndex; 591} __packed; 592 593/* UDESCSUB_AC_CLOCK_SRC */ 594struct usb_audio20_clock_source_unit { 595 uByte bLength; 596 uByte bDescriptorType; 597 uByte bDescriptorSubtype; 598 uByte bClockId; 599 uByte bmAttributes; 600 uByte bmControls; 601 uByte bAssocTerminal; 602 uByte iClockSource; 603} __packed; 604 605/* UDESCSUB_AC_CLOCK_SEL */ 606struct usb_audio20_clock_selector_unit_0 { 607 uByte bLength; 608 uByte bDescriptorType; 609 uByte bDescriptorSubtype; 610 uByte bClockId; 611 uByte bNrInPins; 612 uByte baCSourceId[0]; 613} __packed; 614 615struct usb_audio20_clock_selector_unit_1 { 616 uByte bmControls; 617 uByte iClockSelector; 618} __packed; 619 620/* UDESCSUB_AC_CLOCK_MUL */ 621struct usb_audio20_clock_multiplier_unit { 622 uByte bLength; 623 uByte bDescriptorType; 624 uByte bDescriptorSubtype; 625 uByte bClockId; 626 uByte bCSourceId; 627 uByte bmControls; 628 uByte iClockMultiplier; 629} __packed; 630 631/* UDESCSUB_AC_INPUT */ 632struct usb_audio20_input_terminal { 633 uByte bLength; 634 uByte bDescriptorType; 635 uByte bDescriptorSubtype; 636 uByte bTerminalId; 637 uWord wTerminalType; 638 uByte bAssocTerminal; 639 uByte bCSourceId; 640 uByte bNrChannels; 641 uDWord bmChannelConfig; 642 uByte iCHannelNames; 643 uWord bmControls; 644 uByte iTerminal; 645} __packed; 646 647/* UDESCSUB_AC_OUTPUT */ 648struct usb_audio20_output_terminal { 649 uByte bLength; 650 uByte bDescriptorType; 651 uByte bDescriptorSubtype; 652 uByte bTerminalId; 653 uWord wTerminalType; 654 uByte bAssocTerminal; 655 uByte bSourceId; 656 uByte bCSourceId; 657 uWord bmControls; 658 uByte iTerminal; 659} __packed; 660 661/* UDESCSUB_AC_MIXER */ 662struct usb_audio20_mixer_unit_0 { 663 uByte bLength; 664 uByte bDescriptorType; 665 uByte bDescriptorSubtype; 666 uByte bUnitId; 667 uByte bNrInPins; 668 uByte baSourceId[0]; 669 /* struct usb_audio20_mixer_unit_1 */ 670} __packed; 671 672struct usb_audio20_mixer_unit_1 { 673 uByte bNrChannels; 674 uDWord bmChannelConfig; 675 uByte iChannelNames; 676 uByte bmControls[0]; 677 /* uByte iMixer; */ 678} __packed; 679 680/* UDESCSUB_AC_SELECTOR */ 681struct usb_audio20_selector_unit { 682 uByte bLength; 683 uByte bDescriptorType; 684 uByte bDescriptorSubtype; 685 uByte bUnitId; 686 uByte bNrInPins; 687 uByte baSourceId[0]; 688 /* uByte iSelector; */ 689} __packed; 690 691/* UDESCSUB_AC_FEATURE */ 692struct usb_audio20_feature_unit { 693 uByte bLength; 694 uByte bDescriptorType; 695 uByte bDescriptorSubtype; 696 uByte bUnitId; 697 uByte bSourceId; 698 uDWord bmaControls[0]; 699 /* uByte iFeature; */ 700} __packed; 701 702/* UDESCSUB_AC_SAMPLE_RT */ 703struct usb_audio20_sample_rate_unit { 704 uByte bLength; 705 uByte bDescriptorType; 706 uByte bDescriptorSubtype; 707 uByte bUnitId; 708 uByte bSourceId; 709 uByte bSourceInId; 710 uByte bSourceOutId; 711 uByte iSrc; 712} __packed; 713 714/* UDESCSUB_AC_EFFECT */ 715struct usb_audio20_effect_unit { 716 uByte bLength; 717 uByte bDescriptorType; 718 uByte bDescriptorSubtype; 719 uByte bUnitId; 720 uWord wEffectType; 721 uByte bSourceId; 722 uDWord bmaControls[0]; 723 uByte iEffects; 724} __packed; 725 726/* UDESCSUB_AC_PROCESSING_V2 */ 727struct usb_audio20_processing_unit_0 { 728 uByte bLength; 729 uByte bDescriptorType; 730 uByte bDescriptorSubtype; 731 uByte bUnitId; 732 uWord wProcessType; 733 uByte bNrInPins; 734 uByte baSourceId[0]; /* [bNrInPins] */ 735} __packed; 736 737struct usb_audio20_processing_unit_1 { 738 uByte bNrChannels; 739 uDWord bmChannelConfig; 740 uByte iChannelNames; 741 uWord bmControls; 742 uByte iProcessing; 743} __packed; 744 745/* UDESCSUB_AC_EXTENSION_V2 */ 746struct usb_audio20_extension_unit_0 { 747 uByte bLength; 748 uByte bDescriptorType; 749 uByte bDescriptorSubtype; 750 uByte bUnitId; 751 uWord wExtensionCode; 752 uByte bNrInPins; 753 uByte baSourceId[0]; 754} __packed; 755 756struct usb_audio20_extension_unit_1 { 757 uByte bNrChannels; 758 uDWord bmChannelConfig; 759 uByte iChannelNames; 760 uByte bmControls; 761 uByte iExtension; 762} __packed; 763 764struct usb_audio20_cluster { 765 uByte bNrChannels; 766 uDWord bmChannelConfig; 767 uByte iChannelNames; 768} __packed; 769 770#define UA20_TF_UNDEFINED 0x00 771#define UA20_TF_DESKTOP_SPEAKER 0x01 772#define UA20_TF_HOME_THEATER 0x02 773#define UA20_TF_MICROPHONE 0x03 774#define UA20_TF_HEADSET 0x04 775#define UA20_TF_TELEPHONE 0x05 776#define UA20_TF_CONVERTER 0x06 777#define UA20_TF_SOUND_RECORDER 0x07 778#define UA20_TF_IO_BOX 0x08 779#define UA20_TF_MUSICAL_INSTRUMENT 0x09 780#define UA20_TF_PRO_AUDIO 0x0A 781#define UA20_TF_AV 0x0B 782#define UA20_TF_CONTROL_PANEL 0x0C 783#define UA20_TF_OTHER 0xFF 784 785#define UA20_CS_SAM_FREQ_CONTROL 0x01 786#define UA20_CS_CLOCK_VALID_CONTROL 0x02 787 788#define UA20_TE_COPY_PROTECT_CONTROL 0x01 789#define UA20_TE_CONNECTOR_CONTROL 0x02 790#define UA20_TE_OVERLOAD_CONTROL 0x03 791#define UA20_TE_CLUSTER_CONTROL 0x04 792#define UA20_TE_UNDERFLOW_CONTROL 0x05 793#define UA20_TE_OVERFLOW_CONTROL 0x06 794#define UA20_TE_LATENCY_CONTROL 0x07 795 796#define UA20_MU_MIXER_CONTROL 0x01 797#define UA20_MU_CLUSTER_CONTROL 0x02 798#define UA20_MU_UNDERFLOW_CONTROL 0x03 799#define UA20_MU_OVERFLOW_CONTROL 0x04 800#define UA20_MU_LATENCY_CONTROL 0x05 801 802#define UA20_FMT_PCM (1U << 0) 803#define UA20_FMT_PCM8 (1U << 1) 804#define UA20_FMT_FLOAT (1U << 2) 805#define UA20_FMT_ALAW (1U << 3) 806#define UA20_FMT_MULAW (1U << 4) 807#define UA20_FMT_RAW (1U << 31) 808 809#endif /* _UAUDIOREG_H_ */ 810