aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2010-02-15 02:55:28 -0500
committerJaroslav Kysela <perex@perex.cz>2010-02-16 02:08:01 -0500
commitf167e1d073278fe231bbdd5d6c24fb9d091aa544 (patch)
tree98eea3aa4c5a559a608d375c4a8d269f333a5cb8
parent9d4c7464458770d309169f7a7ce1ea6f8a4a7de5 (diff)
ALSA: usb-audio: reduce MIDI packet size to work around broken firmware
Extend the list of devices whose firmware does not expect more than one USB MIDI packet in one USB packet. bug report: https://bugtrack.alsa-project.org/alsa-bug/view.php?id=3752 Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Cc: <stable@kernel.org> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r--sound/usb/usbmidi.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index 6e89b8368d9a..aae50df06232 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -1162,10 +1162,22 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
1162 pipe = usb_sndintpipe(umidi->dev, ep_info->out_ep); 1162 pipe = usb_sndintpipe(umidi->dev, ep_info->out_ep);
1163 else 1163 else
1164 pipe = usb_sndbulkpipe(umidi->dev, ep_info->out_ep); 1164 pipe = usb_sndbulkpipe(umidi->dev, ep_info->out_ep);
1165 if (umidi->usb_id == USB_ID(0x0a92, 0x1020)) /* ESI M4U */ 1165 switch (umidi->usb_id) {
1166 ep->max_transfer = 4; 1166 default:
1167 else
1168 ep->max_transfer = usb_maxpacket(umidi->dev, pipe, 1); 1167 ep->max_transfer = usb_maxpacket(umidi->dev, pipe, 1);
1168 break;
1169 /*
1170 * Various chips declare a packet size larger than 4 bytes, but
1171 * do not actually work with larger packets:
1172 */
1173 case USB_ID(0x0a92, 0x1020): /* ESI M4U */
1174 case USB_ID(0x1430, 0x474b): /* RedOctane GH MIDI INTERFACE */
1175 case USB_ID(0x15ca, 0x0101): /* Textech USB Midi Cable */
1176 case USB_ID(0x15ca, 0x1806): /* Textech USB Midi Cable */
1177 case USB_ID(0x1a86, 0x752d): /* QinHeng CH345 "USB2.0-MIDI" */
1178 ep->max_transfer = 4;
1179 break;
1180 }
1169 for (i = 0; i < OUTPUT_URBS; ++i) { 1181 for (i = 0; i < OUTPUT_URBS; ++i) {
1170 buffer = usb_buffer_alloc(umidi->dev, 1182 buffer = usb_buffer_alloc(umidi->dev,
1171 ep->max_transfer, GFP_KERNEL, 1183 ep->max_transfer, GFP_KERNEL,