diff options
| -rw-r--r-- | sound/soc/codecs/sgtl5000.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index c445a0794a27..c5c76ab8ccf1 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c | |||
| @@ -876,15 +876,26 @@ static int sgtl5000_pcm_hw_params(struct snd_pcm_substream *substream, | |||
| 876 | static int sgtl5000_set_bias_level(struct snd_soc_codec *codec, | 876 | static int sgtl5000_set_bias_level(struct snd_soc_codec *codec, |
| 877 | enum snd_soc_bias_level level) | 877 | enum snd_soc_bias_level level) |
| 878 | { | 878 | { |
| 879 | struct sgtl5000_priv *sgtl = snd_soc_codec_get_drvdata(codec); | ||
| 880 | int ret; | ||
| 881 | |||
| 879 | switch (level) { | 882 | switch (level) { |
| 880 | case SND_SOC_BIAS_ON: | 883 | case SND_SOC_BIAS_ON: |
| 881 | case SND_SOC_BIAS_PREPARE: | 884 | case SND_SOC_BIAS_PREPARE: |
| 882 | case SND_SOC_BIAS_STANDBY: | 885 | case SND_SOC_BIAS_STANDBY: |
| 886 | regcache_cache_only(sgtl->regmap, false); | ||
| 887 | ret = regcache_sync(sgtl->regmap); | ||
| 888 | if (ret) { | ||
| 889 | regcache_cache_only(sgtl->regmap, true); | ||
| 890 | return ret; | ||
| 891 | } | ||
| 892 | |||
| 883 | snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER, | 893 | snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER, |
| 884 | SGTL5000_REFTOP_POWERUP, | 894 | SGTL5000_REFTOP_POWERUP, |
| 885 | SGTL5000_REFTOP_POWERUP); | 895 | SGTL5000_REFTOP_POWERUP); |
| 886 | break; | 896 | break; |
| 887 | case SND_SOC_BIAS_OFF: | 897 | case SND_SOC_BIAS_OFF: |
| 898 | regcache_cache_only(sgtl->regmap, true); | ||
| 888 | snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER, | 899 | snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER, |
| 889 | SGTL5000_REFTOP_POWERUP, 0); | 900 | SGTL5000_REFTOP_POWERUP, 0); |
| 890 | break; | 901 | break; |
