Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / sound / usb / usbaudio.h
index eecbf19..8873352 100644 (file)
 /* 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;
 
@@ -136,7 +140,7 @@ 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 */
 };
 
 /*
@@ -147,29 +151,30 @@ struct snd_usb_audio {
 #define QUIRK_NO_INTERFACE             -2
 #define QUIRK_ANY_INTERFACE            -1
 
-/* quirk type */
-#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
-#define QUIRK_AUDIO_EDIROL_UA700_UA25  7
-#define QUIRK_AUDIO_EDIROL_UA1000      8
-#define QUIRK_IGNORE_INTERFACE         9
-#define QUIRK_MIDI_NOVATION            10
-#define QUIRK_MIDI_MOTU                        11
-#define QUIRK_MIDI_EMAGIC              12
-
-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;
 };
 
@@ -199,11 +204,13 @@ struct snd_usb_midi_endpoint_info {
 
 /* for QUIRK_IGNORE_INTERFACE, data is NULL */
 
-/* for QUIRK_MIDI_NOVATION and _MOTU, 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 */
+
 /*
  */
 
@@ -216,14 +223,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_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_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(snd_usb_audio_t *chip, int ctrlif);
+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);
+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, struct usb_driver *driver);
+void snd_usbmidi_disconnect(struct list_head *p);
 
 /*
  * retrieve usb_interface descriptor from the host interface
@@ -236,14 +247,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