[alsa-devel] Disable DAPM for click avoidance ?

Ricard Wanderlof ricard.wanderlof at axis.com
Wed Nov 22 13:33:37 CET 2017


I'm having an issue with a codec where the normal DAPM procedure of 
disabling most of the codec when there is no stream ongoing results in 
large clicks when a playback stream starts and stops, because the output 
jumps from 0V when the output is disabled to over a volt when the output 
is enabled. 

There appears to be a 'slow stop/start' feature in the codec, however, it 
takes about one second to ramp up and down the output voltage, and that is 
too long a delay when starting a stream.

In our usecase the power consumtion of the codec is negligable 
compared to the rest of the electronics, so leaving the codec running at 
all times is perfectly feasible.

Is there any way from a machine driver to disable the DAPM switching, i.e. 
leave parts of the codec running at all times? In this specific case, 
there are two internal PM controls which enable the output. One of them is 
controlled by an output mixer element (SND_SOC_DAPM_MIXER_E), and the 
other one from set_bias_level().

I've had a look in the core code, but it seems that the whole business of 
changing the bias level when a stream is started is always performed and 
that there is no way to say "Set the bias level to ON and leave it there".

An alternative would be to augment the codec driver with an 'always on' 
feature, which effectively always enables PM for certain parts of the 
chip. But it seems like the wrong place to do this type of thing.

Another use for this feature is that we have had a lot of problems over 
the years with buggy I2S interfaces misbehaving when streams are started 
and stopped, and there would be an advantage to letting the AIF run the 
whole time after startup.

/Ricard
-- 
Ricard Wolf Wanderlöf                           ricardw(at)axis.com
Axis Communications AB, Lund, Sweden            www.axis.com
Phone +46 46 272 2016                           Fax +46 46 13 61 30


More information about the Alsa-devel mailing list