[PATCH 0/2] ASoC: codecs: ES8326: Reducin powerconsumption and
We changed the configuration related to hibernation. and delete the REG_SUPPLY to cover mute issue.
Zhang Yi (2): ASoC: codecs: ES8326: Reducing power consumption ASoC: codecs: ES8326: Delete unused REG_SUPPLY
sound/soc/codecs/es8326.c | 42 ++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-)
For lower power consumption during hibernation, the configuration of es8326_suspend and es8326_remove will be adjusted. Adding es8326_i2c_shutdown and es8326_i2c_remove to cover different situations
Signed-off-by: Zhang Yi zhangyi@everest-semi.com --- sound/soc/codecs/es8326.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index 15289dadafea..5c89323035a2 100755 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -1072,12 +1072,13 @@ static int es8326_suspend(struct snd_soc_component *component) es8326->calibrated = false; regmap_write(es8326->regmap, ES8326_CLK_CTL, ES8326_CLK_OFF); regcache_cache_only(es8326->regmap, true); - regcache_mark_dirty(es8326->regmap);
/* reset register value to default */ regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x01); usleep_range(1000, 3000); regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x00); + + regcache_mark_dirty(es8326->regmap); return 0; }
@@ -1163,8 +1164,13 @@ static int es8326_set_jack(struct snd_soc_component *component,
static void es8326_remove(struct snd_soc_component *component) { + struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component); + es8326_disable_jack_detect(component); es8326_set_bias_level(component, SND_SOC_BIAS_OFF); + regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x01); + usleep_range(1000, 3000); + regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x00); }
static const struct snd_soc_component_driver soc_component_dev_es8326 = { @@ -1236,6 +1242,30 @@ static int es8326_i2c_probe(struct i2c_client *i2c) &es8326_dai, 1); }
+ +static void es8326_i2c_shutdown(struct i2c_client *i2c) +{ + struct snd_soc_component *component; + struct es8326_priv *es8326; + + dev_dbg(component->dev, "Enter into %s\n", __func__); + es8326 = i2c_get_clientdata(i2c); + component = es8326->component; + cancel_delayed_work_sync(&es8326->jack_detect_work); + cancel_delayed_work_sync(&es8326->button_press_work); + + regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x01); + usleep_range(1000, 3000); + regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x00); + + return; +} + +static void es8326_i2c_remove(struct i2c_client *i2c) +{ + es8326_i2c_shutdown(i2c); +} + static const struct i2c_device_id es8326_i2c_id[] = { {"es8326", 0 }, {} @@ -1265,6 +1295,8 @@ static struct i2c_driver es8326_i2c_driver = { .of_match_table = of_match_ptr(es8326_of_match), }, .probe = es8326_i2c_probe, + .shutdown = es8326_i2c_shutdown, + .remove = es8326_i2c_remove, .id_table = es8326_i2c_id, }; module_i2c_driver(es8326_i2c_driver);
On 3/20/2024 8:54 AM, Zhang Yi wrote:
For lower power consumption during hibernation, the configuration of es8326_suspend and es8326_remove will be adjusted. Adding es8326_i2c_shutdown and es8326_i2c_remove to cover different situations
Signed-off-by: Zhang Yi zhangyi@everest-semi.com
sound/soc/codecs/es8326.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index 15289dadafea..5c89323035a2 100755 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -1072,12 +1072,13 @@ static int es8326_suspend(struct snd_soc_component *component) es8326->calibrated = false; regmap_write(es8326->regmap, ES8326_CLK_CTL, ES8326_CLK_OFF); regcache_cache_only(es8326->regmap, true);
regcache_mark_dirty(es8326->regmap);
/* reset register value to default */ regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x01); usleep_range(1000, 3000); regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x00);
- regcache_mark_dirty(es8326->regmap); return 0; }
@@ -1163,8 +1164,13 @@ static int es8326_set_jack(struct snd_soc_component *component,
static void es8326_remove(struct snd_soc_component *component) {
struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component);
es8326_disable_jack_detect(component); es8326_set_bias_level(component, SND_SOC_BIAS_OFF);
regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x01);
usleep_range(1000, 3000);
regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x00); }
static const struct snd_soc_component_driver soc_component_dev_es8326 = {
@@ -1236,6 +1242,30 @@ static int es8326_i2c_probe(struct i2c_client *i2c) &es8326_dai, 1); }
+static void es8326_i2c_shutdown(struct i2c_client *i2c) +{
- struct snd_soc_component *component;
- struct es8326_priv *es8326;
- dev_dbg(component->dev, "Enter into %s\n", __func__);
Above line works on unset pointer, you need to set component before dereferencing it.
- es8326 = i2c_get_clientdata(i2c);
- component = es8326->component;
- cancel_delayed_work_sync(&es8326->jack_detect_work);
- cancel_delayed_work_sync(&es8326->button_press_work);
- regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x01);
- usleep_range(1000, 3000);
- regmap_write(es8326->regmap, ES8326_CSM_I2C_STA, 0x00);
- return;
+}
+static void es8326_i2c_remove(struct i2c_client *i2c) +{
- es8326_i2c_shutdown(i2c);
+}
- static const struct i2c_device_id es8326_i2c_id[] = { {"es8326", 0 }, {}
@@ -1265,6 +1295,8 @@ static struct i2c_driver es8326_i2c_driver = { .of_match_table = of_match_ptr(es8326_of_match), }, .probe = es8326_i2c_probe,
- .shutdown = es8326_i2c_shutdown,
- .remove = es8326_i2c_remove, .id_table = es8326_i2c_id, }; module_i2c_driver(es8326_i2c_driver);
REG_SUPPLY mutes the DAC when switching between HDMI and speaker, so remove it to fix the mute issues
Signed-off-by: Zhang Yi zhangyi@everest-semi.com --- sound/soc/codecs/es8326.c | 8 -------- 1 file changed, 8 deletions(-)
diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c index 5c89323035a2..5f6cef25ac5e 100755 --- a/sound/soc/codecs/es8326.c +++ b/sound/soc/codecs/es8326.c @@ -292,11 +292,6 @@ static const struct snd_soc_dapm_widget es8326_dapm_widgets[] = { SND_SOC_DAPM_PGA("LHPMIX", ES8326_DAC2HPMIX, 7, 0, NULL, 0), SND_SOC_DAPM_PGA("RHPMIX", ES8326_DAC2HPMIX, 3, 0, NULL, 0),
- SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOR Supply", ES8326_HP_CAL, - 4, 7, 0, 0), - SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOL Supply", ES8326_HP_CAL, - 0, 7, 0, 0), - SND_SOC_DAPM_OUTPUT("HPOL"), SND_SOC_DAPM_OUTPUT("HPOR"), }; @@ -316,9 +311,6 @@ static const struct snd_soc_dapm_route es8326_dapm_routes[] = { {"LHPMIX", NULL, "Left DAC"}, {"RHPMIX", NULL, "Right DAC"},
- {"HPOR", NULL, "HPOR Supply"}, - {"HPOL", NULL, "HPOL Supply"}, - {"HPOL", NULL, "LHPMIX"}, {"HPOR", NULL, "RHPMIX"}, };
participants (1)
-
Amadeusz Sławiński
-
Zhang Yi