summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/usb
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/sound/usb')
-rw-r--r--sys/dev/sound/usb/uaudio.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c
index 3299f22..33ff274 100644
--- a/sys/dev/sound/usb/uaudio.c
+++ b/sys/dev/sound/usb/uaudio.c
@@ -5674,6 +5674,25 @@ umidi_probe(device_t dev)
DPRINTF("error=%s\n", usbd_errstr(error));
goto detach;
}
+
+ /*
+ * Some USB MIDI device makers couldn't resist using
+ * wMaxPacketSize = 4 for RX and TX BULK endpoints, although
+ * that size is an unsupported value for FULL speed BULK
+ * endpoints. The same applies to some HIGH speed MIDI devices
+ * which are using a wMaxPacketSize different from 512 bytes.
+ *
+ * Refer to section 5.8.3 in USB 2.0 PDF: Cite: "All Host
+ * Controllers are required to have support for 8-, 16-, 32-,
+ * and 64-byte maximum packet sizes for full-speed bulk
+ * endpoints and 512 bytes for high-speed bulk endpoints."
+ */
+ if (usbd_xfer_maxp_was_clamped(chan->xfer[UMIDI_TX_TRANSFER]))
+ chan->single_command = 1;
+
+ if (chan->single_command != 0)
+ device_printf(dev, "Single command MIDI quirk enabled\n");
+
if ((chan->max_cable > UMIDI_CABLES_MAX) ||
(chan->max_cable == 0)) {
chan->max_cable = UMIDI_CABLES_MAX;
OpenPOWER on IntegriCloud