summaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm8903.c
diff options
context:
space:
mode:
authorMark Brown2011-12-02 19:23:37 +0100
committerMark Brown2011-12-03 11:59:45 +0100
commit45e967553f3466f773ecd418c09fe92b753f18b0 (patch)
tree6b82204d900297b27229bc01be40cc394d215665 /sound/soc/codecs/wm8903.c
parentASoC: WM8903 only supports I2C so don't ifdef it (diff)
downloadkernel-qcow2-linux-45e967553f3466f773ecd418c09fe92b753f18b0.tar.gz
kernel-qcow2-linux-45e967553f3466f773ecd418c09fe92b753f18b0.tar.xz
kernel-qcow2-linux-45e967553f3466f773ecd418c09fe92b753f18b0.zip
ASoC: Use a normal cache sync for WM8903
The driver used to use a complicated method to sync the register cache after having brought the bias level up to standby in resume due to the use of the write sequencer to manage the initial power up. Now that we don't use the write sequencer there is no need for this and we can just use snd_soc_cache_sync() directly. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Tested-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'sound/soc/codecs/wm8903.c')
-rw-r--r--sound/soc/codecs/wm8903.c18
1 files changed, 3 insertions, 15 deletions
diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c
index 745681258eda..fdc3ff053f98 100644
--- a/sound/soc/codecs/wm8903.c
+++ b/sound/soc/codecs/wm8903.c
@@ -1767,23 +1767,11 @@ static int wm8903_suspend(struct snd_soc_codec *codec)
static int wm8903_resume(struct snd_soc_codec *codec)
{
- int i;
- u16 *reg_cache = codec->reg_cache;
- u16 *tmp_cache = kmemdup(reg_cache, sizeof(wm8903_reg_defaults),
- GFP_KERNEL);
+ struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
- /* Bring the codec back up to standby first to minimise pop/clicks */
- wm8903_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+ snd_soc_cache_sync(codec);
- /* Sync back everything else */
- if (tmp_cache) {
- for (i = 2; i < ARRAY_SIZE(wm8903_reg_defaults); i++)
- if (tmp_cache[i] != reg_cache[i])
- snd_soc_write(codec, i, tmp_cache[i]);
- kfree(tmp_cache);
- } else {
- dev_err(codec->dev, "Failed to allocate temporary cache\n");
- }
+ wm8903_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
return 0;
}