endpoints[epidx].out_ep = ep->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
                        if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)
                                endpoints[epidx].out_interval = ep->bInterval;
+                       else if (snd_usb_get_speed(umidi->chip->dev) == USB_SPEED_LOW)
+                               /*
+                                * Low speed bulk transfers don't exist, so
+                                * force interrupt transfers for devices like
+                                * ESI MIDI Mate that try to use them anyway.
+                                */
+                               endpoints[epidx].out_interval = 1;
                        endpoints[epidx].out_cables = (1 << ms_ep->bNumEmbMIDIJack) - 1;
                        snd_printdd(KERN_INFO "EP %02X: %d jack(s)\n",
                                    ep->bEndpointAddress, ms_ep->bNumEmbMIDIJack);
                        endpoints[epidx].in_ep = ep->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
                        if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)
                                endpoints[epidx].in_interval = ep->bInterval;
+                       else if (snd_usb_get_speed(umidi->chip->dev) == USB_SPEED_LOW)
+                               endpoints[epidx].in_interval = 1;
                        endpoints[epidx].in_cables = (1 << ms_ep->bNumEmbMIDIJack) - 1;
                        snd_printdd(KERN_INFO "EP %02X: %d jack(s)\n",
                                    ep->bEndpointAddress, ms_ep->bNumEmbMIDIJack);