Update of /cvsroot/alsa/alsa-kernel/usb
In directory sc8-pr-cvs1:/tmp/cvs-serv15174

Modified Files:
        usbaudio.c usbaudio.h usbmidi.c 
Log Message:
fixed for 2.6 kernels:
- set intervals to playback urbs.
- release the claimed interfaces at disconnection.



Index: usbaudio.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/usb/usbaudio.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- usbaudio.c  23 Jun 2003 12:41:36 -0000      1.59
+++ usbaudio.c  17 Jul 2003 17:42:25 -0000      1.60
@@ -388,6 +388,7 @@
                urb->iso_frame_desc[i].length = 3;
                urb->iso_frame_desc[i].offset = offs;
        }
+       urb->interval = 1;
        return 0;
 }
 
@@ -512,6 +513,7 @@
        spin_unlock_irqrestore(&subs->lock, flags);
        urb->transfer_buffer_length = offs * stride;
        ctx->transfer = offs;
+       urb->interval = 1;
 
        return 0;
 }
@@ -2337,6 +2339,32 @@
 
 
 /*
+ * disconnect streams
+ * called from snd_usb_audio_disconnect()
+ */
+static void snd_usb_stream_disconnect(struct list_head *head, struct usb_driver 
*driver)
+{
+       int idx;
+       snd_usb_stream_t *as;
+       snd_usb_substream_t *subs;
+       struct list_head *p;
+
+       as = list_entry(head, snd_usb_stream_t, list);
+       for (idx = 0; idx < 2; idx++) {
+               subs = &as->substream[idx];
+               if (!subs->num_formats)
+                       return;
+               release_substream_urbs(subs, 1);
+               subs->interface = -1;
+               /* release interfaces */
+               list_for_each(p, &subs->fmt_list) {
+                       struct audioformat *fp = list_entry(p, struct audioformat, 
list);
+                       usb_driver_release_interface(driver, 
usb_ifnum_to_if(subs->dev, fp->iface));
+               }
+       }
+}
+
+/*
  * parse audio control descriptor and create pcm/midi streams
  */
 static int snd_usb_create_streams(snd_usb_audio_t *chip, int ctrlif)
@@ -2806,21 +2834,11 @@
                snd_card_disconnect(card);
                /* release the pcm resources */
                list_for_each(p, &chip->pcm_list) {
-                       snd_usb_stream_t *as;
-                       int idx;
-                       as = list_entry(p, snd_usb_stream_t, list);
-                       for (idx = 0; idx < 2; idx++) {
-                               snd_usb_substream_t *subs;
-                               subs = &as->substream[idx];
-                               if (!subs->num_formats)
-                                       continue;
-                               release_substream_urbs(subs, 1);
-                               subs->interface = -1;
-                       }
+                       snd_usb_stream_disconnect(p, &usb_audio_driver);
                }
                /* release the midi resources */
                list_for_each(p, &chip->midi_list) {
-                       snd_usbmidi_disconnect(p);
+                       snd_usbmidi_disconnect(p, &usb_audio_driver);
                }
                up(&register_mutex);
                snd_card_free_in_thread(card);

Index: usbaudio.h
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/usb/usbaudio.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- usbaudio.h  20 Jun 2003 18:04:03 -0000      1.19
+++ usbaudio.h  17 Jul 2003 17:42:25 -0000      1.20
@@ -203,7 +203,7 @@
 int snd_usb_create_mixer(snd_usb_audio_t *chip, int ctrlif);
 
 int snd_usb_create_midi_interface(snd_usb_audio_t *chip, struct usb_interface *iface, 
const snd_usb_audio_quirk_t *quirk);
-void snd_usbmidi_disconnect(struct list_head *p);
+void snd_usbmidi_disconnect(struct list_head *p, struct usb_driver *driver);
 
 /*
  * retrieve usb_interface descriptor from the host interface

Index: usbmidi.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/usb/usbmidi.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- usbmidi.c   5 Mar 2003 11:33:21 -0000       1.20
+++ usbmidi.c   17 Jul 2003 17:42:25 -0000      1.21
@@ -693,12 +693,13 @@
 /*
  * Unlinks all URBs (must be done before the usb_device is deleted).
  */
-void snd_usbmidi_disconnect(struct list_head* p)
+void snd_usbmidi_disconnect(struct list_head* p, struct usb_driver *driver)
 {
        snd_usb_midi_t* umidi;
        int i;
 
        umidi = list_entry(p, snd_usb_midi_t, list);
+       usb_driver_release_interface(driver, umidi->iface);
        for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
                snd_usb_midi_endpoint_t* ep = &umidi->endpoints[i];
                if (ep->out && ep->out->urb)



-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to