ASoC: Do not write to invalid registers on the wm9712.
authorEric Millbrandt <emillbrandt@dekaresearch.com>
Tue, 22 Dec 2009 15:13:24 +0000 (10:13 -0500)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 23 Dec 2009 15:20:56 +0000 (15:20 +0000)
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>
Cc: stable@kernel.org
sound/soc/codecs/wm9712.c

index 0ac1215dcd9b5e3140b4fa662d44c91f4ec8bc30..e237bf615129cb7e32799f85762842bd683898a4 100644 (file)
@@ -463,7 +463,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;