1
2
3
4
5
6
7
8
9 #ifndef __LINUX_USB_AUDIO_V3_H
10 #define __LINUX_USB_AUDIO_V3_H
11
12 #include <linux/types.h>
13
14
15
16
17
18
19
20 struct uac3_hc_descriptor_header {
21 __le16 wLength;
22 __u8 bDescriptorType;
23 __u8 bDescriptorSubtype;
24 __le16 wDescriptorID;
25 } __attribute__ ((packed));
26
27
28 struct uac3_cluster_header_descriptor {
29 __le16 wLength;
30 __u8 bDescriptorType;
31 __u8 bDescriptorSubtype;
32 __le16 wDescriptorID;
33 __u8 bNrChannels;
34 } __attribute__ ((packed));
35
36
37 struct uac3_cluster_segment_descriptor {
38 __le16 wLength;
39 __u8 bSegmentType;
40
41 } __attribute__ ((packed));
42
43
44 struct uac3_cluster_end_segment_descriptor {
45 __le16 wLength;
46 __u8 bSegmentType;
47 } __attribute__ ((packed));
48
49
50 struct uac3_cluster_information_segment_descriptor {
51 __le16 wLength;
52 __u8 bSegmentType;
53 __u8 bChPurpose;
54 __u8 bChRelationship;
55 __u8 bChGroupID;
56 } __attribute__ ((packed));
57
58
59 struct uac3_ac_header_descriptor {
60 __u8 bLength;
61 __u8 bDescriptorType;
62 __u8 bDescriptorSubtype;
63 __u8 bCategory;
64
65
66 __le16 wTotalLength;
67
68 __le32 bmControls;
69 } __attribute__ ((packed));
70
71
72 struct uac3_input_terminal_descriptor {
73 __u8 bLength;
74 __u8 bDescriptorType;
75 __u8 bDescriptorSubtype;
76 __u8 bTerminalID;
77 __le16 wTerminalType;
78 __u8 bAssocTerminal;
79 __u8 bCSourceID;
80 __le32 bmControls;
81 __le16 wClusterDescrID;
82 __le16 wExTerminalDescrID;
83 __le16 wConnectorsDescrID;
84 __le16 wTerminalDescrStr;
85 } __attribute__((packed));
86
87
88 struct uac3_output_terminal_descriptor {
89 __u8 bLength;
90 __u8 bDescriptorType;
91 __u8 bDescriptorSubtype;
92 __u8 bTerminalID;
93 __le16 wTerminalType;
94 __u8 bAssocTerminal;
95 __u8 bSourceID;
96 __u8 bCSourceID;
97 __le32 bmControls;
98 __le16 wExTerminalDescrID;
99 __le16 wConnectorsDescrID;
100 __le16 wTerminalDescrStr;
101 } __attribute__((packed));
102
103
104 struct uac3_feature_unit_descriptor {
105 __u8 bLength;
106 __u8 bDescriptorType;
107 __u8 bDescriptorSubtype;
108 __u8 bUnitID;
109 __u8 bSourceID;
110
111
112 __u8 bmaControls[0];
113
114 } __attribute__((packed));
115
116 #define UAC3_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 4)
117
118
119 #define DECLARE_UAC3_FEATURE_UNIT_DESCRIPTOR(ch) \
120 struct uac3_feature_unit_descriptor_##ch { \
121 __u8 bLength; \
122 __u8 bDescriptorType; \
123 __u8 bDescriptorSubtype; \
124 __u8 bUnitID; \
125 __u8 bSourceID; \
126 __le32 bmaControls[ch + 1]; \
127 __le16 wFeatureDescrStr; \
128 } __attribute__ ((packed))
129
130
131 struct uac3_clock_source_descriptor {
132 __u8 bLength;
133 __u8 bDescriptorType;
134 __u8 bDescriptorSubtype;
135 __u8 bClockID;
136 __u8 bmAttributes;
137 __le32 bmControls;
138 __u8 bReferenceTerminal;
139 __le16 wClockSourceStr;
140 } __attribute__((packed));
141
142
143 #define UAC3_CLOCK_SOURCE_TYPE_EXT 0x0
144 #define UAC3_CLOCK_SOURCE_TYPE_INT 0x1
145 #define UAC3_CLOCK_SOURCE_ASYNC (0 << 2)
146 #define UAC3_CLOCK_SOURCE_SYNCED_TO_SOF (1 << 1)
147
148
149 struct uac3_clock_selector_descriptor {
150 __u8 bLength;
151 __u8 bDescriptorType;
152 __u8 bDescriptorSubtype;
153 __u8 bClockID;
154 __u8 bNrInPins;
155 __u8 baCSourceID[];
156
157 } __attribute__((packed));
158
159
160 struct uac3_clock_multiplier_descriptor {
161 __u8 bLength;
162 __u8 bDescriptorType;
163 __u8 bDescriptorSubtype;
164 __u8 bClockID;
165 __u8 bCSourceID;
166 __le32 bmControls;
167 __le16 wCMultiplierDescrStr;
168 } __attribute__((packed));
169
170
171 struct uac3_power_domain_descriptor {
172 __u8 bLength;
173 __u8 bDescriptorType;
174 __u8 bDescriptorSubtype;
175 __u8 bPowerDomainID;
176 __le16 waRecoveryTime1;
177 __le16 waRecoveryTime2;
178 __u8 bNrEntities;
179 __u8 baEntityID[];
180
181 } __attribute__((packed));
182
183
184 #define DECLARE_UAC3_POWER_DOMAIN_DESCRIPTOR(n) \
185 struct uac3_power_domain_descriptor_##n { \
186 __u8 bLength; \
187 __u8 bDescriptorType; \
188 __u8 bDescriptorSubtype; \
189 __u8 bPowerDomainID; \
190 __le16 waRecoveryTime1; \
191 __le16 waRecoveryTime2; \
192 __u8 bNrEntities; \
193 __u8 baEntityID[n]; \
194 __le16 wPDomainDescrStr; \
195 } __attribute__ ((packed))
196
197
198 struct uac3_as_header_descriptor {
199 __u8 bLength;
200 __u8 bDescriptorType;
201 __u8 bDescriptorSubtype;
202 __u8 bTerminalLink;
203 __le32 bmControls;
204 __le16 wClusterDescrID;
205 __le64 bmFormats;
206 __u8 bSubslotSize;
207 __u8 bBitResolution;
208 __le16 bmAuxProtocols;
209 __u8 bControlSize;
210 } __attribute__((packed));
211
212 #define UAC3_FORMAT_TYPE_I_RAW_DATA (1 << 6)
213
214
215 struct uac3_iso_endpoint_descriptor {
216 __u8 bLength;
217 __u8 bDescriptorType;
218 __u8 bDescriptorSubtype;
219 __le32 bmControls;
220 __u8 bLockDelayUnits;
221 __le16 wLockDelay;
222 } __attribute__((packed));
223
224
225 struct uac3_insertion_ctl_blk {
226 __u8 bSize;
227 __u8 bmConInserted;
228 } __attribute__ ((packed));
229
230
231 struct uac3_interrupt_data_msg {
232 __u8 bInfo;
233 __u8 bSourceType;
234 __le16 wValue;
235 __le16 wIndex;
236 } __attribute__((packed));
237
238
239 #define UAC3_FUNCTION_SUBCLASS_UNDEFINED 0x00
240 #define UAC3_FUNCTION_SUBCLASS_FULL_ADC_3_0 0x01
241
242 #define UAC3_FUNCTION_SUBCLASS_GENERIC_IO 0x20
243 #define UAC3_FUNCTION_SUBCLASS_HEADPHONE 0x21
244 #define UAC3_FUNCTION_SUBCLASS_SPEAKER 0x22
245 #define UAC3_FUNCTION_SUBCLASS_MICROPHONE 0x23
246 #define UAC3_FUNCTION_SUBCLASS_HEADSET 0x24
247 #define UAC3_FUNCTION_SUBCLASS_HEADSET_ADAPTER 0x25
248 #define UAC3_FUNCTION_SUBCLASS_SPEAKERPHONE 0x26
249
250
251 #define UAC3_FUNCTION_SUBCLASS_UNDEFINED 0x00
252 #define UAC3_FUNCTION_DESKTOP_SPEAKER 0x01
253 #define UAC3_FUNCTION_HOME_THEATER 0x02
254 #define UAC3_FUNCTION_MICROPHONE 0x03
255 #define UAC3_FUNCTION_HEADSET 0x04
256 #define UAC3_FUNCTION_TELEPHONE 0x05
257 #define UAC3_FUNCTION_CONVERTER 0x06
258 #define UAC3_FUNCTION_SOUND_RECORDER 0x07
259 #define UAC3_FUNCTION_IO_BOX 0x08
260 #define UAC3_FUNCTION_MUSICAL_INSTRUMENT 0x09
261 #define UAC3_FUNCTION_PRO_AUDIO 0x0a
262 #define UAC3_FUNCTION_AUDIO_VIDEO 0x0b
263 #define UAC3_FUNCTION_CONTROL_PANEL 0x0c
264 #define UAC3_FUNCTION_HEADPHONE 0x0d
265 #define UAC3_FUNCTION_GENERIC_SPEAKER 0x0e
266 #define UAC3_FUNCTION_HEADSET_ADAPTER 0x0f
267 #define UAC3_FUNCTION_SPEAKERPHONE 0x10
268 #define UAC3_FUNCTION_OTHER 0xff
269
270
271 #define UAC3_CS_UNDEFINED 0x20
272 #define UAC3_CS_DEVICE 0x21
273 #define UAC3_CS_CONFIGURATION 0x22
274 #define UAC3_CS_STRING 0x23
275 #define UAC3_CS_INTERFACE 0x24
276 #define UAC3_CS_ENDPOINT 0x25
277 #define UAC3_CS_CLUSTER 0x26
278
279
280 #define UAC3_SEGMENT_UNDEFINED 0x00
281 #define UAC3_CLUSTER_DESCRIPTION 0x01
282 #define UAC3_CLUSTER_VENDOR_DEFINED 0x1F
283 #define UAC3_CHANNEL_INFORMATION 0x20
284 #define UAC3_CHANNEL_AMBISONIC 0x21
285 #define UAC3_CHANNEL_DESCRIPTION 0x22
286 #define UAC3_CHANNEL_VENDOR_DEFINED 0xFE
287 #define UAC3_END_SEGMENT 0xFF
288
289
290 #define UAC3_PURPOSE_UNDEFINED 0x00
291 #define UAC3_PURPOSE_GENERIC_AUDIO 0x01
292 #define UAC3_PURPOSE_VOICE 0x02
293 #define UAC3_PURPOSE_SPEECH 0x03
294 #define UAC3_PURPOSE_AMBIENT 0x04
295 #define UAC3_PURPOSE_REFERENCE 0x05
296 #define UAC3_PURPOSE_ULTRASONIC 0x06
297 #define UAC3_PURPOSE_VIBROKINETIC 0x07
298 #define UAC3_PURPOSE_NON_AUDIO 0xFF
299
300
301 #define UAC3_CH_RELATIONSHIP_UNDEFINED 0x00
302 #define UAC3_CH_MONO 0x01
303 #define UAC3_CH_LEFT 0x02
304 #define UAC3_CH_RIGHT 0x03
305 #define UAC3_CH_ARRAY 0x04
306 #define UAC3_CH_PATTERN_X 0x20
307 #define UAC3_CH_PATTERN_Y 0x21
308 #define UAC3_CH_PATTERN_A 0x22
309 #define UAC3_CH_PATTERN_B 0x23
310 #define UAC3_CH_PATTERN_M 0x24
311 #define UAC3_CH_PATTERN_S 0x25
312 #define UAC3_CH_FRONT_LEFT 0x80
313 #define UAC3_CH_FRONT_RIGHT 0x81
314 #define UAC3_CH_FRONT_CENTER 0x82
315 #define UAC3_CH_FRONT_LEFT_OF_CENTER 0x83
316 #define UAC3_CH_FRONT_RIGHT_OF_CENTER 0x84
317 #define UAC3_CH_FRONT_WIDE_LEFT 0x85
318 #define UAC3_CH_FRONT_WIDE_RIGHT 0x86
319 #define UAC3_CH_SIDE_LEFT 0x87
320 #define UAC3_CH_SIDE_RIGHT 0x88
321 #define UAC3_CH_SURROUND_ARRAY_LEFT 0x89
322 #define UAC3_CH_SURROUND_ARRAY_RIGHT 0x8A
323 #define UAC3_CH_BACK_LEFT 0x8B
324 #define UAC3_CH_BACK_RIGHT 0x8C
325 #define UAC3_CH_BACK_CENTER 0x8D
326 #define UAC3_CH_BACK_LEFT_OF_CENTER 0x8E
327 #define UAC3_CH_BACK_RIGHT_OF_CENTER 0x8F
328 #define UAC3_CH_BACK_WIDE_LEFT 0x90
329 #define UAC3_CH_BACK_WIDE_RIGHT 0x91
330 #define UAC3_CH_TOP_CENTER 0x92
331 #define UAC3_CH_TOP_FRONT_LEFT 0x93
332 #define UAC3_CH_TOP_FRONT_RIGHT 0x94
333 #define UAC3_CH_TOP_FRONT_CENTER 0x95
334 #define UAC3_CH_TOP_FRONT_LOC 0x96
335 #define UAC3_CH_TOP_FRONT_ROC 0x97
336 #define UAC3_CH_TOP_FRONT_WIDE_LEFT 0x98
337 #define UAC3_CH_TOP_FRONT_WIDE_RIGHT 0x99
338 #define UAC3_CH_TOP_SIDE_LEFT 0x9A
339 #define UAC3_CH_TOP_SIDE_RIGHT 0x9B
340 #define UAC3_CH_TOP_SURR_ARRAY_LEFT 0x9C
341 #define UAC3_CH_TOP_SURR_ARRAY_RIGHT 0x9D
342 #define UAC3_CH_TOP_BACK_LEFT 0x9E
343 #define UAC3_CH_TOP_BACK_RIGHT 0x9F
344 #define UAC3_CH_TOP_BACK_CENTER 0xA0
345 #define UAC3_CH_TOP_BACK_LOC 0xA1
346 #define UAC3_CH_TOP_BACK_ROC 0xA2
347 #define UAC3_CH_TOP_BACK_WIDE_LEFT 0xA3
348 #define UAC3_CH_TOP_BACK_WIDE_RIGHT 0xA4
349 #define UAC3_CH_BOTTOM_CENTER 0xA5
350 #define UAC3_CH_BOTTOM_FRONT_LEFT 0xA6
351 #define UAC3_CH_BOTTOM_FRONT_RIGHT 0xA7
352 #define UAC3_CH_BOTTOM_FRONT_CENTER 0xA8
353 #define UAC3_CH_BOTTOM_FRONT_LOC 0xA9
354 #define UAC3_CH_BOTTOM_FRONT_ROC 0xAA
355 #define UAC3_CH_BOTTOM_FRONT_WIDE_LEFT 0xAB
356 #define UAC3_CH_BOTTOM_FRONT_WIDE_RIGHT 0xAC
357 #define UAC3_CH_BOTTOM_SIDE_LEFT 0xAD
358 #define UAC3_CH_BOTTOM_SIDE_RIGHT 0xAE
359 #define UAC3_CH_BOTTOM_SURR_ARRAY_LEFT 0xAF
360 #define UAC3_CH_BOTTOM_SURR_ARRAY_RIGHT 0xB0
361 #define UAC3_CH_BOTTOM_BACK_LEFT 0xB1
362 #define UAC3_CH_BOTTOM_BACK_RIGHT 0xB2
363 #define UAC3_CH_BOTTOM_BACK_CENTER 0xB3
364 #define UAC3_CH_BOTTOM_BACK_LOC 0xB4
365 #define UAC3_CH_BOTTOM_BACK_ROC 0xB5
366 #define UAC3_CH_BOTTOM_BACK_WIDE_LEFT 0xB6
367 #define UAC3_CH_BOTTOM_BACK_WIDE_RIGHT 0xB7
368 #define UAC3_CH_LOW_FREQUENCY_EFFECTS 0xB8
369 #define UAC3_CH_LFE_LEFT 0xB9
370 #define UAC3_CH_LFE_RIGHT 0xBA
371 #define UAC3_CH_HEADPHONE_LEFT 0xBB
372 #define UAC3_CH_HEADPHONE_RIGHT 0xBC
373
374
375
376 #define UAC3_EXTENDED_TERMINAL 0x04
377 #define UAC3_MIXER_UNIT 0x05
378 #define UAC3_SELECTOR_UNIT 0x06
379 #define UAC3_FEATURE_UNIT 0x07
380 #define UAC3_EFFECT_UNIT 0x08
381 #define UAC3_PROCESSING_UNIT 0x09
382 #define UAC3_EXTENSION_UNIT 0x0a
383 #define UAC3_CLOCK_SOURCE 0x0b
384 #define UAC3_CLOCK_SELECTOR 0x0c
385 #define UAC3_CLOCK_MULTIPLIER 0x0d
386 #define UAC3_SAMPLE_RATE_CONVERTER 0x0e
387 #define UAC3_CONNECTORS 0x0f
388 #define UAC3_POWER_DOMAIN 0x10
389
390
391 #define UAC3_PROCESS_UNDEFINED 0x00
392 #define UAC3_PROCESS_UP_DOWNMIX 0x01
393 #define UAC3_PROCESS_STEREO_EXTENDER 0x02
394 #define UAC3_PROCESS_MULTI_FUNCTION 0x03
395
396
397
398 #define UAC3_CS_REQ_INTEN 0x04
399 #define UAC3_CS_REQ_STRING 0x05
400 #define UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR 0x06
401
402
403 #define UAC3_AC_CONTROL_UNDEFINED 0x00
404 #define UAC3_AC_ACTIVE_INTERFACE_CONTROL 0x01
405 #define UAC3_AC_POWER_DOMAIN_CONTROL 0x02
406
407
408 #define UAC3_TE_UNDEFINED 0x00
409 #define UAC3_TE_INSERTION 0x01
410 #define UAC3_TE_OVERLOAD 0x02
411 #define UAC3_TE_UNDERFLOW 0x03
412 #define UAC3_TE_OVERFLOW 0x04
413 #define UAC3_TE_LATENCY 0x05
414
415
416
417
418 #define UAC3_UD_MODE_SELECT 0x01
419
420
421 #define UAC3_EXT_WIDTH_CONTROL 0x01
422
423
424
425 #define UAC3_BADD_IT_ID1 1
426 #define UAC3_BADD_FU_ID2 2
427 #define UAC3_BADD_OT_ID3 3
428 #define UAC3_BADD_IT_ID4 4
429 #define UAC3_BADD_FU_ID5 5
430 #define UAC3_BADD_OT_ID6 6
431 #define UAC3_BADD_FU_ID7 7
432 #define UAC3_BADD_MU_ID8 8
433 #define UAC3_BADD_CS_ID9 9
434 #define UAC3_BADD_PD_ID10 10
435 #define UAC3_BADD_PD_ID11 11
436
437
438 #define UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_16 0x0060
439 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_16 0x0062
440 #define UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_24 0x0090
441 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_24 0x0093
442 #define UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_16 0x00C0
443 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_16 0x00C4
444 #define UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_24 0x0120
445 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_24 0x0126
446
447
448 #define UAC3_BADD_SAMPLING_RATE 48000
449
450
451 #define UAC3_BADD_PD_RECOVER_D1D0 0x0258
452 #define UAC3_BADD_PD_RECOVER_D2D0 0x1770
453
454 #endif