sound fixes for 4.10-rc3
Linus,
please pull sound fixes for v4.10-rc3 from:
git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-4.10-rc3
The topmost commit is e4f34cf6d59160818dcdcf41f4116cc88093ece3
----------------------------------------------------------------
sound fixes for 4.10-rc3
Nothing particular stands out, only a few small fixes for USB-audio, HD-audio and Firewire. The USB-audio fix is the respin of the previous race fix after a revert due to the regression.
----------------------------------------------------------------
Ioan-Adrian Ratiu (2):
ALSA: usb-audio: Fix irq/process data synchronization
ALSA: usb-audio: test EP_FLAG_RUNNING at urb completion
Takashi Iwai (2):
ALSA: hda - Fix up GPIO for ASUS ROG Ranger
ALSA: hda - Apply asus-mode8 fixup to ASUS X71SL
Takashi Sakamoto (4):
ALSA: fireworks: fix asymmetric API call at unit removal
ALSA: firewire-tascam: Fix to handle error from initialization of stream data
ALSA: firewire-lib: change structure member with proper type Revert "ALSA: firewire-lib: change structure member with proper type"
--- sound/firewire/fireworks/fireworks_stream.c | 2 +- sound/firewire/tascam/tascam-stream.c | 2 +- sound/pci/hda/patch_realtek.c | 2 ++ sound/usb/endpoint.c | 20 ++++++++++---------- sound/usb/endpoint.h | 2 +- sound/usb/pcm.c | 10 +++++----- 6 files changed, 20 insertions(+), 18 deletions(-)
sound/firewire/fireworks/fireworks_stream.c +1 -1
@@ -117,7 +117,7 @@ destroy_stream(struct snd_efw *efw, struct amdtp_stream *stream) conn = &efw->in_conn;amdtp_stream_destroy (stream); -cmp_connection_destroy (&efw->out_conn); +cmp_connection_destroy (conn); } static int
sound/firewire/tascam/tascam-stream.c +1 -1
@@ -343,7 +343,7 @@ int snd_tscm_stream_init_duplex(struct snd_tscm *tscm)if (err <0 )amdtp_stream_destroy (&tscm->rx_stream); -return 0 ; +return err; }/* At bus reset, streaming is stopped and some registers are clear. */
sound/pci/hda/patch_realtek.c +2 -0
@@ -2230,6 +2230,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {SND_PCI_QUIRK (0x1043 ,0x1971 ,"Asus W2JC" ,ALC882_FIXUP_ASUS_W2JC ),SND_PCI_QUIRK (0x1043 ,0x835f ,"Asus Eee 1601" ,ALC888_FIXUP_EEE1601 ),SND_PCI_QUIRK (0x1043 ,0x84bc ,"ASUS ET2700" ,ALC887_FIXUP_ASUS_BASS ), +SND_PCI_QUIRK (0x1043 ,0x8691 ,"ASUS ROG Ranger VIII" ,ALC882_FIXUP_GPIO3 ),SND_PCI_QUIRK (0x104d ,0x9047 ,"Sony Vaio TT" ,ALC889_FIXUP_VAIO_TT ),SND_PCI_QUIRK (0x104d ,0x905a ,"Sony Vaio Z" ,ALC882_FIXUP_NO_PRIMARY_HP ), 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[] = {SND_PCI_QUIRK (0x1043 ,0x15a7 ,"ASUS UX51VZH" ,ALC662_FIXUP_BASS_16 ),SND_PCI_QUIRK (0x1043 ,0x177d ,"ASUS N551" , ALC668_FIXUP_ASUS_Nx51),SND_PCI_QUIRK (0x1043 ,0x17bd ,"ASUS N751" , ALC668_FIXUP_ASUS_Nx51), +SND_PCI_QUIRK (0x1043 ,0x1963 ,"ASUS X71SL" ,ALC662_FIXUP_ASUS_MODE8 ),SND_PCI_QUIRK (0x1043 ,0x1b73 ,"ASUS N55SF" ,ALC662_FIXUP_BASS_16 ),SND_PCI_QUIRK (0x1043 ,0x1bf3 ,"ASUS N76VZ" ,ALC662_FIXUP_BASS_MODE4_CHMAP ), SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
sound/usb/endpoint.c +10 -10
@@ -384,6 +384,9 @@ static void snd_complete_urb(struct urb *urb)if (unlikely (atomic_read (&ep->chip->shutdown))) goto exit_clear; +if (unlikely (!test_bit (EP_FLAG_RUNNING , &ep->flags))) + goto exit_clear; +if (usb_pipeout (ep->pipe)) {retire_outbound_urb (ep, ctx);/* can be stopped during retire callback */
@@ -534,6 +537,11 @@ static int wait_clear_urbs(struct snd_usb_endpoint *ep) alive, ep->ep_num);clear_bit (EP_FLAG_STOPPING , &ep->flags); + ep->data_subs =NULL ; + ep->sync_slave =NULL ; + ep->retire_data_urb =NULL ; + ep->prepare_data_urb =NULL ; +return 0 ; }
@@ -912,9 +920,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,/** * snd_usb_endpoint_start: start an snd_usb_endpoint * -* @ep: the endpoint to start -* @can_sleep: flag indicating whether the operation is executed in -* non-atomic context +* @ep: the endpoint to start * * A call to this function will increment the use count of the endpoint. * 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,* * Returns an error if the URB submission failed, 0 in all other cases. */ -int snd_usb_endpoint_start (struct snd_usb_endpoint *ep,bool can_sleep) +int snd_usb_endpoint_start (struct snd_usb_endpoint *ep) {int err;unsigned int i;
@@ -938,8 +944,6 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep)/* just to be sure */ deactivate_urbs (ep, false); -if (can_sleep) -wait_clear_urbs (ep); ep->active_mask =0 ; ep->unlink_mask =0 ;
@@ -1020,10 +1024,6 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep)if (--ep->use_count ==0 ) {deactivate_urbs (ep, false); - ep->data_subs =NULL ; - ep->sync_slave =NULL ; - ep->retire_data_urb =NULL ; - ep->prepare_data_urb =NULL ;set_bit (EP_FLAG_STOPPING , &ep->flags); } }
sound/usb/endpoint.h +1 -1
@@ -18,7 +18,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,struct audioformat *fmt, struct snd_usb_endpoint *sync_ep); -int snd_usb_endpoint_start (struct snd_usb_endpoint *ep,bool can_sleep); +int snd_usb_endpoint_start (struct snd_usb_endpoint *ep);void snd_usb_endpoint_stop (struct snd_usb_endpoint *ep);void snd_usb_endpoint_sync_pending_stop (struct snd_usb_endpoint *ep);int snd_usb_endpoint_activate (struct snd_usb_endpoint *ep);
sound/usb/pcm.c +5 -5
@@ -218,7 +218,7 @@ int snd_usb_init_pitch(struct snd_usb_audio *chip, int iface, } } -static int start_endpoints (struct snd_usb_substream *subs,bool can_sleep) +static int start_endpoints (struct snd_usb_substream *subs) {int err;
@@ -231,7 +231,7 @@ static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep)dev_dbg (&subs->dev->dev,"Starting data EP @%p\n" , ep); ep->data_subs = subs; - err =snd_usb_endpoint_start (ep, can_sleep); + err =snd_usb_endpoint_start (ep);if (err <0 ) {clear_bit (SUBSTREAM_FLAG_DATA_EP_STARTED , &subs->flags);return err;
@@ -260,7 +260,7 @@ static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep)dev_dbg (&subs->dev->dev,"Starting sync EP @%p\n" , ep); ep->sync_slave = subs->data_endpoint; - err =snd_usb_endpoint_start (ep, can_sleep); + err =snd_usb_endpoint_start (ep);if (err <0 ) {clear_bit (SUBSTREAM_FLAG_SYNC_EP_STARTED , &subs->flags);return err;
@@ -850,7 +850,7 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)/* for playback, submit the URBs now; otherwise, the first hwptr_done * updates for all URBs would happen at the same time when starting */ if (subs->direction ==SNDRV_PCM_STREAM_PLAYBACK ) - ret =start_endpoints (subs, true); + ret =start_endpoints (subs); unlock:snd_usb_unlock_shutdown (subs->stream->chip);
@@ -1666,7 +1666,7 @@ static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substreamswitch (cmd) {case SNDRV_PCM_TRIGGER_START : - err =start_endpoints (subs, false); + err =start_endpoints (subs);if (err <0 )return err;