Skip to content

Commit

Permalink
ASoC: SOF: pcm: clear hw_params_upon_resume flag correctly
Browse files Browse the repository at this point in the history
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: 868bd00 ("ASoC: SOF: Add PCM operations support")
Reviewed-by: Takashi Iwai <[email protected]>
Signed-off-by: Libin Yang <[email protected]>
Signed-off-by: Pierre-Louis Bossart <[email protected]>
Signed-off-by: Mark Brown <[email protected]>
  • Loading branch information
libinyang authored and broonie committed May 28, 2019
1 parent 0bce512 commit 04ea642
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions sound/soc/sof/pcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 04ea642

Please sign in to comment.