diff options
author | Shengjiu Wang <shengjiu.wang@nxp.com> | 2023-03-09 15:13:37 +0800 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-03-14 13:30:16 +0000 |
commit | 083a25b18d6ad9f1f540e629909aa3eaaaf01823 (patch) | |
tree | 8983eb4fdd578ad7ce6ae55b689099336466f002 /sound/soc | |
parent | dda5c809d42389b82f37cbbe562044d8a29083c6 (diff) | |
download | linux-stable-083a25b18d6ad9f1f540e629909aa3eaaaf01823.tar.gz linux-stable-083a25b18d6ad9f1f540e629909aa3eaaaf01823.tar.bz2 linux-stable-083a25b18d6ad9f1f540e629909aa3eaaaf01823.zip |
ASoC: soc-pcm: fix hw->formats cleared by soc_pcm_hw_init() for dpcm
The hw->formats may be set by snd_dmaengine_pcm_refine_runtime_hwparams()
in component's startup()/open(), but soc_pcm_hw_init() will init
hw->formats in dpcm_runtime_setup_fe() after component's startup()/open(),
which causes the valuable hw->formats to be cleared.
So need to store the hw->formats before initialization, then restore
it after initialization.
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://lore.kernel.org/r/1678346017-3660-1-git-send-email-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/soc-pcm.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 5eb056b942ce..7958c9defd49 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -1661,10 +1661,14 @@ static void dpcm_runtime_setup_fe(struct snd_pcm_substream *substream) struct snd_pcm_hardware *hw = &runtime->hw; struct snd_soc_dai *dai; int stream = substream->stream; + u64 formats = hw->formats; int i; soc_pcm_hw_init(hw); + if (formats) + hw->formats &= formats; + for_each_rtd_cpu_dais(fe, i, dai) { struct snd_soc_pcm_stream *cpu_stream; |