X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sound%2Fusb%2Fusbaudio.h;h=0f4b2b8541d6a54e1d2deeb6bf6e49324bba9933;hb=refs%2Fheads%2Fvserver;hp=064194c9f36abe72df0bfceb78b5debc2ba3fb00;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h index 064194c9f..0f4b2b854 100644 --- a/sound/usb/usbaudio.h +++ b/sound/usb/usbaudio.h @@ -30,13 +30,6 @@ #define USB_SUBCLASS_MIDI_STREAMING 0x03 #define USB_SUBCLASS_VENDOR_SPEC 0xff -#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 @@ -118,16 +111,19 @@ /* maximum number of endpoints per interface */ #define MIDI_MAX_ENDPOINTS 2 +/* handling of USB vendor/product ID pairs as 32-bit numbers */ +#define USB_ID(vendor, product) (((vendor) << 16) | (product)) +#define USB_ID_VENDOR(id) ((id) >> 16) +#define USB_ID_PRODUCT(id) ((u16)(id)) + /* */ -typedef struct snd_usb_audio snd_usb_audio_t; - struct snd_usb_audio { - int index; struct usb_device *dev; - snd_card_t *card; + struct snd_card *card; + u32 usb_id; int shutdown; int num_interfaces; @@ -137,38 +133,50 @@ struct snd_usb_audio { struct list_head midi_list; /* list of midi interfaces */ int next_midi_device; - unsigned int ignore_ctl_error; /* for mixer */ -}; + struct list_head mixer_list; /* list of mixer interfaces */ +}; /* * Information about devices with broken descriptors */ +/* special values for .ifnum */ #define QUIRK_NO_INTERFACE -2 #define QUIRK_ANY_INTERFACE -1 -#define QUIRK_MIDI_FIXED_ENDPOINT 0 -#define QUIRK_MIDI_YAMAHA 1 -#define QUIRK_MIDI_MIDIMAN 2 -#define QUIRK_COMPOSITE 3 -#define QUIRK_AUDIO_FIXED_ENDPOINT 4 -#define QUIRK_AUDIO_STANDARD_INTERFACE 5 -#define QUIRK_MIDI_STANDARD_INTERFACE 6 - -typedef struct snd_usb_audio_quirk snd_usb_audio_quirk_t; -typedef struct snd_usb_midi_endpoint_info snd_usb_midi_endpoint_info_t; +enum quirk_type { + QUIRK_IGNORE_INTERFACE, + QUIRK_COMPOSITE, + QUIRK_MIDI_STANDARD_INTERFACE, + QUIRK_MIDI_FIXED_ENDPOINT, + QUIRK_MIDI_YAMAHA, + QUIRK_MIDI_MIDIMAN, + QUIRK_MIDI_NOVATION, + QUIRK_MIDI_RAW, + QUIRK_MIDI_EMAGIC, + QUIRK_MIDI_CME, + QUIRK_AUDIO_STANDARD_INTERFACE, + QUIRK_AUDIO_FIXED_ENDPOINT, + QUIRK_AUDIO_EDIROL_UA700_UA25, + QUIRK_AUDIO_EDIROL_UA1000, + + QUIRK_TYPE_COUNT +}; struct snd_usb_audio_quirk { const char *vendor_name; const char *product_name; int16_t ifnum; - int16_t type; + uint16_t type; const void *data; }; /* data for QUIRK_MIDI_FIXED_ENDPOINT */ struct snd_usb_midi_endpoint_info { - int8_t out_ep, in_ep; /* ep number, 0 autodetect */ + int8_t out_ep; /* ep number, 0 autodetect */ + uint8_t out_interval; /* interval for interrupt endpoints */ + int8_t in_ep; + uint8_t in_interval; uint16_t out_cables; /* bitmask */ uint16_t in_cables; /* bitmask */ }; @@ -185,6 +193,17 @@ struct snd_usb_midi_endpoint_info { /* for QUIRK_AUDIO/MIDI_STANDARD_INTERFACE, data is NULL */ +/* for QUIRK_AUDIO_EDIROL_UA700_UA25/UA1000, data is NULL */ + +/* for QUIRK_IGNORE_INTERFACE, data is NULL */ + +/* for QUIRK_MIDI_NOVATION and _RAW, data is NULL */ + +/* for QUIRK_MIDI_EMAGIC, data points to a snd_usb_midi_endpoint_info + * structure (out_cables and in_cables only) */ + +/* for QUIRK_MIDI_CME, data is NULL */ + /* */ @@ -197,10 +216,18 @@ unsigned int snd_usb_combine_bytes(unsigned char *bytes, int size); void *snd_usb_find_desc(void *descstart, int desclen, void *after, u8 dtype); void *snd_usb_find_csint_desc(void *descstart, int desclen, void *after, u8 dsubtype); -int snd_usb_create_mixer(snd_usb_audio_t *chip, int ctrlif); +int snd_usb_ctl_msg(struct usb_device *dev, unsigned int pipe, + __u8 request, __u8 requesttype, __u16 value, __u16 index, + void *data, __u16 size, int timeout); + +int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif); +void snd_usb_mixer_disconnect(struct list_head *p); -int snd_usb_create_midi_interface(snd_usb_audio_t *chip, struct usb_interface *iface, const snd_usb_audio_quirk_t *quirk); -void snd_usbmidi_disconnect(struct list_head *p, struct usb_driver *driver); +int snd_usb_create_midi_interface(struct snd_usb_audio *chip, struct usb_interface *iface, + const struct snd_usb_audio_quirk *quirk); +void snd_usbmidi_input_stop(struct list_head* p); +void snd_usbmidi_input_start(struct list_head* p); +void snd_usbmidi_disconnect(struct list_head *p); /* * retrieve usb_interface descriptor from the host interface @@ -213,14 +240,6 @@ void snd_usbmidi_disconnect(struct list_head *p, struct usb_driver *driver); #define get_cfg_desc(cfg) (&(cfg)->desc) #endif -#ifndef usb_pipe_needs_resubmit -#define usb_pipe_needs_resubmit(pipe) 1 -#endif - -#ifndef snd_usb_complete_callback -#define snd_usb_complete_callback(x) (x) -#endif - #ifndef snd_usb_get_speed #define snd_usb_get_speed(dev) ((dev)->speed) #endif