diff options
author | Axel Lin <axel.lin@gmail.com> | 2011-10-07 09:50:23 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-10-10 05:29:58 -0400 |
commit | bc45df2dd98cfd550f674c494965f0015d5f923e (patch) | |
tree | bae126654628523436d634d640fa0b68c3d24bbf /sound/soc/codecs/wm8960.c | |
parent | 788b6e8efa052ab13fb6b9d957fbaf8e331008f9 (diff) |
ASoC: wm8960: Convert to snd_soc_cache_sync
Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/wm8960.c')
-rw-r--r-- | sound/soc/codecs/wm8960.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c index 831c20f89778..2df253c18568 100644 --- a/sound/soc/codecs/wm8960.c +++ b/sound/soc/codecs/wm8960.c | |||
@@ -574,6 +574,8 @@ static int wm8960_set_bias_level_out3(struct snd_soc_codec *codec, | |||
574 | 574 | ||
575 | case SND_SOC_BIAS_STANDBY: | 575 | case SND_SOC_BIAS_STANDBY: |
576 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { | 576 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
577 | snd_soc_cache_sync(codec); | ||
578 | |||
577 | /* Enable anti-pop features */ | 579 | /* Enable anti-pop features */ |
578 | snd_soc_write(codec, WM8960_APOP1, | 580 | snd_soc_write(codec, WM8960_APOP1, |
579 | WM8960_POBCTRL | WM8960_SOFT_ST | | 581 | WM8960_POBCTRL | WM8960_SOFT_ST | |
@@ -676,6 +678,9 @@ static int wm8960_set_bias_level_capless(struct snd_soc_codec *codec, | |||
676 | WM8960_VREF | WM8960_VMID_MASK, 0); | 678 | WM8960_VREF | WM8960_VMID_MASK, 0); |
677 | break; | 679 | break; |
678 | 680 | ||
681 | case SND_SOC_BIAS_OFF: | ||
682 | snd_soc_cache_sync(codec); | ||
683 | break; | ||
679 | default: | 684 | default: |
680 | break; | 685 | break; |
681 | } | 686 | } |
@@ -901,16 +906,6 @@ static int wm8960_suspend(struct snd_soc_codec *codec, pm_message_t state) | |||
901 | static int wm8960_resume(struct snd_soc_codec *codec) | 906 | static int wm8960_resume(struct snd_soc_codec *codec) |
902 | { | 907 | { |
903 | struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); | 908 | struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); |
904 | int i; | ||
905 | u8 data[2]; | ||
906 | u16 *cache = codec->reg_cache; | ||
907 | |||
908 | /* Sync reg_cache with the hardware */ | ||
909 | for (i = 0; i < ARRAY_SIZE(wm8960_reg); i++) { | ||
910 | data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001); | ||
911 | data[1] = cache[i] & 0x00ff; | ||
912 | codec->hw_write(codec->control_data, data, 2); | ||
913 | } | ||
914 | 909 | ||
915 | wm8960->set_bias_level(codec, SND_SOC_BIAS_STANDBY); | 910 | wm8960->set_bias_level(codec, SND_SOC_BIAS_STANDBY); |
916 | return 0; | 911 | return 0; |