[alsa-devel] ADAU1761 default register value problem
Ricard Wanderlof
ricard.wanderlof at axis.com
Tue May 3 10:16:51 CEST 2016
On Tue, 26 Apr 2016, Lars-Peter Clausen wrote:
> On 04/21/2016 04:01 PM, Ricard Wanderlof wrote:
> >
> > ...
> > The problem I have is that the driver assumes that the CODEC has been
> > initialized with the default register settings when the system boots.
> > However, if the system has not been power cycled but just rebooted, this
> > is not necessarily the case, as the CODEC has no external reset pin but
> > derives its reset signal internally from the power level.
> > ...
Sorry I haven't been able to respond earlier.
> I've been thinking about this for the last few days trying to come up with a
> good solution, but it is really difficult.
>
> The issue you are describing is simply an oversight from my side.
>
> One solution would be do drop the register default values and let regmap
> fill the register cache on demand when a read is done the first time for a
> register. The problem with this approach is that we leave the device in an
> unknown state when we probe the driver, but we really want to have it in a
> known state of lowest power.
>
> The alternative is to write out the register defaults when the device is
> probed, sort of a poor mans software reset, this brings us into a known
> state. This approach has the downside that there is the overhead of having
> to write all registers.
>
> I don't like either, but given the limitations of the hardware we'll have to
> choose one and in that case I'd slightly lean towards the later solution has
> it gives us consistent and predictable behavior and the overhead of writing
> the registers should be manageable.
Either way, there will be a fair amount of communication with the codec,
either as a result of setting the default values, or as a result of
reading the existing ones in order to determine what would be necessary to
write.
I would think that having the codec in a controlled known (low power)
state would tip the balance in favor of the second solution.
One question is though should one write out _all_ registers, including
those not actually used by the driver? I'm thinking of an
upgrade/downgrade situation, where a previously running kernel version has
set up a register which the currently running version doesn't need to
touch.
/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