aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorLibin Yang <libin.yang@intel.com>2019-05-24 19:09:20 (GMT)
committerMark Brown <broonie@kernel.org>2019-05-28 14:47:44 (GMT)
commit04ea642ff62a2b2da3d5844283991a41328f49b1 (patch)
treecd6ed34e08aab62dd1e591fa03f41b02f97669e1 /sound
parent0bce512e784d137700275f7839c4547eddbd4b6a (diff)
downloadkernel_replicant_linux-04ea642ff62a2b2da3d5844283991a41328f49b1.zip
kernel_replicant_linux-04ea642ff62a2b2da3d5844283991a41328f49b1.tar.gz
kernel_replicant_linux-04ea642ff62a2b2da3d5844283991a41328f49b1.tar.bz2
ASoC: SOF: pcm: clear hw_params_upon_resume flag correctly
sof_pcm_hw_params() can only be called once to setup the FW hw_params. So after calling sof_pcm_hw_params(), hw_params_upon_resume flag must be cleared to avoid multiple invoking sof_pcm_hw_params() by prepare. For example, after resume, there is an xrun happened, prepare() will be called. As the hw_params_upon_resume flag is not cleared, sof_pcm_hw_params() will be called and this will cause IPC timeout. This patch fixes such issues. Fixes: 868bd00f495 ("ASoC: SOF: Add PCM operations support") Reviewed-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Libin Yang <libin.yang@intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/sof/pcm.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sound/soc/sof/pcm.c b/sound/soc/sof/pcm.c
index 6499688..d6dc9a7 100644
--- a/sound/soc/sof/pcm.c
+++ b/sound/soc/sof/pcm.c
@@ -214,6 +214,9 @@ static int sof_pcm_hw_params(struct snd_pcm_substream *substream,
INIT_WORK(&spcm->stream[substream->stream].period_elapsed_work,
sof_pcm_period_elapsed_work);
+ /* clear hw_params_upon_resume flag */
+ spcm->hw_params_upon_resume[substream->stream] = 0;
+
return ret;
}
@@ -429,9 +432,6 @@ static int sof_pcm_open(struct snd_pcm_substream *substream)
dev_dbg(sdev->dev, "pcm: open stream %d dir %d\n", spcm->pcm.pcm_id,
substream->stream);
- /* clear hw_params_upon_resume flag */
- spcm->hw_params_upon_resume[substream->stream] = 0;
-
caps = &spcm->pcm.caps[substream->stream];
ret = pm_runtime_get_sync(sdev->dev);