[alsa-devel] Disable DAPM for click avoidance ?

Ricard Wanderlof ricard.wanderlof at axis.com
Fri Mar 23 17:23:23 CET 2018


On Wed, 21 Mar 2018, Mark Brown wrote:

> > > The CODEC driver is broken, it shouldn't be powering off on idle if it
> > > takes a second to ramp, it should be leaving VMID up while the system is
> > > running - this is what the _STANDBY bias level is all about.  Look at
> > > what older CODEC drivers like the wm8731 do.
> 
> > I was tracing through what actually is called in the codec driver when a 
> > stream is started, and from what I can see ALSA sequences through the 
> > STANDBY, PREPARE and ON states when a stream is started, with no other 
> > calls to set_bias_level prior to that. So it would seem that the STANDBY 
> > level is reached during the process of starting the stream, in other 
> > words, VMID and the outputs would have to be enabled already in the OFF 
> > state.
> 
> To repeat if you're setting idle_bias_off for a CODEC like this you're
> doing it wrong.  The device shouldn't be going to a bias level lower
> than _STANDBY while the system is out of suspend.

Thanks for the pointer, we've gotten the driver from the codec 
manufacturer so I haven't been very familiar with it, and I wasn't even 
aware this configuration option existed. The driver does indeed set 
idle_bias_off, and clearing this bit was the first step to getting it to 
work. I'll spare you the gory details.

My biggest issue here has really been understanding how ALSA expects the 
device to behave, and which options there are. Once I've got that clear 
getting the codec to behave correspondingly is mostly a question of 
reading the data sheet and writing code.

> Are you sure that the device doesn't have any facility for switching the
> outputs to a lower power maintenance state while things are idle?  This
> sounds like an extremely basic device, even by the standards of a decade
> ago.  The reason for powering down the outputs isn't just a power one,
> often especially with these older devices there's an audible noise floor
> even when playing silence which is distracting for users in quiet
> environments.  Powering down eliminates this noise floor.

Yes, there is a bit for setting the output amplifier in power save mode, 
which is handled as a PM bit in the driver. The specs aren't that bad, the 
worst case SNR is 80 dB, with 97 dB typical. The good thing about using 
this bit is that when the output amplifier is in power save mode, there is 
actually a high impedance connection to VMID, so that as long as the 
device is powered on properly, the outputs take a while to reach VMID 
depending on the value of the DC blocking cap on the output, and the slow 
ramp also avoids clicks when powering on the device (and we don't start an 
output stream until quite a while after powering on the system).

/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