> OK, it's simple to fix. > The below is the latest version I committed now to sound git tree. > It'll be pushed to 2.6.29 (and stable kernels) later. > Ok cool ! > Please let me know if you still encounter relevant problems. > > No problem... Thank you again for your help. By the way is there any plan to make buttons and lights to work on the Audio Kontrol 1 ? It could be a really cool feature. Cheers, Mysth-R --- diff --git a/sound/usb/caiaq/caiaq-device.h b/sound/usb/caiaq/caiaq-device.h index f9fbdba..ab56e73 100644 --- a/sound/usb/caiaq/caiaq-device.h +++ b/sound/usb/caiaq/caiaq-device.h @@ -75,6 +75,7 @@ struct snd_usb_caiaqdev { wait_queue_head_t ep1_wait_queue; wait_queue_head_t prepare_wait_queue; int spec_received, audio_parm_answer; + int midi_out_active; char vendor_name[CAIAQ_USB_STR_LEN]; char product_name[CAIAQ_USB_STR_LEN]; diff --git a/sound/usb/caiaq/caiaq-midi.c b/sound/usb/caiaq/caiaq-midi.c > index 30b57f9..f19fd36 100644 > --- a/sound/usb/caiaq/caiaq-midi.c > +++ b/sound/usb/caiaq/caiaq-midi.c > @@ -59,6 +59,11 @@ static int snd_usb_caiaq_midi_output_open(struct > snd_rawmidi_substream *substrea > > static int snd_usb_caiaq_midi_output_close(struct snd_rawmidi_substream > *substream) > { > + struct snd_usb_caiaqdev *dev = substream->rmidi->private_data; > + if (dev->midi_out_active) { > + usb_kill_urb(&dev->midi_out_urb); > + dev->midi_out_active = 0; > + } > return 0; > } > > @@ -69,7 +74,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; > @@ -79,24 +85,24 @@ static void snd_usb_caiaq_midi_send(struct > snd_usb_caiaqdev *dev, > > ret = usb_submit_urb(&dev->midi_out_urb, GFP_ATOMIC); > if (ret < 0) > - log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed, > %d\n", > - substream, ret); > + log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed," > + "ret=%d, len=%d\n", > + substream, ret, len); > + else > + dev->midi_out_active = 1; > } > > static void snd_usb_caiaq_midi_output_trigger(struct snd_rawmidi_substream > *substream, int up) > { > 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; > + if (!dev->midi_out_active) > + 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); > } > > > @@ -161,16 +167,14 @@ int snd_usb_caiaq_midi_init(struct snd_usb_caiaqdev > *device) > void snd_usb_caiaq_midi_output_done(struct urb* urb) > { > struct snd_usb_caiaqdev *dev = urb->context; > - char *buf = urb->transfer_buffer; > > + dev->midi_out_active = 0; > if (urb->status != 0) > return; > > 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); > } > > -- * *************************************************************************************** * {^_^} Mysth-R {^_^} * <= Aide Auditive => * * http://myspace.com/mysthr * http://myspace.com/aideauditive * http://mysthr.free.fr/Joomla => Site dédié à l'audio sous Fedora/PlanetCCRMA. * *************************************************************************************** _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel