0001
0002
0003
0004
0005
0006
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
0016
0017
0018
0019
0020 struct uac3_hc_descriptor_header {
0021 __le16 wLength;
0022 __u8 bDescriptorType;
0023 __u8 bDescriptorSubtype;
0024 __le16 wDescriptorID;
0025 } __attribute__ ((packed));
0026
0027
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
0037 struct uac3_cluster_segment_descriptor {
0038 __le16 wLength;
0039 __u8 bSegmentType;
0040
0041 } __attribute__ ((packed));
0042
0043
0044 struct uac3_cluster_end_segment_descriptor {
0045 __le16 wLength;
0046 __u8 bSegmentType;
0047 } __attribute__ ((packed));
0048
0049
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
0059 struct uac3_ac_header_descriptor {
0060 __u8 bLength;
0061 __u8 bDescriptorType;
0062 __u8 bDescriptorSubtype;
0063 __u8 bCategory;
0064
0065
0066 __le16 wTotalLength;
0067
0068 __le32 bmControls;
0069 } __attribute__ ((packed));
0070
0071
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
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
0104 struct uac3_feature_unit_descriptor {
0105 __u8 bLength;
0106 __u8 bDescriptorType;
0107 __u8 bDescriptorSubtype;
0108 __u8 bUnitID;
0109 __u8 bSourceID;
0110
0111
0112 __u8 bmaControls[];
0113
0114 } __attribute__((packed));
0115
0116 #define UAC3_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 4)
0117
0118
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
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
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
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
0157 } __attribute__((packed));
0158
0159
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
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
0181 } __attribute__((packed));
0182
0183
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
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
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
0225 struct uac3_insertion_ctl_blk {
0226 __u8 bSize;
0227 __u8 bmConInserted;
0228 } __attribute__ ((packed));
0229
0230
0231 struct uac3_interrupt_data_msg {
0232 __u8 bInfo;
0233 __u8 bSourceType;
0234 __le16 wValue;
0235 __le16 wIndex;
0236 } __attribute__((packed));
0237
0238
0239 #define UAC3_FUNCTION_SUBCLASS_UNDEFINED 0x00
0240 #define UAC3_FUNCTION_SUBCLASS_FULL_ADC_3_0 0x01
0241
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
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
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
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
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
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
0375
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
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
0397
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
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
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
0416
0417
0418 #define UAC3_UD_MODE_SELECT 0x01
0419
0420
0421 #define UAC3_EXT_WIDTH_CONTROL 0x01
0422
0423
0424
0425 #define UAC3_BADD_IT_ID1 1
0426 #define UAC3_BADD_FU_ID2 2
0427 #define UAC3_BADD_OT_ID3 3
0428 #define UAC3_BADD_IT_ID4 4
0429 #define UAC3_BADD_FU_ID5 5
0430 #define UAC3_BADD_OT_ID6 6
0431 #define UAC3_BADD_FU_ID7 7
0432 #define UAC3_BADD_MU_ID8 8
0433 #define UAC3_BADD_CS_ID9 9
0434 #define UAC3_BADD_PD_ID10 10
0435 #define UAC3_BADD_PD_ID11 11
0436
0437
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
0448 #define UAC3_BADD_SAMPLING_RATE 48000
0449
0450
0451 #define UAC3_BADD_PD_RECOVER_D1D0 0x0258
0452 #define UAC3_BADD_PD_RECOVER_D2D0 0x1770
0453
0454 #endif