|  | #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 |