]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: fsl-asoc-card: enable ignore_pmdown_time for ASRC case
authorShengjiu Wang <shengjiu.wang@nxp.com>
Wed, 29 Apr 2026 10:00:24 +0000 (18:00 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 30 Apr 2026 12:07:56 +0000 (21:07 +0900)
Problem:
When switching from ASRC path (hw:0,1) to direct path (hw:0,0),
audio stops after 5 seconds due to DAPM powering down shared widgets.

Scenario:
1. Play on hw:0,1 (ASRC): ASRC-Playback → CPU-Playback → Codec
2. Stop playback
3. Play on hw:0,0 (Direct): CPU-Playback → Codec
4. After 5s: No sound (DAPM powered down CPU-Playback)

Root Cause:
DAPM sees ASRC-Playback disconnected and powers down the entire
path including CPU-Playback, even though CPU-Playback is still
needed for the direct path.

Solution:
Enable ignore_pmdown_time for DPCM links to prevent premature
widget power-down when switching between paths.

Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://patch.msgid.link/20260429100028.2739711-3-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/fsl/fsl-asoc-card.c

index 41cd2fc2ea560b365b92b0b35cd216b1990581b0..e08e135886f7fa97d81d8748ade336f212474448 100644 (file)
@@ -990,6 +990,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
        if (asrc_pdev) {
                /* DPCM DAI Links only if ASRC exists */
                priv->dai_link[1].dpcm_merged_chan = 1;
+               priv->dai_link[1].ignore_pmdown_time = 1;
                priv->dai_link[1].cpus->of_node = asrc_np;
                priv->dai_link[1].platforms->of_node = asrc_np;
                for_each_link_codecs((&(priv->dai_link[2])), codec_idx, codec_comp) {
@@ -999,6 +1000,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
                }
                priv->dai_link[2].cpus->of_node = cpu_np;
                priv->dai_link[2].dai_fmt = priv->dai_fmt;
+               priv->dai_link[2].ignore_pmdown_time = 1;
                priv->card.num_links = 3;
 
                ret = of_property_read_u32(asrc_np, "fsl,asrc-rate",