[alsa-devel] [PATCH 7/8] ASoC: tlv320aic3x: add initial usage of regulator framework to control avdd_dac

Eduardo Valentin eduardo.valentin at nokia.com
Thu Oct 8 15:17:07 CEST 2009


On Thu, Oct 08, 2009 at 02:17:07PM +0200, Nurkkala Eero.An (EXT-Offcode/Oulu) wrote:
> On Thu, 2009-10-08 at 13:58 +0200, Valentin Eduardo (Nokia-D/Helsinki)
> wrote:
> > From: Eduardo Valentin <eduardo.valentin at nokia.com>
> > 
> > This patch adds initial usage of regulator framework to control avdd_dac
> > inside tlv320aic3x ASoC codec driver.
> > 
> > The  refcount to avdd_dac is increased / decreased
> > only during probe and remove. Here it is still needed to implement
> > proper enable/disable regulator depending on chip usage. Now if driver
> > can get regulator for avdd_dac, then it will just let it on on probe
> > and then leave it off on remove.
> > 
> > Signed-off-by: Eduardo Valentin <eduardo.valentin at nokia.com>
> > ---
> >  sound/soc/codecs/tlv320aic3x.c |   26 ++++++++++++++++++++++++++
> >  1 files changed, 26 insertions(+), 0 deletions(-)
> > 
> > diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
> > index 3395cf9..82e0a64 100644
> > --- a/sound/soc/codecs/tlv320aic3x.c
> > +++ b/sound/soc/codecs/tlv320aic3x.c
> > @@ -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 <sound/core.h>
> >  #include <sound/pcm.h>
> > @@ -56,6 +57,7 @@ struct aic3x_priv {
> >  	struct snd_soc_codec codec;
> >  	unsigned int sysclk;
> >  	int master;
> > +	struct regulator *regulator;
> >  };
> >  
> >  /*
> > @@ -1286,6 +1288,11 @@ static int aic3x_unregister(struct aic3x_priv *aic3x)
> >  	snd_soc_unregister_dai(&aic3x_dai);
> >  	snd_soc_unregister_codec(&aic3x->codec);
> >  
> > +	if (aic3x->regulator) {
> > +		regulator_disable(aic3x->regulator);
> > +		regulator_put(aic3x->regulator);
> > +	}
> > +
> >  	kfree(aic3x);
> >  	aic3x_codec = NULL;
> >  
> > @@ -1320,6 +1327,25 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
> >  	codec->control_data = i2c;
> >  	codec->hw_write = (hw_write_t) i2c_master_send;
> >  
> > +	aic3x->regulator = regulator_get(&i2c->dev, "avdd_dac");
> > +	if (IS_ERR(aic3x->regulator)) {
> > +		dev_warn(&i2c->dev, "No regulator to supply avdd_dac."
> > +					" Assuming always on.\n");
> > +		aic3x->regulator = NULL;
> > +	}
> > +
> > +	/*
> > +	 * REVISIT: Need to add proper code to put into sleep mode
> > +	 * avdd_dac regulator. For now, just leave it on.
> > +	 */
> 
> Will this ever be revisited =) ? If so, I think there's going to be a
> jungle in finding the right spots - you need to remember the bypass
> paths also (bias is not on necessarily). Also, this is regulator thing
> is highly platform dependent, not aic3x related really at all, so is
> this the correct place... Just a thought, dont take it too seriously ;) 


Heheh.. no I don't take it too seriously, don't worry :-)

Actually I've discussed about it with Peter. Initially I wrote it
inside rx51 machine driver. But then, we agreed it is actually a
thing which must be controlled by the driver. The same way it is done
for TPA for instance.

Of course,  the presence of that regulator must not be a blocker for
the driver. As you can see, if the regulator can not be queried, the driver
will assume that it is always on.

I must agree with you, but would rephrase as: the presence of this regulator
is board specific, but controlling when it must be enabled/disabled is a role
for the driver, in this case, tlv320aic3x.

What do you think ?

> 
> > +	if (aic3x->regulator) {
> > +		int err;
> > +
> > +		err = regulator_enable(aic3x->regulator);
> > +		if (err < 0)
> > +			return err;
> > +	}
> > +
> >  	i2c_set_clientdata(i2c, aic3x);
> >  
> >  	return aic3x_register(codec);

-- 
Eduardo Valentin
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the Alsa-devel mailing list