]> nv-tegra.nvidia Code Review - linux-2.6.git/blobdiff - sound/usb/usbquirks.h
[ALSA] usb-audio: another Logitech QuickCam ID
[linux-2.6.git] / sound / usb / usbquirks.h
index 0e0575425797ee2c2fb9ebd2d0d997b9e7385a0d..59f07e874e5262ce6826e6c95df06ba10a126f9f 100644 (file)
        .idProduct = prod, \
        .bInterfaceClass = USB_CLASS_VENDOR_SPEC
 
+/*
+ * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
+ * class matches do not take effect without an explicit ID match.
+ */
+{
+       .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
+                      USB_DEVICE_ID_MATCH_INT_CLASS |
+                      USB_DEVICE_ID_MATCH_INT_SUBCLASS,
+       .idVendor = 0x046d,
+       .idProduct = 0x0850,
+       .bInterfaceClass = USB_CLASS_AUDIO,
+       .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
+},
+{
+       .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
+                      USB_DEVICE_ID_MATCH_INT_CLASS |
+                      USB_DEVICE_ID_MATCH_INT_SUBCLASS,
+       .idVendor = 0x046d,
+       .idProduct = 0x0850,
+       .bInterfaceClass = USB_CLASS_AUDIO,
+       .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
+},
+{
+       .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
+                      USB_DEVICE_ID_MATCH_INT_CLASS |
+                      USB_DEVICE_ID_MATCH_INT_SUBCLASS,
+       .idVendor = 0x046d,
+       .idProduct = 0x08f0,
+       .bInterfaceClass = USB_CLASS_AUDIO,
+       .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
+},
+{
+       .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
+                      USB_DEVICE_ID_MATCH_INT_CLASS |
+                      USB_DEVICE_ID_MATCH_INT_SUBCLASS,
+       .idVendor = 0x046d,
+       .idProduct = 0x08f6,
+       .bInterfaceClass = USB_CLASS_AUDIO,
+       .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
+},
+
 /*
  * Yamaha devices
  */
@@ -82,6 +123,7 @@ YAMAHA_DEVICE(0x1012, "TYROS"),
 YAMAHA_DEVICE(0x1013, "PF-500"),
 YAMAHA_DEVICE(0x1014, "S90"),
 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
+YAMAHA_DEVICE(0x1016, "MDP-5"),
 YAMAHA_DEVICE(0x1017, "CVP-204"),
 YAMAHA_DEVICE(0x1018, "CVP-206"),
 YAMAHA_DEVICE(0x1019, "CVP-208"),
@@ -90,6 +132,7 @@ YAMAHA_DEVICE(0x101b, "PSR-1100"),
 YAMAHA_DEVICE(0x101c, "PSR-2100"),
 YAMAHA_DEVICE(0x101d, "CLP-175"),
 YAMAHA_DEVICE(0x101e, "PSR-K1"),
+YAMAHA_DEVICE(0x101f, "EZ-J24"),
 YAMAHA_DEVICE(0x1020, "EZ-250i"),
 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
@@ -121,6 +164,10 @@ YAMAHA_DEVICE(0x103e, NULL),
 YAMAHA_DEVICE(0x103f, NULL),
 YAMAHA_DEVICE(0x1040, NULL),
 YAMAHA_DEVICE(0x1041, NULL),
+YAMAHA_DEVICE(0x1042, NULL),
+YAMAHA_DEVICE(0x1043, NULL),
+YAMAHA_DEVICE(0x1044, NULL),
+YAMAHA_DEVICE(0x1045, NULL),
 YAMAHA_DEVICE(0x2000, "DGP-7"),
 YAMAHA_DEVICE(0x2001, "DGP-5"),
 YAMAHA_DEVICE(0x2002, NULL),
@@ -139,6 +186,7 @@ YAMAHA_DEVICE(0x500b, "DME64N"),
 YAMAHA_DEVICE(0x500c, "DME24N"),
 YAMAHA_DEVICE(0x500d, NULL),
 YAMAHA_DEVICE(0x500e, NULL),
+YAMAHA_DEVICE(0x500f, NULL),
 YAMAHA_DEVICE(0x7000, "DTX"),
 YAMAHA_DEVICE(0x7010, "UB99"),
 #undef YAMAHA_DEVICE
@@ -294,7 +342,8 @@ YAMAHA_DEVICE(0x7010, "UB99"),
        }
 },
 {
-       /* a later revision uses ID 0x0099 */
+       /* Has ID 0x0099 when not in "Advanced Driver" mode.
+        * The UM-2EX has only one input, but we cannot detect this. */
        USB_DEVICE(0x0582, 0x0005),
        .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
                .vendor_name = "EDIROL",
@@ -385,7 +434,7 @@ YAMAHA_DEVICE(0x7010, "UB99"),
        }
 },
 {
-       /* a later revision uses ID 0x009d */
+       /* has ID 0x009d when not in "Advanced Driver" mode */
        USB_DEVICE(0x0582, 0x0009),
        .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
                .vendor_name = "EDIROL",
@@ -664,17 +713,51 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                .ifnum = QUIRK_ANY_INTERFACE,
                .type = QUIRK_COMPOSITE,
                .data = (const struct snd_usb_audio_quirk[]) {
+                       {
+                               .ifnum = 0,
+                               .type = QUIRK_IGNORE_INTERFACE
+                       },
                        {
                                .ifnum = 1,
-                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
+                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
+                               .data = & (const struct audioformat) {
+                                       .format = SNDRV_PCM_FORMAT_S24_3LE,
+                                       .channels = 2,
+                                       .iface = 1,
+                                       .altsetting = 1,
+                                       .altset_idx = 1,
+                                       .attributes = 0,
+                                       .endpoint = 0x01,
+                                       .ep_attr = 0x01,
+                                       .rates = SNDRV_PCM_RATE_CONTINUOUS,
+                                       .rate_min = 44100,
+                                       .rate_max = 44100,
+                               }
                        },
                        {
                                .ifnum = 2,
-                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
+                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
+                               .data = & (const struct audioformat) {
+                                       .format = SNDRV_PCM_FORMAT_S24_3LE,
+                                       .channels = 2,
+                                       .iface = 2,
+                                       .altsetting = 1,
+                                       .altset_idx = 1,
+                                       .attributes = 0,
+                                       .endpoint = 0x82,
+                                       .ep_attr = 0x01,
+                                       .rates = SNDRV_PCM_RATE_CONTINUOUS,
+                                       .rate_min = 44100,
+                                       .rate_max = 44100,
+                               }
                        },
                        {
                                .ifnum = 3,
-                               .type = QUIRK_MIDI_STANDARD_INTERFACE
+                               .type = QUIRK_MIDI_FIXED_ENDPOINT,
+                               .data = & (const struct snd_usb_midi_endpoint_info) {
+                                       .out_cables = 0x0001,
+                                       .in_cables  = 0x0001
+                               }
                        },
                        {
                                .ifnum = -1
@@ -905,6 +988,29 @@ YAMAHA_DEVICE(0x7010, "UB99"),
        }
 },
        /* TODO: add Edirol M-100FX support */
+{
+       /* has ID 0x004e when not in "Advanced Driver" mode */
+       USB_DEVICE(0x0582, 0x004c),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "EDIROL",
+               .product_name = "PCR-A",
+               .ifnum = QUIRK_ANY_INTERFACE,
+               .type = QUIRK_COMPOSITE,
+               .data = (const struct snd_usb_audio_quirk[]) {
+                       {
+                               .ifnum = 1,
+                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
+                       },
+                       {
+                               .ifnum = 2,
+                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
+                       },
+                       {
+                               .ifnum = -1
+                       }
+               }
+       }
+},
 {
        /* has ID 0x004f when not in "Advanced Driver" mode */
        USB_DEVICE(0x0582, 0x004d),
@@ -1056,6 +1162,83 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                }
        }
 },
+/* Roland UA-101 in High-Speed Mode only */
+{
+       USB_DEVICE(0x0582, 0x007d),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "Roland",
+               .product_name = "UA-101",
+               .ifnum = QUIRK_ANY_INTERFACE,
+               .type = QUIRK_COMPOSITE,
+               .data = (const struct snd_usb_audio_quirk[]) {
+                       {
+                               .ifnum = 0,
+                               .type = QUIRK_AUDIO_EDIROL_UA101
+                       },
+                       {
+                               .ifnum = 1,
+                               .type = QUIRK_AUDIO_EDIROL_UA101
+                       },
+                       {
+                               .ifnum = 2,
+                               .type = QUIRK_MIDI_FIXED_ENDPOINT,
+                               .data = & (const struct snd_usb_midi_endpoint_info) {
+                                       .out_cables = 0x0001,
+                                       .in_cables  = 0x0001
+                               }
+                       },
+                       {
+                               .ifnum = -1
+                       }
+               }
+       }
+},
+{
+       /* has ID 0x0081 when not in "Advanced Driver" mode */
+       USB_DEVICE(0x0582, 0x0080),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "Roland",
+               .product_name = "G-70",
+               .ifnum = 0,
+               .type = QUIRK_MIDI_FIXED_ENDPOINT,
+               .data = & (const struct snd_usb_midi_endpoint_info) {
+                       .out_cables = 0x0001,
+                       .in_cables  = 0x0001
+               }
+       }
+},
+       /* TODO: add Roland V-SYNTH XT support */
+       /* TODO: add BOSS GT-PRO support */
+{
+       /* has ID 0x008c when not in "Advanced Driver" mode */
+       USB_DEVICE(0x0582, 0x008b),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "EDIROL",
+               .product_name = "PC-50",
+               .ifnum = 0,
+               .type = QUIRK_MIDI_FIXED_ENDPOINT,
+               .data = & (const struct snd_usb_midi_endpoint_info) {
+                       .out_cables = 0x0001,
+                       .in_cables  = 0x0001
+               }
+       }
+},
+       /* TODO: add Edirol PC-80 support */
+       /* TODO: add Edirol UA-1EX support */
+{
+       USB_DEVICE(0x0582, 0x009a),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "EDIROL",
+               .product_name = "UM-3EX",
+               .ifnum = 0,
+               .type = QUIRK_MIDI_FIXED_ENDPOINT,
+               .data = & (const struct snd_usb_midi_endpoint_info) {
+                       .out_cables = 0x000f,
+                       .in_cables  = 0x000f
+               }
+       }
+},
+       /* TODO: add Edirol MD-P1 support */
 
 /* Guillemot devices */
 {
@@ -1077,15 +1260,6 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                }
        }
 },
-       /* TODO: add Edirol UA-101 support */
-       /* TODO: add Roland G-70 support */
-       /* TODO: add Roland V-SYNTH XT support */
-       /* TODO: add BOSS GT-PRO support */
-       /* TODO: add Edirol PC-50 support */
-       /* TODO: add Edirol PC-80 support */
-       /* TODO: add Edirol UA-1EX support */
-       /* TODO: add Edirol UM-3 support */
-       /* TODO: add Edirol MD-P1 support */
 
 /* Midiman/M-Audio devices */
 {
@@ -1333,6 +1507,27 @@ YAMAHA_DEVICE(0x7010, "UB99"),
        }
 },
 
+/* Casio devices */
+{
+       USB_DEVICE(0x07cf, 0x6801),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "Casio",
+               .product_name = "PL-40R",
+               .ifnum = 0,
+               .type = QUIRK_MIDI_YAMAHA
+       }
+},
+{
+       /* this ID is used by several devices without a product ID */
+       USB_DEVICE(0x07cf, 0x6802),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "Casio",
+               .product_name = "Keyboard",
+               .ifnum = 0,
+               .type = QUIRK_MIDI_YAMAHA
+       }
+},
+
 /* Mark of the Unicorn devices */
 {
        /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
@@ -1434,6 +1629,24 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                .type = QUIRK_MIDI_STANDARD_INTERFACE
        }
 },
+{
+       USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "TerraTec",
+               .product_name = "PHASE 26",
+               .ifnum = 3,
+               .type = QUIRK_MIDI_STANDARD_INTERFACE
+       }
+},
+{
+       USB_DEVICE(0x0ccd, 0x0035),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "Miditech",
+               .product_name = "Play'n Roll",
+               .ifnum = 0,
+               .type = QUIRK_MIDI_CME
+       }
+},
 
 /* Novation EMS devices */
 {
@@ -1464,22 +1677,24 @@ YAMAHA_DEVICE(0x7010, "UB99"),
        }
 },
 
+/* Miditech devices */
 {
        USB_DEVICE(0x4752, 0x0011),
        .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
                .vendor_name = "Miditech",
                .product_name = "Midistart-2",
                .ifnum = 0,
-               .type = QUIRK_MIDI_MIDITECH
+               .type = QUIRK_MIDI_CME
        }
 },
+
+/* Central Music devices */
 {
+       /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
        USB_DEVICE(0x7104, 0x2202),
        .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
-               .vendor_name = "Miditech",
-               .product_name = "MidiStudio-2",
                .ifnum = 0,
-               .type = QUIRK_MIDI_MIDITECH
+               .type = QUIRK_MIDI_CME
        }
 },