The "rawmidi drain error" went away. Now if I start and shut down jackd nothing bad happens. But when I launch Rosegarden there are several lines containing the following new message: [ 455.025168] ALSA /home/marco/build/linux-2.6.24-19-rt/alsa-1.0.17/driver-patched/alsa-driver-1.0.17/usb/caiaq/../../alsa-kernel/usb/caiaq/caiaq-midi.c:84: snd-usb-caiaq log: snd_usb_caiaq_midi_send(f76a5ac0): usb_submit_urb() failed, -22 Furthermore the first time I rebooted my system, it freezed during the startup procedure (loading hardware drivers), but it didn't happen again. Marco 2009/1/7 Takashi Iwai <tiwai@xxxxxxx> > At Wed, 7 Jan 2009 16:41:21 +0100, > Marco Santamaria wrote: > > > > I applied the patch (or I think so...). I just removed the line: > > > > dev->midi_out_substream = NULL; > > > > from the function snd_usb_caiaq_midi_output_done in the file > caiaq-midi.c. > > Then I recompiled the driver. > > > > The main issue is sorted out: I can start and shut down jackd without big > > problems. > > > > But with dmesg I still have the following message: > > > > ALSA /home/marco/build/linux-2.6.24-19-rt/alsa-1.0.17/driver-patched/ > > alsa-driver-1.0.17/acore/rawmidi.c:196: rawmidi drain error (avail = > 4095, > > buffer_size = 4096) > > > > Not sure if it is safe to ignore it. > > Hmm, what about the patch below? > > > Takashi > > --- > diff --git a/sound/usb/caiaq/caiaq-midi.c b/sound/usb/caiaq/caiaq-midi.c > index 30b57f9..9557635 100644 > --- a/sound/usb/caiaq/caiaq-midi.c > +++ b/sound/usb/caiaq/caiaq-midi.c > @@ -69,7 +69,8 @@ static void snd_usb_caiaq_midi_send(struct > snd_usb_caiaqdev *dev, > > dev->midi_out_buf[0] = EP1_CMD_MIDI_WRITE; > dev->midi_out_buf[1] = 0; /* port */ > - len = snd_rawmidi_transmit_peek(substream, dev->midi_out_buf+3, > EP1_BUFSIZE-3); > + len = snd_rawmidi_transmit(substream, dev->midi_out_buf + 3, > + EP1_BUFSIZE - 3); > > if (len <= 0) > return; > @@ -87,16 +88,12 @@ static void snd_usb_caiaq_midi_output_trigger(struct > snd_rawmidi_substream *subs > { > struct snd_usb_caiaqdev *dev = substream->rmidi->private_data; > > - if (dev->midi_out_substream != NULL) > - return; > - > - if (!up) { > + if (up) { > + dev->midi_out_substream = substream; > + snd_usb_caiaq_midi_send(dev, substream); > + } else { > dev->midi_out_substream = NULL; > - return; > } > - > - dev->midi_out_substream = substream; > - snd_usb_caiaq_midi_send(dev, substream); > } > > > @@ -169,8 +166,6 @@ void snd_usb_caiaq_midi_output_done(struct urb* urb) > if (!dev->midi_out_substream) > return; > > - snd_rawmidi_transmit_ack(dev->midi_out_substream, buf[2]); > - dev->midi_out_substream = NULL; > snd_usb_caiaq_midi_send(dev, dev->midi_out_substream); > } > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel