|
|
@@ -761,42 +761,17 @@ static int sgtl5000_pcm_hw_params(struct snd_pcm_substream *substream,
|
|
|
static int sgtl5000_set_bias_level(struct snd_soc_codec *codec,
|
|
|
enum snd_soc_bias_level level)
|
|
|
{
|
|
|
- int ret;
|
|
|
- struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
|
|
|
-
|
|
|
switch (level) {
|
|
|
case SND_SOC_BIAS_ON:
|
|
|
case SND_SOC_BIAS_PREPARE:
|
|
|
- break;
|
|
|
case SND_SOC_BIAS_STANDBY:
|
|
|
- if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) {
|
|
|
- ret = regulator_bulk_enable(
|
|
|
- sgtl5000->num_supplies,
|
|
|
- sgtl5000->supplies);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
- udelay(10);
|
|
|
-
|
|
|
- regcache_cache_only(sgtl5000->regmap, false);
|
|
|
-
|
|
|
- ret = regcache_sync(sgtl5000->regmap);
|
|
|
- if (ret != 0) {
|
|
|
- dev_err(codec->dev,
|
|
|
- "Failed to restore cache: %d\n", ret);
|
|
|
-
|
|
|
- regcache_cache_only(sgtl5000->regmap, true);
|
|
|
- regulator_bulk_disable(sgtl5000->num_supplies,
|
|
|
- sgtl5000->supplies);
|
|
|
-
|
|
|
- return ret;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
|
|
|
+ SGTL5000_REFTOP_POWERUP,
|
|
|
+ SGTL5000_REFTOP_POWERUP);
|
|
|
break;
|
|
|
case SND_SOC_BIAS_OFF:
|
|
|
- regcache_cache_only(sgtl5000->regmap, true);
|
|
|
- regulator_bulk_disable(sgtl5000->num_supplies,
|
|
|
- sgtl5000->supplies);
|
|
|
+ snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
|
|
|
+ SGTL5000_REFTOP_POWERUP, 0);
|
|
|
break;
|
|
|
}
|
|
|
|