[PATCH] [UBUNTU:sound/usb] Fix Edirol UA-20; Add Edirol UM-3ex/PC-50/UM-1EX/UM-2EX, Roland G-70, Miditech Play'n Roll, Casio AP-80R/PL-40R, Yamaha MDP-5/EZ-J24
crimsun at fungus.sh.nu
crimsun at fungus.sh.nu
Sat Mar 25 09:41:31 UTC 2006
Subject: [PATCH] [UBUNTU:sound/usb] Fix Edirol UA-20; Add Edirol UM-3ex/PC-50/UM-1EX/UM-2EX, Roland G-70, Miditech Play'n Roll, Casio AP-80R/PL-40R, Yamaha MDP-5/EZ-J24
UpstreamStatus: Added in upstream sound/usb/usbaudio.c r1.171
sound/usb/usbaudio.h r1.48
sound/usb/usbmidi.c r1.6[24]
sound/usb/usbquirks.h r1.{5[89],
6[1-9],70}
This patch fixes support for the Edirol UA-20 (a newer revision of it
lacks class-specific descriptors, so the sample format must be hard-
coded).
It also adds support for the Edirol UM-3ex/PC-50/UM-1EX/UM-2EX,
Roland G-70, Miditech Play'n Roll, Casio AP-80R/PL-40R, and Yamaha
MDP-5/EZ-J24.
Support for the Edirol UM-3ex was added by Brent Cook
<busterbcook at yahoo.com>. Clemens Ladisch <clemens at ladisch.de> fixed/
added the others.
Signed-off-by: Daniel T Chen <crimsun at ubuntu.com>
---
sound/usb/usbaudio.c | 2 -
sound/usb/usbaudio.h | 4 +
sound/usb/usbmidi.c | 2 -
sound/usb/usbquirks.h | 139 +++++++++++++++++++++++++++++++++++++++++++++----
4 files changed, 132 insertions(+), 15 deletions(-)
fa1a249718e9d84db56a00646991424ae80be88c
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index e0e6a42..aa8745c 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -3108,7 +3108,7 @@ static int snd_usb_create_quirk(snd_usb_
[QUIRK_MIDI_NOVATION] = snd_usb_create_midi_interface,
[QUIRK_MIDI_RAW] = snd_usb_create_midi_interface,
[QUIRK_MIDI_EMAGIC] = snd_usb_create_midi_interface,
- [QUIRK_MIDI_MIDITECH] = snd_usb_create_midi_interface,
+ [QUIRK_MIDI_CME] = snd_usb_create_midi_interface,
[QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk,
[QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
[QUIRK_AUDIO_EDIROL_UA700_UA25] = create_ua700_ua25_quirk,
diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
index b580202..e0edb51 100644
--- a/sound/usb/usbaudio.h
+++ b/sound/usb/usbaudio.h
@@ -163,7 +163,7 @@ enum quirk_type {
QUIRK_MIDI_NOVATION,
QUIRK_MIDI_RAW,
QUIRK_MIDI_EMAGIC,
- QUIRK_MIDI_MIDITECH,
+ QUIRK_MIDI_CME,
QUIRK_AUDIO_STANDARD_INTERFACE,
QUIRK_AUDIO_FIXED_ENDPOINT,
QUIRK_AUDIO_EDIROL_UA700_UA25,
@@ -214,7 +214,7 @@ struct snd_usb_midi_endpoint_info {
/* for QUIRK_MIDI_EMAGIC, data points to a snd_usb_midi_endpoint_info
* structure (out_cables and in_cables only) */
-/* for QUIRK_MIDI_MIDITECH, data is NULL */
+/* for QUIRK_MIDI_CME, data is NULL */
/*
*/
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index f8aa662..530a19d 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -1577,7 +1577,7 @@ int snd_usb_create_midi_interface(snd_us
sizeof(snd_usb_midi_endpoint_info_t));
err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
break;
- case QUIRK_MIDI_MIDITECH:
+ case QUIRK_MIDI_CME:
err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
break;
default:
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
index ba506c3..f8f3bcc 100644
--- a/sound/usb/usbquirks.h
+++ b/sound/usb/usbquirks.h
@@ -82,6 +82,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 +91,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"),
@@ -204,6 +206,28 @@ YAMAHA_DEVICE(0x7010, "UB99"),
}
},
{
+ USB_DEVICE(0x0582, 0x009a),
+ .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
+ .vendor_name = "EDIROL",
+ .product_name = "UM-3ex",
+ .ifnum = QUIRK_ANY_INTERFACE,
+ .type = QUIRK_COMPOSITE,
+ .data = (const snd_usb_audio_quirk_t[]) {
+ {
+ .ifnum = 0,
+ .type = QUIRK_MIDI_FIXED_ENDPOINT,
+ .data = & (const snd_usb_midi_endpoint_info_t) {
+ .out_cables = 0x000f,
+ .in_cables = 0x000f
+ }
+ },
+ {
+ .ifnum = -1
+ }
+ }
+ }
+},
+{
USB_DEVICE(0x0582, 0x0002),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
@@ -294,7 +318,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 snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
@@ -385,7 +410,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 snd_usb_audio_quirk_t) {
.vendor_name = "EDIROL",
@@ -665,16 +690,50 @@ YAMAHA_DEVICE(0x7010, "UB99"),
.type = QUIRK_COMPOSITE,
.data = (const snd_usb_audio_quirk_t[]) {
{
+ .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 snd_usb_midi_endpoint_info_t) {
+ .out_cables = 0x0001,
+ .in_cables = 0x0001
+ }
},
{
.ifnum = -1
@@ -1078,10 +1137,36 @@ YAMAHA_DEVICE(0x7010, "UB99"),
}
},
/* TODO: add Edirol UA-101 support */
- /* TODO: add Roland G-70 support */
+{
+ /* has ID 0x0081 when not in "Advanced Driver" mode */
+ USB_DEVICE(0x0582, 0x0080),
+ .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
+ .vendor_name = "Roland",
+ .product_name = "G-70",
+ .ifnum = 0,
+ .type = QUIRK_MIDI_FIXED_ENDPOINT,
+ .data = & (const snd_usb_midi_endpoint_info_t) {
+ .out_cables = 0x0001,
+ .in_cables = 0x0001
+ }
+ }
+},
/* TODO: add Roland V-SYNTH XT support */
/* TODO: add BOSS GT-PRO support */
- /* TODO: add Edirol PC-50 support */
+{
+ /* has ID 0x008c when not in "Advanced Driver" mode */
+ USB_DEVICE(0x0582, 0x008b),
+ .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
+ .vendor_name = "EDIROL",
+ .product_name = "PC-50",
+ .ifnum = 0,
+ .type = QUIRK_MIDI_FIXED_ENDPOINT,
+ .data = & (const snd_usb_midi_endpoint_info_t) {
+ .out_cables = 0x0001,
+ .in_cables = 0x0001
+ }
+ }
+},
/* TODO: add Edirol PC-80 support */
/* TODO: add Edirol UA-1EX support */
/* TODO: add Edirol UM-3 support */
@@ -1333,6 +1418,27 @@ YAMAHA_DEVICE(0x7010, "UB99"),
}
},
+/* Casio devices */
+{
+ USB_DEVICE(0x07cf, 0x6801),
+ .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
+ .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 snd_usb_audio_quirk_t) {
+ .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 +1540,15 @@ YAMAHA_DEVICE(0x7010, "UB99"),
.type = QUIRK_MIDI_STANDARD_INTERFACE
}
},
+{
+ USB_DEVICE(0x0ccd, 0x0035),
+ .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
+ .vendor_name = "Miditech",
+ .product_name = "Play'n Roll",
+ .ifnum = 0,
+ .type = QUIRK_MIDI_CME
+ }
+},
/* Novation EMS devices */
{
@@ -1464,22 +1579,24 @@ YAMAHA_DEVICE(0x7010, "UB99"),
}
},
+/* Miditech devices */
{
USB_DEVICE(0x4752, 0x0011),
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
.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 snd_usb_audio_quirk_t) {
- .vendor_name = "Miditech",
- .product_name = "MidiStudio-2",
.ifnum = 0,
- .type = QUIRK_MIDI_MIDITECH
+ .type = QUIRK_MIDI_CME
}
},
--
1.1.3
--
Daniel T. Chen crimsun at ubuntu.com
GPG key: www.sh.nu/~crimsun/pubkey.gpg.asc
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20060325/0841d94e/attachment.sig>
More information about the kernel-team
mailing list