[alsa-devel] Register cache different from the real register values

Leon Romanovsky leon at leon.nu
Mon Oct 24 09:26:27 CEST 2011

On Sun, Oct 23, 2011 at 16:37, Mark Brown
<broonie at opensource.wolfsonmicro.com> wrote:
> On Sun, Oct 23, 2011 at 04:14:07PM +0200, Leon Romanovsky wrote:
>> On Sun, Oct 23, 2011 at 15:51, Mark Brown
>> > Post your code for review and we
>> > might be able to spot something.
>> Our code is located at
>> http://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c
> Please post for upstream, it's much easier to review and ideally we
> could even get the driver merged.
>> >  At a guess you're doing cache_only and
>> > something's going wrong there
>> I also tried to add codec->cache_sync = 1 to the _probe function, but
>> without luck.
>> http://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line998
> You should only set cache_sync if you dirty the cache and then you need
> to call cache_sync() at some point to actually sync the cache.
>> > the register defaults are wrong or the
>> Our style is a little different, because it is a port from the
>> android, we will be change it later, before merging into the mainline
>> to be more convenient.
>> http://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1023
> Android is using the same kernel - there's no differences introduced by
> Android here.  If you're seeing differences they're driver quality
> issues (probably caused by not being mainline).
> Looking briefly at the code that android_init() function is just broken
> and should be removed, any missing control should be implemented in the
> driver.  The fill_cache() function looks suspect also - in general all
> the code peering directly into the register cache data structure smells
> bad.  You should have register defaults hard coded into the driver which
> reflect the chip defaults so when we reset we know that's where the chip
> is at.
> Another thing to check is that the registers in the chip aren't
> volatile, if the chip can change register values underneath the driver
> then obviously things might get confused.  Multiple copies of the same
> control are a common culprit.

Thanks, I'll post the patches, as soon as possible.

Leon Romanovsky | Independent Linux Consultant
        www.leon.nu | leon at leon.nu

More information about the Alsa-devel mailing list