summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBard Liao <bardliao@realtek.com>2015-04-09 05:20:32 +0200
committerMark Brown <broonie@kernel.org>2015-04-09 12:31:22 +0200
commitd53d59ecad74f3e90c6eefedd2186abbadd64d7c (patch)
treec077ea3e27c0d85f072745d7ed9782d406dbe631
parentASoC: rt286: check regmap_read result for ID check (diff)
downloadlinux-d53d59ecad74f3e90c6eefedd2186abbadd64d7c.tar.xz
linux-d53d59ecad74f3e90c6eefedd2186abbadd64d7c.zip
ASoC: rt286: Restore default in probe
RT286 can't do register reset. If the hardware power is still existing in power off, rt286 will keep the register settings. So, we need to restore the default register value in probe to make sure the cache value is the same as the real register value. Signed-off-by: Bard Liao <bardliao@realtek.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/codecs/rt286.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sound/soc/codecs/rt286.c b/sound/soc/codecs/rt286.c
index 842cfb9fa191..87af81b9e971 100644
--- a/sound/soc/codecs/rt286.c
+++ b/sound/soc/codecs/rt286.c
@@ -1250,6 +1250,14 @@ static int rt286_i2c_probe(struct i2c_client *i2c,
rt286->i2c = i2c;
i2c_set_clientdata(i2c, rt286);
+ /* restore codec default */
+ for (i = 0; i < INDEX_CACHE_SIZE; i++)
+ regmap_write(rt286->regmap, rt286->index_cache[i].reg,
+ rt286->index_cache[i].def);
+ for (i = 0; i < ARRAY_SIZE(rt286_reg); i++)
+ regmap_write(rt286->regmap, rt286_reg[i].reg,
+ rt286_reg[i].def);
+
if (pdata)
rt286->pdata = *pdata;