diff options
author | Petr Kulhavy <brain@jikos.cz> | 2016-10-03 16:40:48 +0200 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-10-04 05:23:07 +0200 |
commit | 8b0678dc914271e9ad4317fe82555ead92ce1cb9 (patch) | |
tree | 424bbb5884efb453c5dc5f9aafc2d727bfb083e8 /sound | |
parent | e54de7f555970915c3856e7709a7ff74d352f315 (diff) | |
download | lwn-8b0678dc914271e9ad4317fe82555ead92ce1cb9.tar.gz lwn-8b0678dc914271e9ad4317fe82555ead92ce1cb9.zip |
ASoC: tas571x: remove improper PDN signal usage in set_bias_level
The set_bias_level toggles the PDN signal when entering
SND_SOC_BIAS_STANDBY and SND_SOC_BIAS_OFF. However this has no effect and
actually breaks things down (tested with TAS5717) due to the following
reasons:
1) holding down PDN does not save power but holding down RST does
2) now hard mute via register 0x5 is implemented and therefore it is no
longer needed to toggle PDN to enter all channel shut down
3) in order to leave PDN it is required to toggle the RST signal (see
TAS5721 datasheet), which was not implemented
4) toggling PDN as implemented actually mutes PWMs and there is no audio
output (tested on TAS5717)
For these reasons remove the PDN signal toggling and just initialize it to
inactive in probe().
Signed-off-by: Petr Kulhavy <brain@jikos.cz>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/codecs/tas571x.c | 14 |
1 files changed, 0 insertions, 14 deletions
diff --git a/sound/soc/codecs/tas571x.c b/sound/soc/codecs/tas571x.c index 512b9e663e89..810369f687d7 100644 --- a/sound/soc/codecs/tas571x.c +++ b/sound/soc/codecs/tas571x.c @@ -341,20 +341,9 @@ static int tas571x_set_bias_level(struct snd_soc_codec *codec, return ret; } } - - gpiod_set_value(priv->pdn_gpio, 0); - usleep_range(5000, 6000); - - regcache_cache_only(priv->regmap, false); - ret = regcache_sync(priv->regmap); - if (ret) - return ret; } break; case SND_SOC_BIAS_OFF: - regcache_cache_only(priv->regmap, true); - gpiod_set_value(priv->pdn_gpio, 1); - if (!IS_ERR(priv->mclk)) clk_disable_unprepare(priv->mclk); break; @@ -771,9 +760,6 @@ static int tas571x_i2c_probe(struct i2c_client *client, return ret; } - regcache_cache_only(priv->regmap, true); - gpiod_set_value(priv->pdn_gpio, 1); - return snd_soc_register_codec(&client->dev, &priv->codec_driver, &tas571x_dai, 1); } |