[PATCH 1/2] ASoC: codecs: ES8326: Reducing power consumption

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> > 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@xxxxxxxxxxxxxxxx>
> > ---
> > 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);

I'm sorry. I'll fix my mistake.



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux