aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/usbmidi.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2005-11-07 11:09:02 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-07 11:09:02 -0500
commit8f0cb147b2fb12427bf6abef7fed2b604557a41e (patch)
treefb5ba437ee74b900fab9686c8c7df18abcd7640b /sound/usb/usbmidi.c
parent8e33ba49765484bc6de3a2f8143733713fa93bc1 (diff)
parentb00e8443c3eece823052d06ae1c7cb797ab0ddf5 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
Diffstat (limited to 'sound/usb/usbmidi.c')
-rw-r--r--sound/usb/usbmidi.c98
1 files changed, 46 insertions, 52 deletions
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index f1a2e2c2e02f..f8aa662562a0 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -47,7 +47,6 @@
47#include <linux/timer.h> 47#include <linux/timer.h>
48#include <linux/usb.h> 48#include <linux/usb.h>
49#include <sound/core.h> 49#include <sound/core.h>
50#include <sound/minors.h>
51#include <sound/rawmidi.h> 50#include <sound/rawmidi.h>
52#include "usbaudio.h" 51#include "usbaudio.h"
53 52
@@ -246,10 +245,8 @@ static void snd_usbmidi_in_urb_complete(struct urb* urb, struct pt_regs *regs)
246 } 245 }
247 } 246 }
248 247
249 if (usb_pipe_needs_resubmit(urb->pipe)) { 248 urb->dev = ep->umidi->chip->dev;
250 urb->dev = ep->umidi->chip->dev; 249 snd_usbmidi_submit_urb(urb, GFP_ATOMIC);
251 snd_usbmidi_submit_urb(urb, GFP_ATOMIC);
252 }
253} 250}
254 251
255static void snd_usbmidi_out_urb_complete(struct urb* urb, struct pt_regs *regs) 252static void snd_usbmidi_out_urb_complete(struct urb* urb, struct pt_regs *regs)
@@ -863,13 +860,12 @@ static int snd_usbmidi_in_endpoint_create(snd_usb_midi_t* umidi,
863 return -ENOMEM; 860 return -ENOMEM;
864 } 861 }
865 if (ep_info->in_interval) 862 if (ep_info->in_interval)
866 usb_fill_int_urb(ep->urb, umidi->chip->dev, pipe, buffer, length, 863 usb_fill_int_urb(ep->urb, umidi->chip->dev, pipe, buffer,
867 snd_usb_complete_callback(snd_usbmidi_in_urb_complete), 864 length, snd_usbmidi_in_urb_complete, ep,
868 ep, ep_info->in_interval); 865 ep_info->in_interval);
869 else 866 else
870 usb_fill_bulk_urb(ep->urb, umidi->chip->dev, pipe, buffer, length, 867 usb_fill_bulk_urb(ep->urb, umidi->chip->dev, pipe, buffer,
871 snd_usb_complete_callback(snd_usbmidi_in_urb_complete), 868 length, snd_usbmidi_in_urb_complete, ep);
872 ep);
873 ep->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; 869 ep->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
874 870
875 rep->in = ep; 871 rep->in = ep;
@@ -933,8 +929,7 @@ static int snd_usbmidi_out_endpoint_create(snd_usb_midi_t* umidi,
933 return -ENOMEM; 929 return -ENOMEM;
934 } 930 }
935 usb_fill_bulk_urb(ep->urb, umidi->chip->dev, pipe, buffer, 931 usb_fill_bulk_urb(ep->urb, umidi->chip->dev, pipe, buffer,
936 ep->max_transfer, 932 ep->max_transfer, snd_usbmidi_out_urb_complete, ep);
937 snd_usb_complete_callback(snd_usbmidi_out_urb_complete), ep);
938 ep->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; 933 ep->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
939 934
940 spin_lock_init(&ep->buffer_lock); 935 spin_lock_init(&ep->buffer_lock);
@@ -1550,46 +1545,45 @@ int snd_usb_create_midi_interface(snd_usb_audio_t* chip,
1550 1545
1551 /* detect the endpoint(s) to use */ 1546 /* detect the endpoint(s) to use */
1552 memset(endpoints, 0, sizeof(endpoints)); 1547 memset(endpoints, 0, sizeof(endpoints));
1553 if (!quirk) { 1548 switch (quirk ? quirk->type : QUIRK_MIDI_STANDARD_INTERFACE) {
1549 case QUIRK_MIDI_STANDARD_INTERFACE:
1554 err = snd_usbmidi_get_ms_info(umidi, endpoints); 1550 err = snd_usbmidi_get_ms_info(umidi, endpoints);
1555 } else { 1551 break;
1556 switch (quirk->type) { 1552 case QUIRK_MIDI_FIXED_ENDPOINT:
1557 case QUIRK_MIDI_FIXED_ENDPOINT: 1553 memcpy(&endpoints[0], quirk->data,
1558 memcpy(&endpoints[0], quirk->data, 1554 sizeof(snd_usb_midi_endpoint_info_t));
1559 sizeof(snd_usb_midi_endpoint_info_t)); 1555 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
1560 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1); 1556 break;
1561 break; 1557 case QUIRK_MIDI_YAMAHA:
1562 case QUIRK_MIDI_YAMAHA: 1558 err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]);
1563 err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]); 1559 break;
1564 break; 1560 case QUIRK_MIDI_MIDIMAN:
1565 case QUIRK_MIDI_MIDIMAN: 1561 umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops;
1566 umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops; 1562 memcpy(&endpoints[0], quirk->data,
1567 memcpy(&endpoints[0], quirk->data, 1563 sizeof(snd_usb_midi_endpoint_info_t));
1568 sizeof(snd_usb_midi_endpoint_info_t)); 1564 err = 0;
1569 err = 0; 1565 break;
1570 break; 1566 case QUIRK_MIDI_NOVATION:
1571 case QUIRK_MIDI_NOVATION: 1567 umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;
1572 umidi->usb_protocol_ops = &snd_usbmidi_novation_ops; 1568 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
1573 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints); 1569 break;
1574 break; 1570 case QUIRK_MIDI_RAW:
1575 case QUIRK_MIDI_RAW: 1571 umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;
1576 umidi->usb_protocol_ops = &snd_usbmidi_raw_ops; 1572 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
1577 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints); 1573 break;
1578 break; 1574 case QUIRK_MIDI_EMAGIC:
1579 case QUIRK_MIDI_EMAGIC: 1575 umidi->usb_protocol_ops = &snd_usbmidi_emagic_ops;
1580 umidi->usb_protocol_ops = &snd_usbmidi_emagic_ops; 1576 memcpy(&endpoints[0], quirk->data,
1581 memcpy(&endpoints[0], quirk->data, 1577 sizeof(snd_usb_midi_endpoint_info_t));
1582 sizeof(snd_usb_midi_endpoint_info_t)); 1578 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
1583 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1); 1579 break;
1584 break; 1580 case QUIRK_MIDI_MIDITECH:
1585 case QUIRK_MIDI_MIDITECH: 1581 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
1586 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints); 1582 break;
1587 break; 1583 default:
1588 default: 1584 snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
1589 snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type); 1585 err = -ENXIO;
1590 err = -ENXIO; 1586 break;
1591 break;
1592 }
1593 } 1587 }
1594 if (err < 0) { 1588 if (err < 0) {
1595 kfree(umidi); 1589 kfree(umidi);