summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Stezenbach2011-07-11 17:01:24 +0200
committerMark Brown2011-07-13 17:24:32 +0200
commit889ebae537f5cd3adfd149160b8092217de3cff0 (patch)
tree2a65978902a499f3bf62dc6a8c85c1ce03cced6c
parentASoC: STA32x: Add mixer controls for biquad coefficients (diff)
downloadkernel-qcow2-linux-889ebae537f5cd3adfd149160b8092217de3cff0.tar.gz
kernel-qcow2-linux-889ebae537f5cd3adfd149160b8092217de3cff0.tar.xz
kernel-qcow2-linux-889ebae537f5cd3adfd149160b8092217de3cff0.zip
ASoC: STA32x: Preserve reserved register bits
Chip documentation explicitly requires that the reset values of reserved register bits are left untouched. It is possible there are differences between STA326 and STA328 or future chip revisions in these bits, and clobbering them might cause malfunction. Signed-off-by: Johannes Stezenbach <js@sig21.net> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r--sound/soc/codecs/sta32x.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/sound/soc/codecs/sta32x.c b/sound/soc/codecs/sta32x.c
index 9bf944ca43a1..409d89d1f34c 100644
--- a/sound/soc/codecs/sta32x.c
+++ b/sound/soc/codecs/sta32x.c
@@ -756,6 +756,22 @@ static int sta32x_probe(struct snd_soc_codec *codec)
for (i = 0; i < STA32X_REGISTER_COUNT; i++)
snd_soc_cache_write(codec, i, sta32x_regs[i]);
+ /* preserve reset values of reserved register bits */
+ snd_soc_cache_write(codec, STA32X_CONFC,
+ codec->hw_read(codec, STA32X_CONFC));
+ snd_soc_cache_write(codec, STA32X_CONFE,
+ codec->hw_read(codec, STA32X_CONFE));
+ snd_soc_cache_write(codec, STA32X_CONFF,
+ codec->hw_read(codec, STA32X_CONFF));
+ snd_soc_cache_write(codec, STA32X_MMUTE,
+ codec->hw_read(codec, STA32X_MMUTE));
+ snd_soc_cache_write(codec, STA32X_AUTO1,
+ codec->hw_read(codec, STA32X_AUTO1));
+ snd_soc_cache_write(codec, STA32X_AUTO3,
+ codec->hw_read(codec, STA32X_AUTO3));
+ snd_soc_cache_write(codec, STA32X_C3CFG,
+ codec->hw_read(codec, STA32X_C3CFG));
+
/* FIXME enable thermal warning adjustment and recovery */
snd_soc_update_bits(codec, STA32X_CONFA,
STA32X_CONFA_TWAB | STA32X_CONFA_TWRB, 0);