[alsa-devel] [PATCH] ASoC: core: Set dapm->idle_bias_off for DAIs not mapped with a codec

Peter Ujfalusi peter.ujfalusi at ti.com
Tue Aug 7 09:24:13 CEST 2012

The idle_bias_off flag is not configured for DAIs not mapped with a codec.
This causes the pm counter to be increased at probe time for the CPU dai
which unbalances the pm counter handling.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi at ti.com>

Hello Mark,

I'm not sure if this is the correct way to fix the problem but this patch works
for me.

The issue in short:
Since commit: '18d7564 ASoC: when removing a CPU DAI, clean up its DAPM context'
After booting up the kernel on BeagleBoard for example I see that the clocks are
enabled for the McBSP CPU dai. This alone causing the first stream start to fail
due to unbalanced pm_runtime counter. Later it stabilizes, but I see failures
with full duplex operation (arecord | aplay).
The root cause of this is not commit 18d7564, but the fact that we did not
configured the dapm->idle_bias_off for the CPU dai to be 1 (we do this for the
platform driver). The pm_runtime_get_sync is called from
dapm_pre_sequence_async() - since we add the cpu_dai dapm context to the list.

With this patch we set the dapm->idle_bias_off for DAIs not linked with a codec
which means cpu_dais.
If this is not acceptable we need to set this flag in the cpu_dai driver itself.


 sound/soc/soc-core.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index f81c597..f10f00b 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -3715,6 +3715,9 @@ int snd_soc_register_dai(struct device *dev,
+	if (!dai->codec)
+		dai->dapm.idle_bias_off = 1;
 	list_add(&dai->list, &dai_list);
@@ -3803,6 +3806,9 @@ int snd_soc_register_dais(struct device *dev,
+		if (!dai->codec)
+			dai->dapm.idle_bias_off = 1;
 		list_add(&dai->list, &dai_list);

More information about the Alsa-devel mailing list