summaryrefslogtreecommitdiffstats
path: root/sound/soc
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 /sound/soc
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>
Diffstat (limited to 'sound/soc')
-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;