Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * Copyright (c) 2017 Ruslan Bilovol <ruslan.bilovol@gmail.com>
0004  *
0005  * This file holds USB constants and structures defined
0006  * by the USB DEVICE CLASS DEFINITION FOR AUDIO DEVICES Release 3.0.
0007  */
0008 
0009 #ifndef __LINUX_USB_AUDIO_V3_H
0010 #define __LINUX_USB_AUDIO_V3_H
0011 
0012 #include <linux/types.h>
0013 
0014 /*
0015  * v1.0, v2.0 and v3.0 of this standard have many things in common. For the rest
0016  * of the definitions, please refer to audio.h and audio-v2.h
0017  */
0018 
0019 /* All High Capability descriptors have these 2 fields at the beginning */
0020 struct uac3_hc_descriptor_header {
0021     __le16 wLength;
0022     __u8 bDescriptorType;
0023     __u8 bDescriptorSubtype;
0024     __le16 wDescriptorID;
0025 } __attribute__ ((packed));
0026 
0027 /* 4.3.1 CLUSTER DESCRIPTOR HEADER */
0028 struct uac3_cluster_header_descriptor {
0029     __le16 wLength;
0030     __u8 bDescriptorType;
0031     __u8 bDescriptorSubtype;
0032     __le16 wDescriptorID;
0033     __u8 bNrChannels;
0034 } __attribute__ ((packed));
0035 
0036 /* 4.3.2.1 SEGMENTS */
0037 struct uac3_cluster_segment_descriptor {
0038     __le16 wLength;
0039     __u8 bSegmentType;
0040     /* __u8[0]; segment-specific data */
0041 } __attribute__ ((packed));
0042 
0043 /* 4.3.2.1.1 END SEGMENT */
0044 struct uac3_cluster_end_segment_descriptor {
0045     __le16 wLength;
0046     __u8 bSegmentType;      /* Constant END_SEGMENT */
0047 } __attribute__ ((packed));
0048 
0049 /* 4.3.2.1.3.1 INFORMATION SEGMENT */
0050 struct uac3_cluster_information_segment_descriptor {
0051     __le16 wLength;
0052     __u8 bSegmentType;
0053     __u8 bChPurpose;
0054     __u8 bChRelationship;
0055     __u8 bChGroupID;
0056 } __attribute__ ((packed));
0057 
0058 /* 4.5.2 CLASS-SPECIFIC AC INTERFACE DESCRIPTOR */
0059 struct uac3_ac_header_descriptor {
0060     __u8 bLength;           /* 10 */
0061     __u8 bDescriptorType;       /* CS_INTERFACE descriptor type */
0062     __u8 bDescriptorSubtype;    /* HEADER descriptor subtype */
0063     __u8 bCategory;
0064 
0065     /* includes Clock Source, Unit, Terminal, and Power Domain desc. */
0066     __le16 wTotalLength;
0067 
0068     __le32 bmControls;
0069 } __attribute__ ((packed));
0070 
0071 /* 4.5.2.1 INPUT TERMINAL DESCRIPTOR */
0072 struct uac3_input_terminal_descriptor {
0073     __u8 bLength;
0074     __u8 bDescriptorType;
0075     __u8 bDescriptorSubtype;
0076     __u8 bTerminalID;
0077     __le16 wTerminalType;
0078     __u8 bAssocTerminal;
0079     __u8 bCSourceID;
0080     __le32 bmControls;
0081     __le16 wClusterDescrID;
0082     __le16 wExTerminalDescrID;
0083     __le16 wConnectorsDescrID;
0084     __le16 wTerminalDescrStr;
0085 } __attribute__((packed));
0086 
0087 /* 4.5.2.2 OUTPUT TERMINAL DESCRIPTOR */
0088 struct uac3_output_terminal_descriptor {
0089     __u8 bLength;
0090     __u8 bDescriptorType;
0091     __u8 bDescriptorSubtype;
0092     __u8 bTerminalID;
0093     __le16 wTerminalType;
0094     __u8 bAssocTerminal;
0095     __u8 bSourceID;
0096     __u8 bCSourceID;
0097     __le32 bmControls;
0098     __le16 wExTerminalDescrID;
0099     __le16 wConnectorsDescrID;
0100     __le16 wTerminalDescrStr;
0101 } __attribute__((packed));
0102 
0103 /* 4.5.2.7 FEATURE UNIT DESCRIPTOR */
0104 struct uac3_feature_unit_descriptor {
0105     __u8 bLength;
0106     __u8 bDescriptorType;
0107     __u8 bDescriptorSubtype;
0108     __u8 bUnitID;
0109     __u8 bSourceID;
0110     /* bmaControls is actually u32,
0111      * but u8 is needed for the hybrid parser */
0112     __u8 bmaControls[]; /* variable length */
0113     /* wFeatureDescrStr omitted */
0114 } __attribute__((packed));
0115 
0116 #define UAC3_DT_FEATURE_UNIT_SIZE(ch)       (7 + ((ch) + 1) * 4)
0117 
0118 /* As above, but more useful for defining your own descriptors */
0119 #define DECLARE_UAC3_FEATURE_UNIT_DESCRIPTOR(ch)        \
0120 struct uac3_feature_unit_descriptor_##ch {          \
0121     __u8 bLength;                       \
0122     __u8 bDescriptorType;                   \
0123     __u8 bDescriptorSubtype;                \
0124     __u8 bUnitID;                       \
0125     __u8 bSourceID;                     \
0126     __le32 bmaControls[ch + 1];             \
0127     __le16 wFeatureDescrStr;                \
0128 } __attribute__ ((packed))
0129 
0130 /* 4.5.2.12 CLOCK SOURCE DESCRIPTOR */
0131 struct uac3_clock_source_descriptor {
0132     __u8 bLength;
0133     __u8 bDescriptorType;
0134     __u8 bDescriptorSubtype;
0135     __u8 bClockID;
0136     __u8 bmAttributes;
0137     __le32 bmControls;
0138     __u8 bReferenceTerminal;
0139     __le16 wClockSourceStr;
0140 } __attribute__((packed));
0141 
0142 /* bmAttribute fields */
0143 #define UAC3_CLOCK_SOURCE_TYPE_EXT  0x0
0144 #define UAC3_CLOCK_SOURCE_TYPE_INT  0x1
0145 #define UAC3_CLOCK_SOURCE_ASYNC     (0 << 2)
0146 #define UAC3_CLOCK_SOURCE_SYNCED_TO_SOF (1 << 1)
0147 
0148 /* 4.5.2.13 CLOCK SELECTOR DESCRIPTOR */
0149 struct uac3_clock_selector_descriptor {
0150     __u8 bLength;
0151     __u8 bDescriptorType;
0152     __u8 bDescriptorSubtype;
0153     __u8 bClockID;
0154     __u8 bNrInPins;
0155     __u8 baCSourceID[];
0156     /* bmControls and wCSelectorDescrStr omitted */
0157 } __attribute__((packed));
0158 
0159 /* 4.5.2.14 CLOCK MULTIPLIER DESCRIPTOR */
0160 struct uac3_clock_multiplier_descriptor {
0161     __u8 bLength;
0162     __u8 bDescriptorType;
0163     __u8 bDescriptorSubtype;
0164     __u8 bClockID;
0165     __u8 bCSourceID;
0166     __le32 bmControls;
0167     __le16 wCMultiplierDescrStr;
0168 } __attribute__((packed));
0169 
0170 /* 4.5.2.15 POWER DOMAIN DESCRIPTOR */
0171 struct uac3_power_domain_descriptor {
0172     __u8 bLength;
0173     __u8 bDescriptorType;
0174     __u8 bDescriptorSubtype;
0175     __u8 bPowerDomainID;
0176     __le16 waRecoveryTime1;
0177     __le16 waRecoveryTime2;
0178     __u8 bNrEntities;
0179     __u8 baEntityID[];
0180     /* wPDomainDescrStr omitted */
0181 } __attribute__((packed));
0182 
0183 /* As above, but more useful for defining your own descriptors */
0184 #define DECLARE_UAC3_POWER_DOMAIN_DESCRIPTOR(n)         \
0185 struct uac3_power_domain_descriptor_##n {           \
0186     __u8 bLength;                       \
0187     __u8 bDescriptorType;                   \
0188     __u8 bDescriptorSubtype;                \
0189     __u8 bPowerDomainID;                    \
0190     __le16 waRecoveryTime1;                 \
0191     __le16 waRecoveryTime2;                 \
0192     __u8 bNrEntities;                   \
0193     __u8 baEntityID[n];                 \
0194     __le16 wPDomainDescrStr;                    \
0195 } __attribute__ ((packed))
0196 
0197 /* 4.7.2 CLASS-SPECIFIC AS INTERFACE DESCRIPTOR */
0198 struct uac3_as_header_descriptor {
0199     __u8 bLength;
0200     __u8 bDescriptorType;
0201     __u8 bDescriptorSubtype;
0202     __u8 bTerminalLink;
0203     __le32 bmControls;
0204     __le16 wClusterDescrID;
0205     __le64 bmFormats;
0206     __u8 bSubslotSize;
0207     __u8 bBitResolution;
0208     __le16 bmAuxProtocols;
0209     __u8 bControlSize;
0210 } __attribute__((packed));
0211 
0212 #define UAC3_FORMAT_TYPE_I_RAW_DATA (1 << 6)
0213 
0214 /* 4.8.1.2 CLASS-SPECIFIC AS ISOCHRONOUS AUDIO DATA ENDPOINT DESCRIPTOR */
0215 struct uac3_iso_endpoint_descriptor {
0216     __u8 bLength;
0217     __u8 bDescriptorType;
0218     __u8 bDescriptorSubtype;
0219     __le32 bmControls;
0220     __u8 bLockDelayUnits;
0221     __le16 wLockDelay;
0222 } __attribute__((packed));
0223 
0224 /* 5.2.1.6.1 INSERTION CONTROL PARAMETER BLOCK */
0225 struct uac3_insertion_ctl_blk {
0226     __u8 bSize;
0227     __u8 bmConInserted;
0228 } __attribute__ ((packed));
0229 
0230 /* 6.1 INTERRUPT DATA MESSAGE */
0231 struct uac3_interrupt_data_msg {
0232     __u8 bInfo;
0233     __u8 bSourceType;
0234     __le16 wValue;
0235     __le16 wIndex;
0236 } __attribute__((packed));
0237 
0238 /* A.2 AUDIO AUDIO FUNCTION SUBCLASS CODES */
0239 #define UAC3_FUNCTION_SUBCLASS_UNDEFINED    0x00
0240 #define UAC3_FUNCTION_SUBCLASS_FULL_ADC_3_0 0x01
0241 /* BADD profiles */
0242 #define UAC3_FUNCTION_SUBCLASS_GENERIC_IO   0x20
0243 #define UAC3_FUNCTION_SUBCLASS_HEADPHONE    0x21
0244 #define UAC3_FUNCTION_SUBCLASS_SPEAKER      0x22
0245 #define UAC3_FUNCTION_SUBCLASS_MICROPHONE   0x23
0246 #define UAC3_FUNCTION_SUBCLASS_HEADSET      0x24
0247 #define UAC3_FUNCTION_SUBCLASS_HEADSET_ADAPTER  0x25
0248 #define UAC3_FUNCTION_SUBCLASS_SPEAKERPHONE 0x26
0249 
0250 /* A.7 AUDIO FUNCTION CATEGORY CODES */
0251 #define UAC3_FUNCTION_SUBCLASS_UNDEFINED    0x00
0252 #define UAC3_FUNCTION_DESKTOP_SPEAKER       0x01
0253 #define UAC3_FUNCTION_HOME_THEATER      0x02
0254 #define UAC3_FUNCTION_MICROPHONE        0x03
0255 #define UAC3_FUNCTION_HEADSET           0x04
0256 #define UAC3_FUNCTION_TELEPHONE         0x05
0257 #define UAC3_FUNCTION_CONVERTER         0x06
0258 #define UAC3_FUNCTION_SOUND_RECORDER        0x07
0259 #define UAC3_FUNCTION_IO_BOX            0x08
0260 #define UAC3_FUNCTION_MUSICAL_INSTRUMENT    0x09
0261 #define UAC3_FUNCTION_PRO_AUDIO         0x0a
0262 #define UAC3_FUNCTION_AUDIO_VIDEO       0x0b
0263 #define UAC3_FUNCTION_CONTROL_PANEL     0x0c
0264 #define UAC3_FUNCTION_HEADPHONE         0x0d
0265 #define UAC3_FUNCTION_GENERIC_SPEAKER       0x0e
0266 #define UAC3_FUNCTION_HEADSET_ADAPTER       0x0f
0267 #define UAC3_FUNCTION_SPEAKERPHONE      0x10
0268 #define UAC3_FUNCTION_OTHER         0xff
0269 
0270 /* A.8 AUDIO CLASS-SPECIFIC DESCRIPTOR TYPES */
0271 #define UAC3_CS_UNDEFINED       0x20
0272 #define UAC3_CS_DEVICE          0x21
0273 #define UAC3_CS_CONFIGURATION       0x22
0274 #define UAC3_CS_STRING          0x23
0275 #define UAC3_CS_INTERFACE       0x24
0276 #define UAC3_CS_ENDPOINT        0x25
0277 #define UAC3_CS_CLUSTER         0x26
0278 
0279 /* A.10 CLUSTER DESCRIPTOR SEGMENT TYPES */
0280 #define UAC3_SEGMENT_UNDEFINED      0x00
0281 #define UAC3_CLUSTER_DESCRIPTION    0x01
0282 #define UAC3_CLUSTER_VENDOR_DEFINED 0x1F
0283 #define UAC3_CHANNEL_INFORMATION    0x20
0284 #define UAC3_CHANNEL_AMBISONIC      0x21
0285 #define UAC3_CHANNEL_DESCRIPTION    0x22
0286 #define UAC3_CHANNEL_VENDOR_DEFINED 0xFE
0287 #define UAC3_END_SEGMENT        0xFF
0288 
0289 /* A.11 CHANNEL PURPOSE DEFINITIONS */
0290 #define UAC3_PURPOSE_UNDEFINED      0x00
0291 #define UAC3_PURPOSE_GENERIC_AUDIO  0x01
0292 #define UAC3_PURPOSE_VOICE      0x02
0293 #define UAC3_PURPOSE_SPEECH     0x03
0294 #define UAC3_PURPOSE_AMBIENT        0x04
0295 #define UAC3_PURPOSE_REFERENCE      0x05
0296 #define UAC3_PURPOSE_ULTRASONIC     0x06
0297 #define UAC3_PURPOSE_VIBROKINETIC   0x07
0298 #define UAC3_PURPOSE_NON_AUDIO      0xFF
0299 
0300 /* A.12 CHANNEL RELATIONSHIP DEFINITIONS */
0301 #define UAC3_CH_RELATIONSHIP_UNDEFINED  0x00
0302 #define UAC3_CH_MONO            0x01
0303 #define UAC3_CH_LEFT            0x02
0304 #define UAC3_CH_RIGHT           0x03
0305 #define UAC3_CH_ARRAY           0x04
0306 #define UAC3_CH_PATTERN_X       0x20
0307 #define UAC3_CH_PATTERN_Y       0x21
0308 #define UAC3_CH_PATTERN_A       0x22
0309 #define UAC3_CH_PATTERN_B       0x23
0310 #define UAC3_CH_PATTERN_M       0x24
0311 #define UAC3_CH_PATTERN_S       0x25
0312 #define UAC3_CH_FRONT_LEFT      0x80
0313 #define UAC3_CH_FRONT_RIGHT     0x81
0314 #define UAC3_CH_FRONT_CENTER        0x82
0315 #define UAC3_CH_FRONT_LEFT_OF_CENTER    0x83
0316 #define UAC3_CH_FRONT_RIGHT_OF_CENTER   0x84
0317 #define UAC3_CH_FRONT_WIDE_LEFT     0x85
0318 #define UAC3_CH_FRONT_WIDE_RIGHT    0x86
0319 #define UAC3_CH_SIDE_LEFT       0x87
0320 #define UAC3_CH_SIDE_RIGHT      0x88
0321 #define UAC3_CH_SURROUND_ARRAY_LEFT 0x89
0322 #define UAC3_CH_SURROUND_ARRAY_RIGHT    0x8A
0323 #define UAC3_CH_BACK_LEFT       0x8B
0324 #define UAC3_CH_BACK_RIGHT      0x8C
0325 #define UAC3_CH_BACK_CENTER     0x8D
0326 #define UAC3_CH_BACK_LEFT_OF_CENTER 0x8E
0327 #define UAC3_CH_BACK_RIGHT_OF_CENTER    0x8F
0328 #define UAC3_CH_BACK_WIDE_LEFT      0x90
0329 #define UAC3_CH_BACK_WIDE_RIGHT     0x91
0330 #define UAC3_CH_TOP_CENTER      0x92
0331 #define UAC3_CH_TOP_FRONT_LEFT      0x93
0332 #define UAC3_CH_TOP_FRONT_RIGHT     0x94
0333 #define UAC3_CH_TOP_FRONT_CENTER    0x95
0334 #define UAC3_CH_TOP_FRONT_LOC       0x96
0335 #define UAC3_CH_TOP_FRONT_ROC       0x97
0336 #define UAC3_CH_TOP_FRONT_WIDE_LEFT 0x98
0337 #define UAC3_CH_TOP_FRONT_WIDE_RIGHT    0x99
0338 #define UAC3_CH_TOP_SIDE_LEFT       0x9A
0339 #define UAC3_CH_TOP_SIDE_RIGHT      0x9B
0340 #define UAC3_CH_TOP_SURR_ARRAY_LEFT 0x9C
0341 #define UAC3_CH_TOP_SURR_ARRAY_RIGHT    0x9D
0342 #define UAC3_CH_TOP_BACK_LEFT       0x9E
0343 #define UAC3_CH_TOP_BACK_RIGHT      0x9F
0344 #define UAC3_CH_TOP_BACK_CENTER     0xA0
0345 #define UAC3_CH_TOP_BACK_LOC        0xA1
0346 #define UAC3_CH_TOP_BACK_ROC        0xA2
0347 #define UAC3_CH_TOP_BACK_WIDE_LEFT  0xA3
0348 #define UAC3_CH_TOP_BACK_WIDE_RIGHT 0xA4
0349 #define UAC3_CH_BOTTOM_CENTER       0xA5
0350 #define UAC3_CH_BOTTOM_FRONT_LEFT   0xA6
0351 #define UAC3_CH_BOTTOM_FRONT_RIGHT  0xA7
0352 #define UAC3_CH_BOTTOM_FRONT_CENTER 0xA8
0353 #define UAC3_CH_BOTTOM_FRONT_LOC    0xA9
0354 #define UAC3_CH_BOTTOM_FRONT_ROC    0xAA
0355 #define UAC3_CH_BOTTOM_FRONT_WIDE_LEFT  0xAB
0356 #define UAC3_CH_BOTTOM_FRONT_WIDE_RIGHT 0xAC
0357 #define UAC3_CH_BOTTOM_SIDE_LEFT    0xAD
0358 #define UAC3_CH_BOTTOM_SIDE_RIGHT   0xAE
0359 #define UAC3_CH_BOTTOM_SURR_ARRAY_LEFT  0xAF
0360 #define UAC3_CH_BOTTOM_SURR_ARRAY_RIGHT 0xB0
0361 #define UAC3_CH_BOTTOM_BACK_LEFT    0xB1
0362 #define UAC3_CH_BOTTOM_BACK_RIGHT   0xB2
0363 #define UAC3_CH_BOTTOM_BACK_CENTER  0xB3
0364 #define UAC3_CH_BOTTOM_BACK_LOC     0xB4
0365 #define UAC3_CH_BOTTOM_BACK_ROC     0xB5
0366 #define UAC3_CH_BOTTOM_BACK_WIDE_LEFT   0xB6
0367 #define UAC3_CH_BOTTOM_BACK_WIDE_RIGHT  0xB7
0368 #define UAC3_CH_LOW_FREQUENCY_EFFECTS   0xB8
0369 #define UAC3_CH_LFE_LEFT        0xB9
0370 #define UAC3_CH_LFE_RIGHT       0xBA
0371 #define UAC3_CH_HEADPHONE_LEFT      0xBB
0372 #define UAC3_CH_HEADPHONE_RIGHT     0xBC
0373 
0374 /* A.15 AUDIO CLASS-SPECIFIC AC INTERFACE DESCRIPTOR SUBTYPES */
0375 /* see audio.h for the rest, which is identical to v1 */
0376 #define UAC3_EXTENDED_TERMINAL      0x04
0377 #define UAC3_MIXER_UNIT         0x05
0378 #define UAC3_SELECTOR_UNIT      0x06
0379 #define UAC3_FEATURE_UNIT       0x07
0380 #define UAC3_EFFECT_UNIT        0x08
0381 #define UAC3_PROCESSING_UNIT        0x09
0382 #define UAC3_EXTENSION_UNIT     0x0a
0383 #define UAC3_CLOCK_SOURCE       0x0b
0384 #define UAC3_CLOCK_SELECTOR     0x0c
0385 #define UAC3_CLOCK_MULTIPLIER       0x0d
0386 #define UAC3_SAMPLE_RATE_CONVERTER  0x0e
0387 #define UAC3_CONNECTORS         0x0f
0388 #define UAC3_POWER_DOMAIN       0x10
0389 
0390 /* A.20 PROCESSING UNIT PROCESS TYPES */
0391 #define UAC3_PROCESS_UNDEFINED      0x00
0392 #define UAC3_PROCESS_UP_DOWNMIX     0x01
0393 #define UAC3_PROCESS_STEREO_EXTENDER    0x02
0394 #define UAC3_PROCESS_MULTI_FUNCTION 0x03
0395 
0396 /* A.22 AUDIO CLASS-SPECIFIC REQUEST CODES */
0397 /* see audio-v2.h for the rest, which is identical to v2 */
0398 #define UAC3_CS_REQ_INTEN           0x04
0399 #define UAC3_CS_REQ_STRING          0x05
0400 #define UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR  0x06
0401 
0402 /* A.23.1 AUDIOCONTROL INTERFACE CONTROL SELECTORS */
0403 #define UAC3_AC_CONTROL_UNDEFINED       0x00
0404 #define UAC3_AC_ACTIVE_INTERFACE_CONTROL    0x01
0405 #define UAC3_AC_POWER_DOMAIN_CONTROL        0x02
0406 
0407 /* A.23.5 TERMINAL CONTROL SELECTORS */
0408 #define UAC3_TE_UNDEFINED           0x00
0409 #define UAC3_TE_INSERTION           0x01
0410 #define UAC3_TE_OVERLOAD            0x02
0411 #define UAC3_TE_UNDERFLOW           0x03
0412 #define UAC3_TE_OVERFLOW            0x04
0413 #define UAC3_TE_LATENCY             0x05
0414 
0415 /* A.23.10 PROCESSING UNITS CONTROL SELECTROS */
0416 
0417 /* Up/Down Mixer */
0418 #define UAC3_UD_MODE_SELECT         0x01
0419 
0420 /* Stereo Extender */
0421 #define UAC3_EXT_WIDTH_CONTROL          0x01
0422 
0423 
0424 /* BADD predefined Unit/Terminal values */
0425 #define UAC3_BADD_IT_ID1    1  /* Input Terminal ID1: bTerminalID = 1 */
0426 #define UAC3_BADD_FU_ID2    2  /* Feature Unit ID2: bUnitID = 2 */
0427 #define UAC3_BADD_OT_ID3    3  /* Output Terminal ID3: bTerminalID = 3 */
0428 #define UAC3_BADD_IT_ID4    4  /* Input Terminal ID4: bTerminalID = 4 */
0429 #define UAC3_BADD_FU_ID5    5  /* Feature Unit ID5: bUnitID = 5 */
0430 #define UAC3_BADD_OT_ID6    6  /* Output Terminal ID6: bTerminalID = 6 */
0431 #define UAC3_BADD_FU_ID7    7  /* Feature Unit ID7: bUnitID = 7 */
0432 #define UAC3_BADD_MU_ID8    8  /* Mixer Unit ID8: bUnitID = 8 */
0433 #define UAC3_BADD_CS_ID9    9  /* Clock Source Entity ID9: bClockID = 9 */
0434 #define UAC3_BADD_PD_ID10   10 /* Power Domain ID10: bPowerDomainID = 10 */
0435 #define UAC3_BADD_PD_ID11   11 /* Power Domain ID11: bPowerDomainID = 11 */
0436 
0437 /* BADD wMaxPacketSize of AS endpoints */
0438 #define UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_16      0x0060
0439 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_16     0x0062
0440 #define UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_24      0x0090
0441 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_24     0x0093
0442 #define UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_16        0x00C0
0443 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_16       0x00C4
0444 #define UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_24        0x0120
0445 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_24       0x0126
0446 
0447 /* BADD sample rate is always fixed to 48kHz */
0448 #define UAC3_BADD_SAMPLING_RATE             48000
0449 
0450 /* BADD power domains recovery times in 50us increments */
0451 #define UAC3_BADD_PD_RECOVER_D1D0           0x0258  /* 30ms */
0452 #define UAC3_BADD_PD_RECOVER_D2D0           0x1770  /* 300ms */
0453 
0454 #endif /* __LINUX_USB_AUDIO_V3_H */