This fixes sequencer input from USB MIDI. Both usbmidi.c and seq_midi.c thought they could use substream->runtime->private_data for themselves.
Additionally, interrupt transfer resubmissions for kernels before 2.5.45 are removed again. -- Clemens Index: alsa-driver/include/adriver.h =================================================================== RCS file: /cvsroot/alsa/alsa-driver/include/adriver.h,v retrieving revision 1.22 diff -u -r1.22 adriver.h --- alsa-driver/include/adriver.h 1 Nov 2002 13:25:22 -0000 1.22 +++ alsa-driver/include/adriver.h 11 Nov 2002 08:02:40 -0000 @@ -258,6 +258,10 @@ #define get_cfg_desc(cfg) (cfg) #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 45) +#define usb_pipe_needs_resubmit(pipe) (!usb_pipeint(pipe)) +#endif + #endif /* SND_NEED_USB_WRAPPER && CONFIG_USB */ #include "amagic.h" Index: alsa-kernel/usb/usbaudio.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/usb/usbaudio.h,v retrieving revision 1.7 diff -u -r1.7 usbaudio.h --- alsa-kernel/usb/usbaudio.h 1 Nov 2002 13:25:01 -0000 1.7 +++ alsa-kernel/usb/usbaudio.h 11 Nov 2002 08:03:33 -0000 @@ -202,4 +202,8 @@ #define get_cfg_desc(cfg) (&(cfg)->desc) #endif +#ifndef usb_pipe_needs_resubmit +#define usb_pipe_needs_resubmit(pipe) 1 +#endif + #endif /* __USBAUDIO_H */ Index: alsa-kernel/usb/usbmidi.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/usb/usbmidi.c,v retrieving revision 1.9 diff -u -r1.9 usbmidi.c --- alsa-kernel/usb/usbmidi.c 1 Nov 2002 13:25:01 -0000 1.9 +++ alsa-kernel/usb/usbmidi.c 11 Nov 2002 08:03:33 -0000 @@ -114,7 +114,6 @@ struct urb* urb; struct usbmidi_in_port { snd_rawmidi_substream_t* substream; - int active; } ports[0x10]; }; @@ -159,7 +158,12 @@ int cable = packet[0] >> 4; usbmidi_in_port_t* port = &ep->ports[cable]; - if (!port->active) + if (!port->substream) { + snd_printd("unexpected port %d!\n", cable); + return; + } + if (!port->substream->runtime || + !port->substream->runtime->trigger) return; snd_rawmidi_receive(port->substream, &packet[1], snd_usbmidi_cin_length[packet[0] & 0x0f]); @@ -184,8 +188,10 @@ return; } - urb->dev = ep->umidi->chip->dev; - snd_usbmidi_submit_urb(urb, GFP_ATOMIC); + if (usb_pipe_needs_resubmit(urb->pipe)) { + urb->dev = ep->umidi->chip->dev; + snd_usbmidi_submit_urb(urb, GFP_ATOMIC); + } } /* @@ -451,20 +457,6 @@ static int snd_usbmidi_input_open(snd_rawmidi_substream_t* substream) { - snd_usb_midi_t* umidi = snd_magic_cast(snd_usb_midi_t, substream->rmidi->private_data, return -ENXIO); - usbmidi_in_port_t* port = NULL; - int i, j; - - for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) - if (umidi->endpoints[i].in) - for (j = 0; j < 0x10; ++j) - if (umidi->endpoints[i].in->ports[j].substream == substream) { - port = &umidi->endpoints[i].in->ports[j]; - break; - } - if (!port) - return -ENXIO; - substream->runtime->private_data = port; return 0; } @@ -475,9 +467,6 @@ static void snd_usbmidi_input_trigger(snd_rawmidi_substream_t* substream, int up) { - usbmidi_in_port_t* port = (usbmidi_in_port_t*)substream->runtime->private_data; - - port->active = up; } static snd_rawmidi_ops_t snd_usbmidi_output_ops = { ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Alsa-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-devel