ASoC: tlv320aic3x: Remove unused version string
Subsystems (3)
PATCH 1/4 ASoC: tlv320aic3x: Remove unused version string
--- sound/soc/codecs/tlv320aic3x.c | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-)
sound/soc/codecs/tlv320aic3x.c +0 -2
@@ -50,8 +50,6 @@#include "tlv320aic3x.h" -#define AIC3X_VERSION "0.2" -/* codec private data */ struct aic3x_priv {struct snd_soc_codec codec;
Signature · 1 line
1.7.0
PATCH 2/4 ASoC: tlv320aic3x: Remove needless power off from aic3x_set_bias_level
These ADC, DAC and output pin power off commands are needless in aic3x_set_bias_level since they are not enabled in aic3x_init and they are defined in aic3x_dapm_widgets so the ASoC DAPM will take care of them anyway.
--- sound/soc/codecs/tlv320aic3x.c | 34 ---------------------------------- 1 files changed, 0 insertions(+), 34 deletions(-)
sound/soc/codecs/tlv320aic3x.c +0 -34
@@ -1013,41 +1013,7 @@ static int aic3x_set_bias_level(struct snd_soc_codec *codec,* all power is driven by DAPM system, * so output power is safe if bypass was set */ -if (aic3x->master) { -/* disable pll */ - reg =aic3x_read_reg_cache (codec,AIC3X_PLL_PROGA_REG ); -aic3x_write (codec,AIC3X_PLL_PROGA_REG , - reg & ~PLL_ENABLE ); - } -break ;case SND_SOC_BIAS_OFF : -/* force all power off */ - reg =aic3x_read_reg_cache (codec,LINE1L_2_LADC_CTRL ); -aic3x_write (codec,LINE1L_2_LADC_CTRL , reg & ~LADC_PWR_ON ); - reg =aic3x_read_reg_cache (codec,LINE1R_2_RADC_CTRL ); -aic3x_write (codec,LINE1R_2_RADC_CTRL , reg & ~RADC_PWR_ON ); - - reg =aic3x_read_reg_cache (codec,DAC_PWR ); -aic3x_write (codec,DAC_PWR , reg & ~(LDAC_PWR_ON |RDAC_PWR_ON )); - - reg =aic3x_read_reg_cache (codec,HPLOUT_CTRL ); -aic3x_write (codec,HPLOUT_CTRL , reg & ~HPLOUT_PWR_ON ); - reg =aic3x_read_reg_cache (codec,HPROUT_CTRL ); -aic3x_write (codec,HPROUT_CTRL , reg & ~HPROUT_PWR_ON ); - - reg =aic3x_read_reg_cache (codec,HPLCOM_CTRL ); -aic3x_write (codec,HPLCOM_CTRL , reg & ~HPLCOM_PWR_ON ); - reg =aic3x_read_reg_cache (codec,HPRCOM_CTRL ); -aic3x_write (codec,HPRCOM_CTRL , reg & ~HPRCOM_PWR_ON ); - - reg =aic3x_read_reg_cache (codec,MONOLOPM_CTRL ); -aic3x_write (codec,MONOLOPM_CTRL , reg & ~MONOLOPM_PWR_ON ); - - reg =aic3x_read_reg_cache (codec,LLOPM_CTRL ); -aic3x_write (codec,LLOPM_CTRL , reg & ~LLOPM_PWR_ON ); - reg =aic3x_read_reg_cache (codec,RLOPM_CTRL ); -aic3x_write (codec,RLOPM_CTRL , reg & ~RLOPM_PWR_ON ); -if (aic3x->master) {/* disable pll */ reg =aic3x_read_reg_cache (codec,AIC3X_PLL_PROGA_REG );
Signature · 1 line
1.7.0
PATCH 3/4 ASoC: tlv320aic3x: Change bias management semantics
In reply to Jarkko NikulaMove PLL enable from BIAS_ON state to BIAS_PREPARE to be pair with BIAS_STANDBY where PLL is disabled. Remove also old comments about power control.
--- sound/soc/codecs/tlv320aic3x.c | 10 +++------- 1 files changed, 3 insertions(+), 7 deletions(-)
sound/soc/codecs/tlv320aic3x.c +3 -7
@@ -998,7 +998,8 @@ static int aic3x_set_bias_level(struct snd_soc_codec *codec,switch (level) {case SND_SOC_BIAS_ON : -/* all power is driven by DAPM system */ +break ; +case SND_SOC_BIAS_PREPARE :if (aic3x->master) {/* enable pll */ reg =aic3x_read_reg_cache (codec,AIC3X_PLL_PROGA_REG );
@@ -1006,13 +1007,8 @@ static int aic3x_set_bias_level(struct snd_soc_codec *codec, reg | PLL_ENABLE); }break ; -case SND_SOC_BIAS_PREPARE : -break ;case SND_SOC_BIAS_STANDBY : -/* -* all power is driven by DAPM system, -* so output power is safe if bypass was set -*/ +/* fall through and disable pll */ case SND_SOC_BIAS_OFF :if (aic3x->master) {/* disable pll */
Signature · 1 line
1.7.0
PATCH 4/4 ASoC: tlv320aic3x: Add basic regulator support
In reply to Jarkko NikulaThis patch adds the TLV320AIC3x supplies and enables all of them for the entire lifetime of the device.
---
TODO:
In theory it should be possible to cut analogue powers of the codec while it is idle or suspended but experimenting with this showed that e.g. HP outputs were more silent after ramping up than they were before cutting the analogue powers.
It seems that some sort of workaround might be needed for recovering.
I don't have a hardware test with digital power domain gating so now all the supplies are grouped together and they are kept on always.
--- sound/soc/codecs/tlv320aic3x.c | 37 +++++++++++++++++++++++++++++++++++++ 1 files changed, 37 insertions(+), 0 deletions(-)
sound/soc/codecs/tlv320aic3x.c +37 -0
@@ -38,6 +38,7 @@#include <linux/delay.h> #include <linux/pm.h> #include <linux/i2c.h> +#include <linux/regulator/consumer.h> #include <linux/platform_device.h> #include <linux/slab.h> #include <sound/core.h>
@@ -50,9 +51,18 @@#include "tlv320aic3x.h" +#define AIC3X_NUM_SUPPLIES 4 +static const char *aic3x_supply_names[AIC3X_NUM_SUPPLIES ] = { +"IOVDD" ,/* I/O Voltage */ +"DVDD" ,/* Digital Core Voltage */ +"AVDD" ,/* Analog DAC Voltage */ +"DRVDD" ,/* ADC Analog and Output Driver Voltage */ +}; +/* codec private data */ struct aic3x_priv {struct snd_soc_codec codec; +struct regulator_bulk_data supplies[AIC3X_NUM_SUPPLIES ];unsigned int sysclk;int master; };
@@ -1269,6 +1279,9 @@ static int aic3x_unregister(struct aic3x_priv *aic3x)snd_soc_unregister_dai (&aic3x_dai);snd_soc_unregister_codec (&aic3x->codec); +regulator_bulk_disable (ARRAY_SIZE (aic3x->supplies), aic3x->supplies); +regulator_bulk_free (ARRAY_SIZE (aic3x->supplies), aic3x->supplies); +kfree (aic3x); aic3x_codec =NULL ;
@@ -1290,6 +1303,7 @@ static int aic3x_i2c_probe(struct i2c_client *i2c, {struct snd_soc_codec *codec;struct aic3x_priv *aic3x; +int ret, i; aic3x =kzalloc (sizeof (struct aic3x_priv ),GFP_KERNEL );if (aic3x ==NULL ) {
@@ -1305,7 +1319,30 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,i2c_set_clientdata (i2c, aic3x); +for (i =0 ; i <ARRAY_SIZE (aic3x->supplies); i++) + aic3x->supplies[i].supply = aic3x_supply_names[i]; + + ret =regulator_bulk_get (codec->dev,ARRAY_SIZE (aic3x->supplies), + aic3x->supplies); +if (ret !=0 ) { +dev_err (codec->dev,"Failed to request supplies: %d\n" , ret); + goto err_get; + } + + ret =regulator_bulk_enable (ARRAY_SIZE (aic3x->supplies), + aic3x->supplies); +if (ret !=0 ) { +dev_err (codec->dev,"Failed to enable supplies: %d\n" , ret); + goto err_enable; + } +return aic3x_register (codec); + +err_enable: +regulator_bulk_free (ARRAY_SIZE (aic3x->supplies), aic3x->supplies); +err_get: +kfree (aic3x); +return ret; }static int aic3x_i2c_remove (struct i2c_client *client)
Signature · 1 line
1.7.0
Quoted 1 line · Jarkko Nikula
Signed-off-by Jarkko Nikula <[email protected]>
All of these are
Quoted 4 lines · Jarkko Nikula
Signed-off-by Jarkko Nikula <[email protected]>--- sound/soc/codecs/tlv320aic3x.c | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-)
All applied.
Thanks
Liam
Signature · 3 lines
Freelance Developer, SlimLogic Ltd ASoC and Voltage Regulator Maintainer. http://www.slimlogic.co.uk