提交 f167e1d0 编写于 作者: C Clemens Ladisch 提交者: Jaroslav Kysela

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=3752Signed-off-by: NClemens Ladisch <clemens@ladisch.de>
Cc: <stable@kernel.org>
Signed-off-by: NJaroslav Kysela <perex@perex.cz>
上级 9d4c7464
...@@ -1162,10 +1162,22 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi, ...@@ -1162,10 +1162,22 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
pipe = usb_sndintpipe(umidi->dev, ep_info->out_ep); pipe = usb_sndintpipe(umidi->dev, ep_info->out_ep);
else else
pipe = usb_sndbulkpipe(umidi->dev, ep_info->out_ep); pipe = usb_sndbulkpipe(umidi->dev, ep_info->out_ep);
if (umidi->usb_id == USB_ID(0x0a92, 0x1020)) /* ESI M4U */ switch (umidi->usb_id) {
ep->max_transfer = 4; default:
else
ep->max_transfer = usb_maxpacket(umidi->dev, pipe, 1); ep->max_transfer = usb_maxpacket(umidi->dev, pipe, 1);
break;
/*
* Various chips declare a packet size larger than 4 bytes, but
* do not actually work with larger packets:
*/
case USB_ID(0x0a92, 0x1020): /* ESI M4U */
case USB_ID(0x1430, 0x474b): /* RedOctane GH MIDI INTERFACE */
case USB_ID(0x15ca, 0x0101): /* Textech USB Midi Cable */
case USB_ID(0x15ca, 0x1806): /* Textech USB Midi Cable */
case USB_ID(0x1a86, 0x752d): /* QinHeng CH345 "USB2.0-MIDI" */
ep->max_transfer = 4;
break;
}
for (i = 0; i < OUTPUT_URBS; ++i) { for (i = 0; i < OUTPUT_URBS; ++i) {
buffer = usb_buffer_alloc(umidi->dev, buffer = usb_buffer_alloc(umidi->dev,
ep->max_transfer, GFP_KERNEL, ep->max_transfer, GFP_KERNEL,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册