Unverified Commit 39938bb1 authored by Zhang Yi's avatar Zhang Yi Committed by Mark Brown
Browse files

ASoC: codecs: ES8326: Reducing power consumption



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: default avatarZhang Yi <zhangyi@everest-semi.com>
Link: https://msgid.link/r/20240320083012.4282-2-zhangyi@everest-semi.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 4cece764
Loading
Loading
Loading
Loading
+32 −1
Original line number Diff line number Diff line
@@ -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,29 @@ 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;

	es8326 = i2c_get_clientdata(i2c);
	component = es8326->component;
	dev_dbg(component->dev, "Enter into %s\n", __func__);
	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);

}

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 +1294,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);