diff options
| -rw-r--r-- | sound/firewire/fireworks/fireworks_stream.c | 2 | ||||
| -rw-r--r-- | sound/firewire/tascam/tascam-stream.c | 2 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 2 | ||||
| -rw-r--r-- | sound/usb/endpoint.c | 20 | ||||
| -rw-r--r-- | sound/usb/endpoint.h | 2 | ||||
| -rw-r--r-- | sound/usb/pcm.c | 10 |
6 files changed, 20 insertions, 18 deletions
diff --git a/sound/firewire/fireworks/fireworks_stream.c b/sound/firewire/fireworks/fireworks_stream.c index ee47924aef0d..827161bc269c 100644 --- a/sound/firewire/fireworks/fireworks_stream.c +++ b/sound/firewire/fireworks/fireworks_stream.c | |||
| @@ -117,7 +117,7 @@ destroy_stream(struct snd_efw *efw, struct amdtp_stream *stream) | |||
| 117 | conn = &efw->in_conn; | 117 | conn = &efw->in_conn; |
| 118 | 118 | ||
| 119 | amdtp_stream_destroy(stream); | 119 | amdtp_stream_destroy(stream); |
| 120 | cmp_connection_destroy(&efw->out_conn); | 120 | cmp_connection_destroy(conn); |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | static int | 123 | static int |
diff --git a/sound/firewire/tascam/tascam-stream.c b/sound/firewire/tascam/tascam-stream.c index 4ad3bd7fd445..f1657a4e0621 100644 --- a/sound/firewire/tascam/tascam-stream.c +++ b/sound/firewire/tascam/tascam-stream.c | |||
| @@ -343,7 +343,7 @@ int snd_tscm_stream_init_duplex(struct snd_tscm *tscm) | |||
| 343 | if (err < 0) | 343 | if (err < 0) |
| 344 | amdtp_stream_destroy(&tscm->rx_stream); | 344 | amdtp_stream_destroy(&tscm->rx_stream); |
| 345 | 345 | ||
| 346 | return 0; | 346 | return err; |
| 347 | } | 347 | } |
| 348 | 348 | ||
| 349 | /* At bus reset, streaming is stopped and some registers are clear. */ | 349 | /* At bus reset, streaming is stopped and some registers are clear. */ |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 9448daff9d8b..7d660ee1d5e8 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -2230,6 +2230,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { | |||
| 2230 | SND_PCI_QUIRK(0x1043, 0x1971, "Asus W2JC", ALC882_FIXUP_ASUS_W2JC), | 2230 | SND_PCI_QUIRK(0x1043, 0x1971, "Asus W2JC", ALC882_FIXUP_ASUS_W2JC), |
| 2231 | SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_FIXUP_EEE1601), | 2231 | SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_FIXUP_EEE1601), |
| 2232 | SND_PCI_QUIRK(0x1043, 0x84bc, "ASUS ET2700", ALC887_FIXUP_ASUS_BASS), | 2232 | SND_PCI_QUIRK(0x1043, 0x84bc, "ASUS ET2700", ALC887_FIXUP_ASUS_BASS), |
| 2233 | SND_PCI_QUIRK(0x1043, 0x8691, "ASUS ROG Ranger VIII", ALC882_FIXUP_GPIO3), | ||
| 2233 | SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT), | 2234 | SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT), |
| 2234 | SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP), | 2235 | SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP), |
| 2235 | SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP), | 2236 | SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP), |
| @@ -6983,6 +6984,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { | |||
| 6983 | SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16), | 6984 | SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16), |
| 6984 | SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51), | 6985 | SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51), |
| 6985 | SND_PCI_QUIRK(0x1043, 0x17bd, "ASUS N751", ALC668_FIXUP_ASUS_Nx51), | 6986 | SND_PCI_QUIRK(0x1043, 0x17bd, "ASUS N751", ALC668_FIXUP_ASUS_Nx51), |
| 6987 | SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71SL", ALC662_FIXUP_ASUS_MODE8), | ||
| 6986 | SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16), | 6988 | SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16), |
| 6987 | SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_MODE4_CHMAP), | 6989 | SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_MODE4_CHMAP), |
| 6988 | SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), | 6990 | SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), |
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index 15d1d5c63c3c..c90607ebe155 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c | |||
| @@ -384,6 +384,9 @@ static void snd_complete_urb(struct urb *urb) | |||
| 384 | if (unlikely(atomic_read(&ep->chip->shutdown))) | 384 | if (unlikely(atomic_read(&ep->chip->shutdown))) |
| 385 | goto exit_clear; | 385 | goto exit_clear; |
| 386 | 386 | ||
| 387 | if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags))) | ||
| 388 | goto exit_clear; | ||
| 389 | |||
| 387 | if (usb_pipeout(ep->pipe)) { | 390 | if (usb_pipeout(ep->pipe)) { |
| 388 | retire_outbound_urb(ep, ctx); | 391 | retire_outbound_urb(ep, ctx); |
| 389 | /* can be stopped during retire callback */ | 392 | /* can be stopped during retire callback */ |
| @@ -534,6 +537,11 @@ static int wait_clear_urbs(struct snd_usb_endpoint *ep) | |||
| 534 | alive, ep->ep_num); | 537 | alive, ep->ep_num); |
| 535 | clear_bit(EP_FLAG_STOPPING, &ep->flags); | 538 | clear_bit(EP_FLAG_STOPPING, &ep->flags); |
| 536 | 539 | ||
| 540 | ep->data_subs = NULL; | ||
| 541 | ep->sync_slave = NULL; | ||
| 542 | ep->retire_data_urb = NULL; | ||
| 543 | ep->prepare_data_urb = NULL; | ||
| 544 | |||
| 537 | return 0; | 545 | return 0; |
| 538 | } | 546 | } |
| 539 | 547 | ||
| @@ -912,9 +920,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep, | |||
| 912 | /** | 920 | /** |
| 913 | * snd_usb_endpoint_start: start an snd_usb_endpoint | 921 | * snd_usb_endpoint_start: start an snd_usb_endpoint |
| 914 | * | 922 | * |
| 915 | * @ep: the endpoint to start | 923 | * @ep: the endpoint to start |
| 916 | * @can_sleep: flag indicating whether the operation is executed in | ||
| 917 | * non-atomic context | ||
| 918 | * | 924 | * |
| 919 | * A call to this function will increment the use count of the endpoint. | 925 | * A call to this function will increment the use count of the endpoint. |
| 920 | * In case it is not already running, the URBs for this endpoint will be | 926 | * In case it is not already running, the URBs for this endpoint will be |
| @@ -924,7 +930,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep, | |||
| 924 | * | 930 | * |
| 925 | * Returns an error if the URB submission failed, 0 in all other cases. | 931 | * Returns an error if the URB submission failed, 0 in all other cases. |
| 926 | */ | 932 | */ |
| 927 | int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep) | 933 | int snd_usb_endpoint_start(struct snd_usb_endpoint *ep) |
| 928 | { | 934 | { |
| 929 | int err; | 935 | int err; |
| 930 | unsigned int i; | 936 | unsigned int i; |
| @@ -938,8 +944,6 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep) | |||
| 938 | 944 | ||
| 939 | /* just to be sure */ | 945 | /* just to be sure */ |
| 940 | deactivate_urbs(ep, false); | 946 | deactivate_urbs(ep, false); |
| 941 | if (can_sleep) | ||
| 942 | wait_clear_urbs(ep); | ||
| 943 | 947 | ||
| 944 | ep->active_mask = 0; | 948 | ep->active_mask = 0; |
| 945 | ep->unlink_mask = 0; | 949 | ep->unlink_mask = 0; |
| @@ -1020,10 +1024,6 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep) | |||
| 1020 | 1024 | ||
| 1021 | if (--ep->use_count == 0) { | 1025 | if (--ep->use_count == 0) { |
| 1022 | deactivate_urbs(ep, false); | 1026 | deactivate_urbs(ep, false); |
| 1023 | ep->data_subs = NULL; | ||
| 1024 | ep->sync_slave = NULL; | ||
| 1025 | ep->retire_data_urb = NULL; | ||
| 1026 | ep->prepare_data_urb = NULL; | ||
| 1027 | set_bit(EP_FLAG_STOPPING, &ep->flags); | 1027 | set_bit(EP_FLAG_STOPPING, &ep->flags); |
| 1028 | } | 1028 | } |
| 1029 | } | 1029 | } |
diff --git a/sound/usb/endpoint.h b/sound/usb/endpoint.h index 6428392d8f62..584f295d7c77 100644 --- a/sound/usb/endpoint.h +++ b/sound/usb/endpoint.h | |||
| @@ -18,7 +18,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep, | |||
| 18 | struct audioformat *fmt, | 18 | struct audioformat *fmt, |
| 19 | struct snd_usb_endpoint *sync_ep); | 19 | struct snd_usb_endpoint *sync_ep); |
| 20 | 20 | ||
| 21 | int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep); | 21 | int snd_usb_endpoint_start(struct snd_usb_endpoint *ep); |
| 22 | void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep); | 22 | void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep); |
| 23 | void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep); | 23 | void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep); |
| 24 | int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep); | 24 | int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep); |
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index 34c6d4f2c0b6..9aa5b1855481 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c | |||
| @@ -218,7 +218,7 @@ int snd_usb_init_pitch(struct snd_usb_audio *chip, int iface, | |||
| 218 | } | 218 | } |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep) | 221 | static int start_endpoints(struct snd_usb_substream *subs) |
| 222 | { | 222 | { |
| 223 | int err; | 223 | int err; |
| 224 | 224 | ||
| @@ -231,7 +231,7 @@ static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep) | |||
| 231 | dev_dbg(&subs->dev->dev, "Starting data EP @%p\n", ep); | 231 | dev_dbg(&subs->dev->dev, "Starting data EP @%p\n", ep); |
| 232 | 232 | ||
| 233 | ep->data_subs = subs; | 233 | ep->data_subs = subs; |
| 234 | err = snd_usb_endpoint_start(ep, can_sleep); | 234 | err = snd_usb_endpoint_start(ep); |
| 235 | if (err < 0) { | 235 | if (err < 0) { |
| 236 | clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags); | 236 | clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags); |
| 237 | return err; | 237 | return err; |
| @@ -260,7 +260,7 @@ static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep) | |||
| 260 | dev_dbg(&subs->dev->dev, "Starting sync EP @%p\n", ep); | 260 | dev_dbg(&subs->dev->dev, "Starting sync EP @%p\n", ep); |
| 261 | 261 | ||
| 262 | ep->sync_slave = subs->data_endpoint; | 262 | ep->sync_slave = subs->data_endpoint; |
| 263 | err = snd_usb_endpoint_start(ep, can_sleep); | 263 | err = snd_usb_endpoint_start(ep); |
| 264 | if (err < 0) { | 264 | if (err < 0) { |
| 265 | clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags); | 265 | clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags); |
| 266 | return err; | 266 | return err; |
| @@ -850,7 +850,7 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream) | |||
| 850 | /* for playback, submit the URBs now; otherwise, the first hwptr_done | 850 | /* for playback, submit the URBs now; otherwise, the first hwptr_done |
| 851 | * updates for all URBs would happen at the same time when starting */ | 851 | * updates for all URBs would happen at the same time when starting */ |
| 852 | if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) | 852 | if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) |
| 853 | ret = start_endpoints(subs, true); | 853 | ret = start_endpoints(subs); |
| 854 | 854 | ||
| 855 | unlock: | 855 | unlock: |
| 856 | snd_usb_unlock_shutdown(subs->stream->chip); | 856 | snd_usb_unlock_shutdown(subs->stream->chip); |
| @@ -1666,7 +1666,7 @@ static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream | |||
| 1666 | 1666 | ||
| 1667 | switch (cmd) { | 1667 | switch (cmd) { |
| 1668 | case SNDRV_PCM_TRIGGER_START: | 1668 | case SNDRV_PCM_TRIGGER_START: |
| 1669 | err = start_endpoints(subs, false); | 1669 | err = start_endpoints(subs); |
| 1670 | if (err < 0) | 1670 | if (err < 0) |
| 1671 | return err; | 1671 | return err; |
| 1672 | 1672 | ||
