[alsa-devel] [PATCH] ALSA: ASoC: cs4720: use snd_soc_cache_sync()

Daniel Mack zonque at gmail.com
Tue Nov 22 16:23:05 CET 2011

On 11/22/2011 03:02 PM, Mark Brown wrote:
> On Tue, Nov 22, 2011 at 02:45:16PM +0100, Daniel Mack wrote:
>> Replace the manual register restore mechanism in cs4270.c and call
>> snd_soc_cache_sync() instead. The current is also wrong, as it doesn't
>> update the internal cache, leading to cache inconsitency after suspend.
> I don't understand why this is a bug fix - the code is writing the
> values from the internal cache to the hardware and what's there doesn't
> look obviously wrong...

Hmm, you're right, that isn't obvious. I was too fast in blaming the
code wrong as it stands. But as a matter of fact, the patch *does* fix
the problem, Sven successfully tested it on various devices.

The bug is reproducible by setting the output volume to 50% before
sending the device to suspend. After wakeup, amixer still reports the
old volume level, but the codec is in fact set to 100%. Changing it to
50% doesn't do anything, but to any other level has an effect. This is
clearly a cache sync bug, but the piece that's missing is the reason why
my patch does the right thing.

I'll look into this again - thanks for the heads-up.

More information about the Alsa-devel mailing list