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. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABAgAGBQJYcAtQAAoJEGwxgFQ9KSmkLbAP/A56g9YOSk6EkiFIiUG/ni6D yRLRoCWZyDZxjoVvGnzNs3gTz/5+4WUnrDQOz9+pGDuE4k2fyar+Af1PMdYDXX/m 8okgm/X8r5zIw/7bBhu4aHIvwK8hMTGQlyO8pXqkwbpvz1smCrJWYiyPtI9oPZlt BC09S6F7iADbRliCYwu2yCzssI7YyKVFbL/RhkOS+kzvp6TguC7RrI0mrfIWyGjh hhUggV3uUPcSZaOX6M7SncutCylaGAkdlwEa6AbSjuk8aFoVQexHJtWtmQqMvYqZ ppr+wN1epx5rJNYPyt0LouxB3P0C0jGgHU/21nCKWMsB8XFr5ZfEi2XnMjkYZOXl zsEdRbzt+ewg8UnZLqTYE/RQxiMGvQiBRtsL4NNxh2mG30G2Eh5n06Q95ss4oO1T QPKyuVou0u+oodDe7UoMHcPCjEEkCfH69Zs9hGuXYRHMqgJRfOIIMrUTD4M5m8cd 14Zds539qBX5eaD30G6GRvXMGduLVW9KxIwkX6pjmQAOPbvKr6pu7iHQ00SnWHDk ZILEvveU2mtiecSr5eoXYxZq3/D9tY8QQ2K6u5puhVX4btQwRY35CDl+sglX+m3e oQmmfzI7IDT1szbZT1++L3B61310b6p/u5Sp/07f6ytPgFKcMa5q1vsEq0ROCOog SsYwgcX5+SG77ZYOmtGK =8qEb -----END PGP SIGNATURE----- Merge tag 'sound-4.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "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" * tag 'sound-4.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: Revert "ALSA: firewire-lib: change structure member with proper type" ALSA: usb-audio: test EP_FLAG_RUNNING at urb completion ALSA: usb-audio: Fix irq/process data synchronization ALSA: hda - Apply asus-mode8 fixup to ASUS X71SL ALSA: hda - Fix up GPIO for ASUS ROG Ranger ALSA: firewire-lib: change structure member with proper type ALSA: firewire-tascam: Fix to handle error from initialization of stream data ALSA: fireworks: fix asymmetric API call at unit removal
This commit is contained in:
Коммит
308c470bc4
|
@ -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
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 *substream
|
|||
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
err = start_endpoints(subs, false);
|
||||
err = start_endpoints(subs);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче