On Fri, Jul 03, 2009 at 01:04:16AM +0200, Lars-Peter Clausen wrote: > The register cache size is of by one. There are 63 registers in use but the > register cache size has only space for 62. > Furthermore the codec's reg_cache_size is of by another one. Since the wm8753 > register cache uses one-based indexing we have to add one to its size.
As discussed in reply to your posting on lkml only 62 of the registers are cached so the adjustments in cache size would appear to be incorrect. > Register cache initialization only copied the first sizeof(void*) elements > leaving the others uninitialized. Fix it by using the size of the reg cache > template. I've published a fix for this one, see below. > This could be related to the 'heisenbug' reported in > http://docs.openmoko.org/trac/ticket/1172 No, that predates the change in the driver by a very long time. commit 1df892cba45f9856d369a6a317ad2d1e44bca423 Author: Mark Brown <[email protected]> Date: Fri Jul 3 10:33:39 2009 +0100 ASoC: Fix register cache initialisation for WM8753 The wrong register cache variable was being used to provide the size for the memcpy(), resulting in a copy of only a void * of data. Reported-by: Lars-Peter Clausen <[email protected]> Signed-off-by: Mark Brown <[email protected]> Cc: [email protected] diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c index d28eeac..e06b0cf 100644 --- a/sound/soc/codecs/wm8753.c +++ b/sound/soc/codecs/wm8753.c @@ -1664,7 +1664,7 @@ static int wm8753_register(struct wm8753_priv *wm8753) codec->reg_cache = &wm8753->reg_cache; codec->private_data = wm8753; - memcpy(codec->reg_cache, wm8753_reg, sizeof(codec->reg_cache)); + memcpy(codec->reg_cache, wm8753_reg, sizeof(wm8753->reg_cache)); INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work); ret = wm8753_reset(codec);
