aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2007-08-21 02:56:08 -0400
committerJaroslav Kysela <perex@perex.cz>2007-10-16 09:59:18 -0400
commita6a712aeb17ff30206ae1bc827d50497d884602a (patch)
treed9cf5439074a2f5377a11884f4429bc5d5d2bb07 /sound/usb
parentd53d7d9e5e6bce747e8b8b2f825db1b32d8f6647 (diff)
[ALSA] usb-audio: allow output interrupt transfers for MIDI
Allow output interrupt transfers for some MIDI devices that require them. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound/usb')
-rw-r--r--sound/usb/usbmidi.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index 2bb1834a8c22..4bacb50e9ad9 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -983,8 +983,10 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
983 snd_usbmidi_out_endpoint_delete(ep); 983 snd_usbmidi_out_endpoint_delete(ep);
984 return -ENOMEM; 984 return -ENOMEM;
985 } 985 }
986 /* we never use interrupt output pipes */ 986 if (ep_info->out_interval)
987 pipe = usb_sndbulkpipe(umidi->chip->dev, ep_info->out_ep); 987 pipe = usb_sndintpipe(umidi->chip->dev, ep_info->out_ep);
988 else
989 pipe = usb_sndbulkpipe(umidi->chip->dev, ep_info->out_ep);
988 if (umidi->chip->usb_id == USB_ID(0x0a92, 0x1020)) /* ESI M4U */ 990 if (umidi->chip->usb_id == USB_ID(0x0a92, 0x1020)) /* ESI M4U */
989 /* FIXME: we need more URBs to get reasonable bandwidth here: */ 991 /* FIXME: we need more URBs to get reasonable bandwidth here: */
990 ep->max_transfer = 4; 992 ep->max_transfer = 4;
@@ -996,8 +998,14 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
996 snd_usbmidi_out_endpoint_delete(ep); 998 snd_usbmidi_out_endpoint_delete(ep);
997 return -ENOMEM; 999 return -ENOMEM;
998 } 1000 }
999 usb_fill_bulk_urb(ep->urb, umidi->chip->dev, pipe, buffer, 1001 if (ep_info->out_interval)
1000 ep->max_transfer, snd_usbmidi_out_urb_complete, ep); 1002 usb_fill_int_urb(ep->urb, umidi->chip->dev, pipe, buffer,
1003 ep->max_transfer, snd_usbmidi_out_urb_complete,
1004 ep, ep_info->out_interval);
1005 else
1006 usb_fill_bulk_urb(ep->urb, umidi->chip->dev,
1007 pipe, buffer, ep->max_transfer,
1008 snd_usbmidi_out_urb_complete, ep);
1001 ep->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; 1009 ep->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1002 1010
1003 spin_lock_init(&ep->buffer_lock); 1011 spin_lock_init(&ep->buffer_lock);