Update of /cvsroot/alsa/alsa-kernel/usb
In directory sc8-pr-cvs1:/tmp/cvs-serv28408
Modified Files:
usbaudio.c
Log Message:
Added force argument to deactivate_urbs() - should fix the disconnect problem
Index: usbaudio.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/usb/usbaudio.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- usbaudio.c 11 Mar 2003 15:44:52 -0000 1.47
+++ usbaudio.c 12 Mar 2003 12:31:06 -0000 1.48
@@ -584,14 +584,14 @@
* unlink active urbs.
* return the number of active urbs.
*/
-static int deactivate_urbs(snd_usb_substream_t *subs)
+static int deactivate_urbs(snd_usb_substream_t *subs, int force)
{
unsigned int i;
int alive;
subs->running = 0;
- if (subs->stream->chip->shutdown) /* to be sure... */
+ if (!force && subs->stream->chip->shutdown) /* to be sure... */
return 0;
#ifndef SND_USB_ASYNC_UNLINK
@@ -669,7 +669,7 @@
__error:
// snd_pcm_stop(subs->pcm_substream, SNDRV_PCM_STATE_XRUN);
- deactivate_urbs(subs);
+ deactivate_urbs(subs, 0);
return -EPIPE;
}
@@ -730,7 +730,7 @@
err = start_urbs(subs, substream->runtime);
break;
case SNDRV_PCM_TRIGGER_STOP:
- err = deactivate_urbs(subs);
+ err = deactivate_urbs(subs, 0);
break;
default:
err = -EINVAL;
@@ -758,12 +758,12 @@
/*
* release a substream
*/
-static void release_substream_urbs(snd_usb_substream_t *subs)
+static void release_substream_urbs(snd_usb_substream_t *subs, int force)
{
int i;
/* stop urbs (to be sure) */
- if (deactivate_urbs(subs) > 0)
+ if (deactivate_urbs(subs, force) > 0)
wait_clear_urbs(subs);
for (i = 0; i < MAX_URBS; i++)
@@ -869,13 +869,13 @@
/* allocate a capture buffer per urb */
u->buf = kmalloc(maxsize * u->packets, GFP_KERNEL);
if (! u->buf) {
- release_substream_urbs(subs);
+ release_substream_urbs(subs, 0);
return -ENOMEM;
}
}
u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
if (! u->urb) {
- release_substream_urbs(subs);
+ release_substream_urbs(subs, 0);
return -ENOMEM;
}
u->urb->dev = subs->dev;
@@ -895,7 +895,7 @@
u->packets = NRPACKS;
u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
if (! u->urb) {
- release_substream_urbs(subs);
+ release_substream_urbs(subs, 0);
return -ENOMEM;
}
u->urb->transfer_buffer = subs->syncbuf + i * NRPACKS * 3;
@@ -1148,7 +1148,7 @@
snd_usb_substream_t *subs = (snd_usb_substream_t *)runtime->private_data;
int err;
- release_substream_urbs(subs);
+ release_substream_urbs(subs, 0);
if ((err = set_format(subs, runtime)) < 0)
return err;
@@ -1485,7 +1485,7 @@
snd_usb_stream_t *as = snd_pcm_substream_chip(substream);
snd_usb_substream_t *subs = &as->substream[direction];
- release_substream_urbs(subs);
+ release_substream_urbs(subs, 0);
if (subs->interface >= 0)
usb_set_interface(subs->dev, subs->interface, 0);
subs->pcm_substream = NULL;
@@ -2585,7 +2585,7 @@
subs = &as->substream[idx];
if (!subs->num_formats)
continue;
- release_substream_urbs(subs);
+ release_substream_urbs(subs, 1);
}
}
/* release the midi resources */
-------------------------------------------------------
This SF.net email is sponsored by:Crypto Challenge is now open!
Get cracking and register here for some mind boggling fun and
the chance of winning an Apple iPod:
http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0031en
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog