| From 48e3cbb3f67a27d9c2db075f3d0f700246c40caa Mon Sep 17 00:00:00 2001 |
| From: Eric Millbrandt <emillbrandt@dekaresearch.com> |
| Date: Tue, 22 Dec 2009 10:13:24 -0500 |
| Subject: ASoC: Do not write to invalid registers on the wm9712. |
| |
| From: Eric Millbrandt <emillbrandt@dekaresearch.com> |
| |
| 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> |
| |
| --- |
| sound/soc/codecs/wm9712.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/sound/soc/codecs/wm9712.c |
| +++ b/sound/soc/codecs/wm9712.c |
| @@ -464,7 +464,8 @@ static int ac97_write(struct snd_soc_cod |
| { |
| 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; |