aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/codecs/sgtl5000.c35
1 files changed, 5 insertions, 30 deletions
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index 0916bb46ccf2..39a178a88b36 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -761,42 +761,17 @@ static int sgtl5000_pcm_hw_params(struct snd_pcm_substream *substream,
761static int sgtl5000_set_bias_level(struct snd_soc_codec *codec, 761static int sgtl5000_set_bias_level(struct snd_soc_codec *codec,
762 enum snd_soc_bias_level level) 762 enum snd_soc_bias_level level)
763{ 763{
764 int ret;
765 struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
766
767 switch (level) { 764 switch (level) {
768 case SND_SOC_BIAS_ON: 765 case SND_SOC_BIAS_ON:
769 case SND_SOC_BIAS_PREPARE: 766 case SND_SOC_BIAS_PREPARE:
770 break;
771 case SND_SOC_BIAS_STANDBY: 767 case SND_SOC_BIAS_STANDBY:
772 if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) { 768 snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
773 ret = regulator_bulk_enable( 769 SGTL5000_REFTOP_POWERUP,
774 sgtl5000->num_supplies, 770 SGTL5000_REFTOP_POWERUP);
775 sgtl5000->supplies);
776 if (ret)
777 return ret;
778 udelay(10);
779
780 regcache_cache_only(sgtl5000->regmap, false);
781
782 ret = regcache_sync(sgtl5000->regmap);
783 if (ret != 0) {
784 dev_err(codec->dev,
785 "Failed to restore cache: %d\n", ret);
786
787 regcache_cache_only(sgtl5000->regmap, true);
788 regulator_bulk_disable(sgtl5000->num_supplies,
789 sgtl5000->supplies);
790
791 return ret;
792 }
793 }
794
795 break; 771 break;
796 case SND_SOC_BIAS_OFF: 772 case SND_SOC_BIAS_OFF:
797 regcache_cache_only(sgtl5000->regmap, true); 773 snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
798 regulator_bulk_disable(sgtl5000->num_supplies, 774 SGTL5000_REFTOP_POWERUP, 0);
799 sgtl5000->supplies);
800 break; 775 break;
801 } 776 }
802 777