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 <[email protected]> --- sound/soc/fsl/fsl-asoc-card.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sound/soc/fsl/fsl-asoc-card.c b/sound/soc/fsl/fsl-asoc-card.c index 41cd2fc2ea56..e08e135886f7 100644 --- a/sound/soc/fsl/fsl-asoc-card.c +++ b/sound/soc/fsl/fsl-asoc-card.c @@ -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", -- 2.34.1
