diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 11:09:02 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 11:09:02 -0500 |
commit | 8f0cb147b2fb12427bf6abef7fed2b604557a41e (patch) | |
tree | fb5ba437ee74b900fab9686c8c7df18abcd7640b /sound/usb/usbmidi.c | |
parent | 8e33ba49765484bc6de3a2f8143733713fa93bc1 (diff) | |
parent | b00e8443c3eece823052d06ae1c7cb797ab0ddf5 (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.c | 98 |
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 | ||
255 | static void snd_usbmidi_out_urb_complete(struct urb* urb, struct pt_regs *regs) | 252 | static 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); |