summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorLibin Yang <libin.yang@intel.com>2019-05-24 21:09:20 +0200
committerMark Brown <broonie@kernel.org>2019-05-28 16:47:44 +0200
commit04ea642ff62a2b2da3d5844283991a41328f49b1 (patch)
treecd6ed34e08aab62dd1e591fa03f41b02f97669e1 /sound
parentASoC: SOF: core: fix error handling with the probe workqueue (diff)
downloadlinux-04ea642ff62a2b2da3d5844283991a41328f49b1.tar.xz
linux-04ea642ff62a2b2da3d5844283991a41328f49b1.zip
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 649968841dad..d6dc9a7df0f4 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);