ASoC: rt286: Restore default in probe
authorBard Liao <bardliao@realtek.com>
Thu, 9 Apr 2015 03:20:32 +0000 (11:20 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 9 Apr 2015 10:31:22 +0000 (11:31 +0100)
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>
sound/soc/codecs/rt286.c

index 842cfb9fa191697da9467c159dd90b26077d4e39..87af81b9e971f084a993562eb46472dd3665c0ab 100644 (file)
@@ -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;