Skip to content

Commit

Permalink
ASoC: fsl_asrc_dma: get codec or cpu dai from backend
Browse files Browse the repository at this point in the history
With audio graph card, original cpu dai is changed to codec device in
backend, so if cpu dai is dummy device in backend, get the codec dai
device, which is the real hardware device connected.

The specific case is ASRC->SAI->AMIX->CODEC.

Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://patch.msgid.link/20250319033504.2898605-1-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Shengjiu Wang authored and Mark Brown committed Apr 6, 2025
1 parent a31a493 commit ef5c23a
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion sound/soc/fsl/fsl_asrc_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,24 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
for_each_dpcm_be(rtd, stream, dpcm) {
struct snd_soc_pcm_runtime *be = dpcm->be;
struct snd_pcm_substream *substream_be;
struct snd_soc_dai *dai = snd_soc_rtd_to_cpu(be, 0);
struct snd_soc_dai *dai_cpu = snd_soc_rtd_to_cpu(be, 0);
struct snd_soc_dai *dai_codec = snd_soc_rtd_to_codec(be, 0);
struct snd_soc_dai *dai;

if (dpcm->fe != rtd)
continue;

/*
* With audio graph card, original cpu dai is changed to codec
* device in backend, so if cpu dai is dummy device in backend,
* get the codec dai device, which is the real hardware device
* connected.
*/
if (!snd_soc_dai_is_dummy(dai_cpu))
dai = dai_cpu;
else
dai = dai_codec;

substream_be = snd_soc_dpcm_get_substream(be, stream);
dma_params_be = snd_soc_dai_get_dma_data(dai, substream_be);
dev_be = dai->dev;
Expand Down

0 comments on commit ef5c23a

Please sign in to comment.