OpenCores
URL https://opencores.org/ocsvn/hf-risc/hf-risc/trunk

Subversion Repositories hf-risc

[/] [hf-risc/] [trunk/] [tools/] [riscv-gnu-toolchain-master/] [linux-headers/] [include/] [linux/] [usb/] [audio.h] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 serginhofr
/*
2
 * <linux/usb/audio.h> -- USB Audio definitions.
3
 *
4
 * Copyright (C) 2006 Thumtronics Pty Ltd.
5
 * Developed for Thumtronics by Grey Innovation
6
 * Ben Williamson <ben.williamson@greyinnovation.com>
7
 *
8
 * This software is distributed under the terms of the GNU General Public
9
 * License ("GPL") version 2, as published by the Free Software Foundation.
10
 *
11
 * This file holds USB constants and structures defined
12
 * by the USB Device Class Definition for Audio Devices.
13
 * Comments below reference relevant sections of that document:
14
 *
15
 * http://www.usb.org/developers/devclass_docs/audio10.pdf
16
 *
17
 * Types and defines in this file are either specific to version 1.0 of
18
 * this standard or common for newer versions.
19
 */
20
 
21
#ifndef __LINUX_USB_AUDIO_H
22
#define __LINUX_USB_AUDIO_H
23
 
24
#include <linux/types.h>
25
 
26
/* bInterfaceProtocol values to denote the version of the standard used */
27
#define UAC_VERSION_1                   0x00
28
#define UAC_VERSION_2                   0x20
29
 
30
/* A.2 Audio Interface Subclass Codes */
31
#define USB_SUBCLASS_AUDIOCONTROL       0x01
32
#define USB_SUBCLASS_AUDIOSTREAMING     0x02
33
#define USB_SUBCLASS_MIDISTREAMING      0x03
34
 
35
/* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */
36
#define UAC_HEADER                      0x01
37
#define UAC_INPUT_TERMINAL              0x02
38
#define UAC_OUTPUT_TERMINAL             0x03
39
#define UAC_MIXER_UNIT                  0x04
40
#define UAC_SELECTOR_UNIT               0x05
41
#define UAC_FEATURE_UNIT                0x06
42
#define UAC1_PROCESSING_UNIT            0x07
43
#define UAC1_EXTENSION_UNIT             0x08
44
 
45
/* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */
46
#define UAC_AS_GENERAL                  0x01
47
#define UAC_FORMAT_TYPE                 0x02
48
#define UAC_FORMAT_SPECIFIC             0x03
49
 
50
/* A.7 Processing Unit Process Types */
51
#define UAC_PROCESS_UNDEFINED           0x00
52
#define UAC_PROCESS_UP_DOWNMIX          0x01
53
#define UAC_PROCESS_DOLBY_PROLOGIC      0x02
54
#define UAC_PROCESS_STEREO_EXTENDER     0x03
55
#define UAC_PROCESS_REVERB              0x04
56
#define UAC_PROCESS_CHORUS              0x05
57
#define UAC_PROCESS_DYN_RANGE_COMP      0x06
58
 
59
/* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */
60
#define UAC_EP_GENERAL                  0x01
61
 
62
/* A.9 Audio Class-Specific Request Codes */
63
#define UAC_SET_                        0x00
64
#define UAC_GET_                        0x80
65
 
66
#define UAC__CUR                        0x1
67
#define UAC__MIN                        0x2
68
#define UAC__MAX                        0x3
69
#define UAC__RES                        0x4
70
#define UAC__MEM                        0x5
71
 
72
#define UAC_SET_CUR                     (UAC_SET_ | UAC__CUR)
73
#define UAC_GET_CUR                     (UAC_GET_ | UAC__CUR)
74
#define UAC_SET_MIN                     (UAC_SET_ | UAC__MIN)
75
#define UAC_GET_MIN                     (UAC_GET_ | UAC__MIN)
76
#define UAC_SET_MAX                     (UAC_SET_ | UAC__MAX)
77
#define UAC_GET_MAX                     (UAC_GET_ | UAC__MAX)
78
#define UAC_SET_RES                     (UAC_SET_ | UAC__RES)
79
#define UAC_GET_RES                     (UAC_GET_ | UAC__RES)
80
#define UAC_SET_MEM                     (UAC_SET_ | UAC__MEM)
81
#define UAC_GET_MEM                     (UAC_GET_ | UAC__MEM)
82
 
83
#define UAC_GET_STAT                    0xff
84
 
85
/* A.10 Control Selector Codes */
86
 
87
/* A.10.1 Terminal Control Selectors */
88
#define UAC_TERM_COPY_PROTECT           0x01
89
 
90
/* A.10.2 Feature Unit Control Selectors */
91
#define UAC_FU_MUTE                     0x01
92
#define UAC_FU_VOLUME                   0x02
93
#define UAC_FU_BASS                     0x03
94
#define UAC_FU_MID                      0x04
95
#define UAC_FU_TREBLE                   0x05
96
#define UAC_FU_GRAPHIC_EQUALIZER        0x06
97
#define UAC_FU_AUTOMATIC_GAIN           0x07
98
#define UAC_FU_DELAY                    0x08
99
#define UAC_FU_BASS_BOOST               0x09
100
#define UAC_FU_LOUDNESS                 0x0a
101
 
102
#define UAC_CONTROL_BIT(CS)     (1 << ((CS) - 1))
103
 
104
/* A.10.3.1 Up/Down-mix Processing Unit Controls Selectors */
105
#define UAC_UD_ENABLE                   0x01
106
#define UAC_UD_MODE_SELECT              0x02
107
 
108
/* A.10.3.2 Dolby Prologic (tm) Processing Unit Controls Selectors */
109
#define UAC_DP_ENABLE                   0x01
110
#define UAC_DP_MODE_SELECT              0x02
111
 
112
/* A.10.3.3 3D Stereo Extender Processing Unit Control Selectors */
113
#define UAC_3D_ENABLE                   0x01
114
#define UAC_3D_SPACE                    0x02
115
 
116
/* A.10.3.4 Reverberation Processing Unit Control Selectors */
117
#define UAC_REVERB_ENABLE               0x01
118
#define UAC_REVERB_LEVEL                0x02
119
#define UAC_REVERB_TIME                 0x03
120
#define UAC_REVERB_FEEDBACK             0x04
121
 
122
/* A.10.3.5 Chorus Processing Unit Control Selectors */
123
#define UAC_CHORUS_ENABLE               0x01
124
#define UAC_CHORUS_LEVEL                0x02
125
#define UAC_CHORUS_RATE                 0x03
126
#define UAC_CHORUS_DEPTH                0x04
127
 
128
/* A.10.3.6 Dynamic Range Compressor Unit Control Selectors */
129
#define UAC_DCR_ENABLE                  0x01
130
#define UAC_DCR_RATE                    0x02
131
#define UAC_DCR_MAXAMPL                 0x03
132
#define UAC_DCR_THRESHOLD               0x04
133
#define UAC_DCR_ATTACK_TIME             0x05
134
#define UAC_DCR_RELEASE_TIME            0x06
135
 
136
/* A.10.4 Extension Unit Control Selectors */
137
#define UAC_XU_ENABLE                   0x01
138
 
139
/* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */
140
#define UAC_MS_HEADER                   0x01
141
#define UAC_MIDI_IN_JACK                0x02
142
#define UAC_MIDI_OUT_JACK               0x03
143
 
144
/* MIDI - A.1 MS Class-Specific Endpoint Descriptor Subtypes */
145
#define UAC_MS_GENERAL                  0x01
146
 
147
/* Terminals - 2.1 USB Terminal Types */
148
#define UAC_TERMINAL_UNDEFINED          0x100
149
#define UAC_TERMINAL_STREAMING          0x101
150
#define UAC_TERMINAL_VENDOR_SPEC        0x1FF
151
 
152
/* Terminal Control Selectors */
153
/* 4.3.2  Class-Specific AC Interface Descriptor */
154
struct uac1_ac_header_descriptor {
155
        __u8  bLength;                  /* 8 + n */
156
        __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
157
        __u8  bDescriptorSubtype;       /* UAC_MS_HEADER */
158
        __le16 bcdADC;                  /* 0x0100 */
159
        __le16 wTotalLength;            /* includes Unit and Terminal desc. */
160
        __u8  bInCollection;            /* n */
161
        __u8  baInterfaceNr[];          /* [n] */
162
} __attribute__ ((packed));
163
 
164
#define UAC_DT_AC_HEADER_SIZE(n)        (8 + (n))
165
 
166
/* As above, but more useful for defining your own descriptors: */
167
#define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n)                     \
168
struct uac1_ac_header_descriptor_##n {                  \
169
        __u8  bLength;                                          \
170
        __u8  bDescriptorType;                                  \
171
        __u8  bDescriptorSubtype;                               \
172
        __le16 bcdADC;                                          \
173
        __le16 wTotalLength;                                    \
174
        __u8  bInCollection;                                    \
175
        __u8  baInterfaceNr[n];                                 \
176
} __attribute__ ((packed))
177
 
178
/* 4.3.2.1 Input Terminal Descriptor */
179
struct uac_input_terminal_descriptor {
180
        __u8  bLength;                  /* in bytes: 12 */
181
        __u8  bDescriptorType;          /* CS_INTERFACE descriptor type */
182
        __u8  bDescriptorSubtype;       /* INPUT_TERMINAL descriptor subtype */
183
        __u8  bTerminalID;              /* Constant uniquely terminal ID */
184
        __le16 wTerminalType;           /* USB Audio Terminal Types */
185
        __u8  bAssocTerminal;           /* ID of the Output Terminal associated */
186
        __u8  bNrChannels;              /* Number of logical output channels */
187
        __le16 wChannelConfig;
188
        __u8  iChannelNames;
189
        __u8  iTerminal;
190
} __attribute__ ((packed));
191
 
192
#define UAC_DT_INPUT_TERMINAL_SIZE                      12
193
 
194
/* Terminals - 2.2 Input Terminal Types */
195
#define UAC_INPUT_TERMINAL_UNDEFINED                    0x200
196
#define UAC_INPUT_TERMINAL_MICROPHONE                   0x201
197
#define UAC_INPUT_TERMINAL_DESKTOP_MICROPHONE           0x202
198
#define UAC_INPUT_TERMINAL_PERSONAL_MICROPHONE          0x203
199
#define UAC_INPUT_TERMINAL_OMNI_DIR_MICROPHONE          0x204
200
#define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY             0x205
201
#define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY        0x206
202
 
203
/* Terminals - control selectors */
204
 
205
#define UAC_TERMINAL_CS_COPY_PROTECT_CONTROL            0x01
206
 
207
/* 4.3.2.2 Output Terminal Descriptor */
208
struct uac1_output_terminal_descriptor {
209
        __u8  bLength;                  /* in bytes: 9 */
210
        __u8  bDescriptorType;          /* CS_INTERFACE descriptor type */
211
        __u8  bDescriptorSubtype;       /* OUTPUT_TERMINAL descriptor subtype */
212
        __u8  bTerminalID;              /* Constant uniquely terminal ID */
213
        __le16 wTerminalType;           /* USB Audio Terminal Types */
214
        __u8  bAssocTerminal;           /* ID of the Input Terminal associated */
215
        __u8  bSourceID;                /* ID of the connected Unit or Terminal*/
216
        __u8  iTerminal;
217
} __attribute__ ((packed));
218
 
219
#define UAC_DT_OUTPUT_TERMINAL_SIZE                     9
220
 
221
/* Terminals - 2.3 Output Terminal Types */
222
#define UAC_OUTPUT_TERMINAL_UNDEFINED                   0x300
223
#define UAC_OUTPUT_TERMINAL_SPEAKER                     0x301
224
#define UAC_OUTPUT_TERMINAL_HEADPHONES                  0x302
225
#define UAC_OUTPUT_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO  0x303
226
#define UAC_OUTPUT_TERMINAL_DESKTOP_SPEAKER             0x304
227
#define UAC_OUTPUT_TERMINAL_ROOM_SPEAKER                0x305
228
#define UAC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER       0x306
229
#define UAC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER    0x307
230
 
231
/* Set bControlSize = 2 as default setting */
232
#define UAC_DT_FEATURE_UNIT_SIZE(ch)            (7 + ((ch) + 1) * 2)
233
 
234
/* As above, but more useful for defining your own descriptors: */
235
#define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch)                 \
236
struct uac_feature_unit_descriptor_##ch {                       \
237
        __u8  bLength;                                          \
238
        __u8  bDescriptorType;                                  \
239
        __u8  bDescriptorSubtype;                               \
240
        __u8  bUnitID;                                          \
241
        __u8  bSourceID;                                        \
242
        __u8  bControlSize;                                     \
243
        __le16 bmaControls[ch + 1];                             \
244
        __u8  iFeature;                                         \
245
} __attribute__ ((packed))
246
 
247
/* 4.3.2.3 Mixer Unit Descriptor */
248
struct uac_mixer_unit_descriptor {
249
        __u8 bLength;
250
        __u8 bDescriptorType;
251
        __u8 bDescriptorSubtype;
252
        __u8 bUnitID;
253
        __u8 bNrInPins;
254
        __u8 baSourceID[];
255
} __attribute__ ((packed));
256
 
257
static __inline__ __u8 uac_mixer_unit_bNrChannels(struct uac_mixer_unit_descriptor *desc)
258
{
259
        return desc->baSourceID[desc->bNrInPins];
260
}
261
 
262
static __inline__ __u32 uac_mixer_unit_wChannelConfig(struct uac_mixer_unit_descriptor *desc,
263
                                                  int protocol)
264
{
265
        if (protocol == UAC_VERSION_1)
266
                return (desc->baSourceID[desc->bNrInPins + 2] << 8) |
267
                        desc->baSourceID[desc->bNrInPins + 1];
268
        else
269
                return  (desc->baSourceID[desc->bNrInPins + 4] << 24) |
270
                        (desc->baSourceID[desc->bNrInPins + 3] << 16) |
271
                        (desc->baSourceID[desc->bNrInPins + 2] << 8)  |
272
                        (desc->baSourceID[desc->bNrInPins + 1]);
273
}
274
 
275
static __inline__ __u8 uac_mixer_unit_iChannelNames(struct uac_mixer_unit_descriptor *desc,
276
                                                int protocol)
277
{
278
        return (protocol == UAC_VERSION_1) ?
279
                desc->baSourceID[desc->bNrInPins + 3] :
280
                desc->baSourceID[desc->bNrInPins + 5];
281
}
282
 
283
static __inline__ __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc,
284
                                              int protocol)
285
{
286
        return (protocol == UAC_VERSION_1) ?
287
                &desc->baSourceID[desc->bNrInPins + 4] :
288
                &desc->baSourceID[desc->bNrInPins + 6];
289
}
290
 
291
static __inline__ __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc)
292
{
293
        __u8 *raw = (__u8 *) desc;
294
        return raw[desc->bLength - 1];
295
}
296
 
297
/* 4.3.2.4 Selector Unit Descriptor */
298
struct uac_selector_unit_descriptor {
299
        __u8 bLength;
300
        __u8 bDescriptorType;
301
        __u8 bDescriptorSubtype;
302
        __u8 bUintID;
303
        __u8 bNrInPins;
304
        __u8 baSourceID[];
305
} __attribute__ ((packed));
306
 
307
static __inline__ __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc)
308
{
309
        __u8 *raw = (__u8 *) desc;
310
        return raw[desc->bLength - 1];
311
}
312
 
313
/* 4.3.2.5 Feature Unit Descriptor */
314
struct uac_feature_unit_descriptor {
315
        __u8 bLength;
316
        __u8 bDescriptorType;
317
        __u8 bDescriptorSubtype;
318
        __u8 bUnitID;
319
        __u8 bSourceID;
320
        __u8 bControlSize;
321
        __u8 bmaControls[0]; /* variable length */
322
} __attribute__((packed));
323
 
324
static __inline__ __u8 uac_feature_unit_iFeature(struct uac_feature_unit_descriptor *desc)
325
{
326
        __u8 *raw = (__u8 *) desc;
327
        return raw[desc->bLength - 1];
328
}
329
 
330
/* 4.3.2.6 Processing Unit Descriptors */
331
struct uac_processing_unit_descriptor {
332
        __u8 bLength;
333
        __u8 bDescriptorType;
334
        __u8 bDescriptorSubtype;
335
        __u8 bUnitID;
336
        __u16 wProcessType;
337
        __u8 bNrInPins;
338
        __u8 baSourceID[];
339
} __attribute__ ((packed));
340
 
341
static __inline__ __u8 uac_processing_unit_bNrChannels(struct uac_processing_unit_descriptor *desc)
342
{
343
        return desc->baSourceID[desc->bNrInPins];
344
}
345
 
346
static __inline__ __u32 uac_processing_unit_wChannelConfig(struct uac_processing_unit_descriptor *desc,
347
                                                       int protocol)
348
{
349
        if (protocol == UAC_VERSION_1)
350
                return (desc->baSourceID[desc->bNrInPins + 2] << 8) |
351
                        desc->baSourceID[desc->bNrInPins + 1];
352
        else
353
                return  (desc->baSourceID[desc->bNrInPins + 4] << 24) |
354
                        (desc->baSourceID[desc->bNrInPins + 3] << 16) |
355
                        (desc->baSourceID[desc->bNrInPins + 2] << 8)  |
356
                        (desc->baSourceID[desc->bNrInPins + 1]);
357
}
358
 
359
static __inline__ __u8 uac_processing_unit_iChannelNames(struct uac_processing_unit_descriptor *desc,
360
                                                     int protocol)
361
{
362
        return (protocol == UAC_VERSION_1) ?
363
                desc->baSourceID[desc->bNrInPins + 3] :
364
                desc->baSourceID[desc->bNrInPins + 5];
365
}
366
 
367
static __inline__ __u8 uac_processing_unit_bControlSize(struct uac_processing_unit_descriptor *desc,
368
                                                    int protocol)
369
{
370
        return (protocol == UAC_VERSION_1) ?
371
                desc->baSourceID[desc->bNrInPins + 4] :
372
                desc->baSourceID[desc->bNrInPins + 6];
373
}
374
 
375
static __inline__ __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_descriptor *desc,
376
                                                   int protocol)
377
{
378
        return (protocol == UAC_VERSION_1) ?
379
                &desc->baSourceID[desc->bNrInPins + 5] :
380
                &desc->baSourceID[desc->bNrInPins + 7];
381
}
382
 
383
static __inline__ __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_descriptor *desc,
384
                                                   int protocol)
385
{
386
        __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
387
        return *(uac_processing_unit_bmControls(desc, protocol)
388
                        + control_size);
389
}
390
 
391
static __inline__ __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc,
392
                                                 int protocol)
393
{
394
        __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
395
        return uac_processing_unit_bmControls(desc, protocol)
396
                        + control_size + 1;
397
}
398
 
399
/* 4.5.2 Class-Specific AS Interface Descriptor */
400
struct uac1_as_header_descriptor {
401
        __u8  bLength;                  /* in bytes: 7 */
402
        __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
403
        __u8  bDescriptorSubtype;       /* AS_GENERAL */
404
        __u8  bTerminalLink;            /* Terminal ID of connected Terminal */
405
        __u8  bDelay;                   /* Delay introduced by the data path */
406
        __le16 wFormatTag;              /* The Audio Data Format */
407
} __attribute__ ((packed));
408
 
409
#define UAC_DT_AS_HEADER_SIZE           7
410
 
411
/* Formats - A.1.1 Audio Data Format Type I Codes */
412
#define UAC_FORMAT_TYPE_I_UNDEFINED     0x0
413
#define UAC_FORMAT_TYPE_I_PCM           0x1
414
#define UAC_FORMAT_TYPE_I_PCM8          0x2
415
#define UAC_FORMAT_TYPE_I_IEEE_FLOAT    0x3
416
#define UAC_FORMAT_TYPE_I_ALAW          0x4
417
#define UAC_FORMAT_TYPE_I_MULAW         0x5
418
 
419
struct uac_format_type_i_continuous_descriptor {
420
        __u8  bLength;                  /* in bytes: 8 + (ns * 3) */
421
        __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
422
        __u8  bDescriptorSubtype;       /* FORMAT_TYPE */
423
        __u8  bFormatType;              /* FORMAT_TYPE_1 */
424
        __u8  bNrChannels;              /* physical channels in the stream */
425
        __u8  bSubframeSize;            /* */
426
        __u8  bBitResolution;
427
        __u8  bSamFreqType;
428
        __u8  tLowerSamFreq[3];
429
        __u8  tUpperSamFreq[3];
430
} __attribute__ ((packed));
431
 
432
#define UAC_FORMAT_TYPE_I_CONTINUOUS_DESC_SIZE  14
433
 
434
struct uac_format_type_i_discrete_descriptor {
435
        __u8  bLength;                  /* in bytes: 8 + (ns * 3) */
436
        __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
437
        __u8  bDescriptorSubtype;       /* FORMAT_TYPE */
438
        __u8  bFormatType;              /* FORMAT_TYPE_1 */
439
        __u8  bNrChannels;              /* physical channels in the stream */
440
        __u8  bSubframeSize;            /* */
441
        __u8  bBitResolution;
442
        __u8  bSamFreqType;
443
        __u8  tSamFreq[][3];
444
} __attribute__ ((packed));
445
 
446
#define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n)              \
447
struct uac_format_type_i_discrete_descriptor_##n {              \
448
        __u8  bLength;                                          \
449
        __u8  bDescriptorType;                                  \
450
        __u8  bDescriptorSubtype;                               \
451
        __u8  bFormatType;                                      \
452
        __u8  bNrChannels;                                      \
453
        __u8  bSubframeSize;                                    \
454
        __u8  bBitResolution;                                   \
455
        __u8  bSamFreqType;                                     \
456
        __u8  tSamFreq[n][3];                                   \
457
} __attribute__ ((packed))
458
 
459
#define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n) (8 + (n * 3))
460
 
461
struct uac_format_type_i_ext_descriptor {
462
        __u8 bLength;
463
        __u8 bDescriptorType;
464
        __u8 bDescriptorSubtype;
465
        __u8 bFormatType;
466
        __u8 bSubslotSize;
467
        __u8 bBitResolution;
468
        __u8 bHeaderLength;
469
        __u8 bControlSize;
470
        __u8 bSideBandProtocol;
471
} __attribute__((packed));
472
 
473
/* Formats - Audio Data Format Type I Codes */
474
 
475
#define UAC_FORMAT_TYPE_II_MPEG 0x1001
476
#define UAC_FORMAT_TYPE_II_AC3  0x1002
477
 
478
struct uac_format_type_ii_discrete_descriptor {
479
        __u8 bLength;
480
        __u8 bDescriptorType;
481
        __u8 bDescriptorSubtype;
482
        __u8 bFormatType;
483
        __le16 wMaxBitRate;
484
        __le16 wSamplesPerFrame;
485
        __u8 bSamFreqType;
486
        __u8 tSamFreq[][3];
487
} __attribute__((packed));
488
 
489
struct uac_format_type_ii_ext_descriptor {
490
        __u8 bLength;
491
        __u8 bDescriptorType;
492
        __u8 bDescriptorSubtype;
493
        __u8 bFormatType;
494
        __u16 wMaxBitRate;
495
        __u16 wSamplesPerFrame;
496
        __u8 bHeaderLength;
497
        __u8 bSideBandProtocol;
498
} __attribute__((packed));
499
 
500
/* type III */
501
#define UAC_FORMAT_TYPE_III_IEC1937_AC3 0x2001
502
#define UAC_FORMAT_TYPE_III_IEC1937_MPEG1_LAYER1        0x2002
503
#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT 0x2003
504
#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_EXT   0x2004
505
#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER1_LS     0x2005
506
#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER23_LS    0x2006
507
 
508
/* Formats - A.2 Format Type Codes */
509
#define UAC_FORMAT_TYPE_UNDEFINED       0x0
510
#define UAC_FORMAT_TYPE_I               0x1
511
#define UAC_FORMAT_TYPE_II              0x2
512
#define UAC_FORMAT_TYPE_III             0x3
513
#define UAC_EXT_FORMAT_TYPE_I           0x81
514
#define UAC_EXT_FORMAT_TYPE_II          0x82
515
#define UAC_EXT_FORMAT_TYPE_III         0x83
516
 
517
struct uac_iso_endpoint_descriptor {
518
        __u8  bLength;                  /* in bytes: 7 */
519
        __u8  bDescriptorType;          /* USB_DT_CS_ENDPOINT */
520
        __u8  bDescriptorSubtype;       /* EP_GENERAL */
521
        __u8  bmAttributes;
522
        __u8  bLockDelayUnits;
523
        __le16 wLockDelay;
524
} __attribute__((packed));
525
#define UAC_ISO_ENDPOINT_DESC_SIZE      7
526
 
527
#define UAC_EP_CS_ATTR_SAMPLE_RATE      0x01
528
#define UAC_EP_CS_ATTR_PITCH_CONTROL    0x02
529
#define UAC_EP_CS_ATTR_FILL_MAX         0x80
530
 
531
/* status word format (3.7.1.1) */
532
 
533
#define UAC1_STATUS_TYPE_ORIG_MASK              0x0f
534
#define UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF  0x0
535
#define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_IF   0x1
536
#define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_EP   0x2
537
 
538
#define UAC1_STATUS_TYPE_IRQ_PENDING            (1 << 7)
539
#define UAC1_STATUS_TYPE_MEM_CHANGED            (1 << 6)
540
 
541
struct uac1_status_word {
542
        __u8 bStatusType;
543
        __u8 bOriginator;
544
} __attribute__((packed));
545
 
546
 
547
#endif /* __LINUX_USB_AUDIO_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.