summaryrefslogtreecommitdiffstats
path: root/drivers/usb/audio.h
blob: bb51e468bac6cdc4b2a62dcd63754d2d26f6f4bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#define USB_DT_CS_DEVICE                0x21
#define USB_DT_CS_CONFIG                0x22
#define USB_DT_CS_STRING                0x23
#define USB_DT_CS_INTERFACE             0x24
#define USB_DT_CS_ENDPOINT              0x25

#define CS_AUDIO_UNDEFINED		0x20
#define CS_AUDIO_DEVICE			0x21
#define CS_AUDIO_CONFIGURATION		0x22
#define CS_AUDIO_STRING			0x23
#define CS_AUDIO_INTERFACE		0x24
#define CS_AUDIO_ENDPOINT		0x25

#define HEADER				0x01
#define INPUT_TERMINAL			0x02
#define OUTPUT_TERMINAL			0x03
#define MIXER_UNIT			0x04
#define SELECTOR_UNIT			0x05
#define FEATURE_UNIT			0x06
#define PROCESSING_UNIT			0x07
#define EXTENSION_UNIT			0x08

#define AS_GENERAL			0x01
#define FORMAT_TYPE			0x02
#define FORMAT_SPECIFIC			0x03

#define EP_GENERAL			0x01

#define MAX_CHAN			9
#define MAX_FREQ			16
#define MAX_IFACE			8
#define MAX_FORMAT			8
#define MAX_ALT				32 	/* Sorry, we need quite a few for the Philips webcams */

struct usb_audio_terminal
{	
	u8	flags;
	u8	assoc;
	u16	type;			/* Mic etc */
	u8	channels;
	u8	source;
	u16	chancfg;
};

struct usb_audio_format
{
	u8	type;
	u8	channels;
	u8	num_freq;
	u8	sfz;
	u8	bits;
	u16	freq[MAX_FREQ];
};

struct usb_audio_interface
{
	u8	terminal;
	u8	delay;
	u16	num_formats;
	u16	format_type;
	u8	flags;
	u8	idleconf;	/* Idle config */
#define AU_IFACE_FOUND	1
	struct  usb_audio_format format[MAX_FORMAT];
};

struct usb_audio_device
{
	struct list_head list;
	u8	mixer;
	u8	selector;
	void	*irq_handle;
	u8	num_channels;
	u8	num_dsp_iface;
	u8	channel_map[MAX_CHAN];
	struct usb_audio_terminal terminal[MAX_CHAN];
	struct usb_audio_interface interface[MAX_IFACE][MAX_ALT];
};



/* Audio Class specific Request Codes */

#define SET_CUR    0x01
#define GET_CUR    0x81
#define SET_MIN    0x02
#define GET_MIN    0x82
#define SET_MAX    0x03
#define GET_MAX    0x83
#define SET_RES    0x04
#define GET_RES    0x84
#define SET_MEM    0x05
#define GET_MEM    0x85
#define GET_STAT   0xff

/* Terminal Control Selectors */

#define COPY_PROTECT_CONTROL       0x01

/* Feature Unit Control Selectors */

#define MUTE_CONTROL               0x01
#define VOLUME_CONTROL             0x02
#define BASS_CONTROL               0x03
#define MID_CONTROL                0x04
#define TREBLE_CONTROL             0x05
#define GRAPHIC_EQUALIZER_CONTROL  0x06
#define AUTOMATIC_GAIN_CONTROL     0x07
#define DELAY_CONTROL              0x08
#define BASS_BOOST_CONTROL         0x09
#define LOUDNESS_CONTROL           0x0a

/* Endpoint Control Selectors */

#define SAMPLING_FREQ_CONTROL      0x01
#define PITCH_CONTROL              0x02