ALSA: usb-audio: avoid setting of sample rate multiple times on bus
Some of userland applications call 'snd_pcm_hw_params()' and 'snd_pcm_hw_prepare()' sequentially, which means 'snd_pcm_hw_prepare()' is called twice and the second 'snd_pcm_hw_prepare()' is called in 'SNDRV_PCM_STATE_PREPARED' state. Some devices are not able to manage this and they will stop playback if the sample rate will be configured several times over USB protocol. V2: updated Changelog Signed-off-by: Daniel Girnus <dgirnus@de.adit-jv.com> Signed-off-by: Jens Lorenz <jlorenz@de.adit-jv.com> Signed-off-by: Jiada Wang <jiada_wang@mentor.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
4763601a56
commit
1e2e3fe480
@ -806,17 +806,18 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
|
||||
iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface);
|
||||
alts = &iface->altsetting[subs->cur_audiofmt->altset_idx];
|
||||
ret = snd_usb_init_sample_rate(subs->stream->chip,
|
||||
subs->cur_audiofmt->iface,
|
||||
alts,
|
||||
subs->cur_audiofmt,
|
||||
subs->cur_rate);
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
|
||||
if (subs->need_setup_ep) {
|
||||
|
||||
iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface);
|
||||
alts = &iface->altsetting[subs->cur_audiofmt->altset_idx];
|
||||
ret = snd_usb_init_sample_rate(subs->stream->chip,
|
||||
subs->cur_audiofmt->iface,
|
||||
alts,
|
||||
subs->cur_audiofmt,
|
||||
subs->cur_rate);
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
|
||||
ret = configure_endpoint(subs);
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
|
Loading…
Reference in New Issue
Block a user