Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6a712ae authored by Clemens Ladisch's avatar Clemens Ladisch Committed by Jaroslav Kysela
Browse files

[ALSA] usb-audio: allow output interrupt transfers for MIDI



Allow output interrupt transfers for some MIDI devices that require
them.

Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
Signed-off-by: default avatarJaroslav Kysela <perex@suse.cz>
parent d53d7d9e
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -983,7 +983,9 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
		snd_usbmidi_out_endpoint_delete(ep);
		return -ENOMEM;
	}
	/* we never use interrupt output pipes */
	if (ep_info->out_interval)
		pipe = usb_sndintpipe(umidi->chip->dev, ep_info->out_ep);
	else
		pipe = usb_sndbulkpipe(umidi->chip->dev, ep_info->out_ep);
	if (umidi->chip->usb_id == USB_ID(0x0a92, 0x1020)) /* ESI M4U */
		/* FIXME: we need more URBs to get reasonable bandwidth here: */
@@ -996,8 +998,14 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
		snd_usbmidi_out_endpoint_delete(ep);
		return -ENOMEM;
	}
	usb_fill_bulk_urb(ep->urb, umidi->chip->dev, pipe, buffer,
			  ep->max_transfer, snd_usbmidi_out_urb_complete, ep);
	if (ep_info->out_interval)
		usb_fill_int_urb(ep->urb, umidi->chip->dev, pipe, buffer,
				 ep->max_transfer, snd_usbmidi_out_urb_complete,
				 ep, ep_info->out_interval);
	else
		usb_fill_bulk_urb(ep->urb, umidi->chip->dev,
				  pipe, buffer, ep->max_transfer,
				  snd_usbmidi_out_urb_complete, ep);
	ep->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;

	spin_lock_init(&ep->buffer_lock);