[alsa-devel] snd_usb_caiaq bug?
Marco Santamaria
marco.santamaria at gmail.com
Wed Jan 7 19:46:17 CET 2009
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 at suse.de>
> 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);
> }
>
>
More information about the Alsa-devel
mailing list