diff options
author | Takashi Iwai <tiwai@suse.de> | 2012-11-21 08:22:52 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-11-21 11:43:54 +0100 |
commit | ccc1696d527d64deb417bfa1ef9e479d10ad4f6b (patch) | |
tree | d28dcb5241cec632d0ff0d8d2fb79528c658f155 | |
parent | a9bb36261ef5c7e25564d5ce8a5129920a29bff9 (diff) | |
download | linux-stable-ccc1696d527d64deb417bfa1ef9e479d10ad4f6b.tar.gz linux-stable-ccc1696d527d64deb417bfa1ef9e479d10ad4f6b.tar.bz2 linux-stable-ccc1696d527d64deb417bfa1ef9e479d10ad4f6b.zip |
ALSA: usb-audio: simplify endpoint deactivation code
For further code simplification, drop the conditional call for
usb_kill_urb() with can_wait argument in deactivate_urbs(), and use
only usb_unlink_urb() and wait_clear_urbs() pairs.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/usb/endpoint.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index 4d50bbe2c115..6db2143350d3 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c @@ -515,33 +515,24 @@ void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep) /* * unlink active urbs. */ -static int deactivate_urbs(struct snd_usb_endpoint *ep, bool force, bool can_sleep) +static int deactivate_urbs(struct snd_usb_endpoint *ep, bool force) { unsigned int i; - int async; if (!force && ep->chip->shutdown) /* to be sure... */ return -EBADFD; - async = !can_sleep; - clear_bit(EP_FLAG_RUNNING, &ep->flags); INIT_LIST_HEAD(&ep->ready_playback_urbs); ep->next_packet_read_pos = 0; ep->next_packet_write_pos = 0; - if (!async && in_interrupt()) - return 0; - for (i = 0; i < ep->nurbs; i++) { if (test_bit(i, &ep->active_mask)) { if (!test_and_set_bit(i, &ep->unlink_mask)) { struct urb *u = ep->urb[i].urb; - if (async) - usb_unlink_urb(u); - else - usb_kill_urb(u); + usb_unlink_urb(u); } } } @@ -561,7 +552,7 @@ static void release_urbs(struct snd_usb_endpoint *ep, int force) ep->prepare_data_urb = NULL; /* stop urbs */ - deactivate_urbs(ep, force, true); + deactivate_urbs(ep, force); wait_clear_urbs(ep); for (i = 0; i < ep->nurbs; i++) @@ -837,7 +828,7 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep) return 0; /* just to be sure */ - deactivate_urbs(ep, false, can_sleep); + deactivate_urbs(ep, false); if (can_sleep) wait_clear_urbs(ep); @@ -891,7 +882,7 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep) __error: clear_bit(EP_FLAG_RUNNING, &ep->flags); ep->use_count--; - deactivate_urbs(ep, false, false); + deactivate_urbs(ep, false); return -EPIPE; } @@ -915,7 +906,7 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep, bool wait) return; if (--ep->use_count == 0) { - deactivate_urbs(ep, false, wait); + deactivate_urbs(ep, false); ep->data_subs = NULL; ep->sync_slave = NULL; ep->retire_data_urb = NULL; @@ -946,7 +937,7 @@ int snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep) if (!ep) return -EINVAL; - deactivate_urbs(ep, true, true); + deactivate_urbs(ep, true); wait_clear_urbs(ep); if (ep->use_count != 0) |