Commit e03173fc authored by Brent Cook's avatar Brent Cook Committed by Jaroslav Kysela
Browse files

[ALSA] Add support for EDIROL UM-3ex



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: default avatarTakashi Iwai <tiwai@suse.de>
parent 34226c42
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -1092,6 +1092,8 @@ static struct {
	{ USB_ID(0x086a, 0x0001), 8, "%s Broadcast" },
	{ USB_ID(0x086a, 0x0001), 8, "%s Broadcast" },
	{ USB_ID(0x086a, 0x0002), 8, "%s Broadcast" },
	{ USB_ID(0x086a, 0x0002), 8, "%s Broadcast" },
	{ USB_ID(0x086a, 0x0003), 4, "%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,
static void snd_usbmidi_init_substream(struct snd_usb_midi* umidi,
+22 −0
Original line number Original line Diff line number Diff line
@@ -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),
	USB_DEVICE(0x0582, 0x0002),
	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {