summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Millbrandt <emillbrandt@dekaresearch.com>2009-12-22 10:13:24 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-01-06 14:26:17 -0800
commit637cd43cefe67a93f58a5147762ad66a556d0483 (patch)
treed4c733047e2d69a898f60797b59c492f988e5369
parentf3b8a699214d28f17c1ef8fd3c71cba7c33c3889 (diff)
ASoC: Do not write to invalid registers on the wm9712.
commit 48e3cbb3f67a27d9c2db075f3d0f700246c40caa upstream. This patch fixes a bug where "virtual" registers were being written to the ac97 bus. This was causing unrelated registers to become corrupted (headphone 0x04, touchscreen 0x78, etc). This patch duplicates protection that was included in the wm9713 driver. Signed-off-by: Eric Millbrandt <emillbrandt@dekaresearch.com> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--sound/soc/codecs/wm9712.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c
index 1fd4e88f50cf..e9123f54202d 100644
--- a/sound/soc/codecs/wm9712.c
+++ b/sound/soc/codecs/wm9712.c
@@ -464,7 +464,8 @@ static int ac97_write(struct snd_soc_codec *codec, unsigned int reg,
{
u16 *cache = codec->reg_cache;
- soc_ac97_ops.write(codec->ac97, reg, val);
+ if (reg < 0x7c)
+ soc_ac97_ops.write(codec->ac97, reg, val);
reg = reg >> 1;
if (reg < (ARRAY_SIZE(wm9712_reg)))
cache[reg] = val;