[ALSA] Add support for EDIROL UM-3ex
authorBrent Cook <busterbcook@yahoo.com>
Tue, 10 Jan 2006 13:27:20 +0000 (14:27 +0100)
committerJaroslav Kysela <perex@suse.cz>
Wed, 22 Mar 2006 09:22:14 +0000 (10:22 +0100)
Modules: USB generic driver

This is my naive attempt at adding ALSA device support. The attached
patch provides support for the EDIROL UM-3ex. This is a 3-port USB midi
interface with a built-in USB hub and the ability to chain 2 other
UM-3x's in a master-slave configuration. I only have one, so I do not
know how this works in practice.

Though this is a 3-port device, I had to throw in that 4th 'Control' interface
to the definition in order to make the 3rd port work. If I set in/out_cables
to 0x000b, a 3rd interface appears on the driver, but it does nothing.
Changing it to 0x000f allows the 3rd interface to work, but of course
interface 4 does not work because it does not exist.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/usbmidi.c
sound/usb/usbquirks.h

index f15b021c3ce89fdb598e98a63d67d3612c89862f..905e33e6068120fd234eb31cdfd30e5cf8257e1a 100644 (file)
@@ -1092,6 +1092,8 @@ static struct {
        { USB_ID(0x086a, 0x0001), 8, "%s Broadcast" },
        { USB_ID(0x086a, 0x0002), 8, "%s Broadcast" },
        { USB_ID(0x086a, 0x0003), 4, "%s Broadcast" },
+       /* Edirol UM-3ex */
+       { USB_ID(0x0582, 0x009a), 3, "%s Control" },
 };
 
 static void snd_usbmidi_init_substream(struct snd_usb_midi* umidi,
index 6190ada00e389084f3143920c1485ddd1b16c65a..8f348611bb0082c16179450e9aeab49cf3124102 100644 (file)
@@ -203,6 +203,28 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                }
        }
 },
+{
+       USB_DEVICE(0x0582, 0x009a),
+       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+               .vendor_name = "EDIROL",
+               .product_name = "UM-3ex",
+               .ifnum = QUIRK_ANY_INTERFACE,
+               .type = QUIRK_COMPOSITE,
+               .data = (const struct snd_usb_audio_quirk[]) {
+                       {
+                               .ifnum = 0,
+                               .type = QUIRK_MIDI_FIXED_ENDPOINT,
+                               .data = & (const struct snd_usb_midi_endpoint_info) {
+                                       .out_cables = 0x000f,
+                                       .in_cables  = 0x000f
+                               }
+                       },
+                       {
+                               .ifnum = -1
+                       }
+               }
+       }
+},
 {
        USB_DEVICE(0x0582, 0x0002),
        .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {