On Tue, May 29, 2012 at 04:39:46PM +0530, MR.Swami.Reddy@ti.com wrote: > he below patch is a basic driver code for TI Isabelle audio codec. The > functionalities like headset detection, etc., will be included incrementally > in the up-coming patches. Overall this is very good, there's a few issues below but they're pretty minor and ought to be easy to fix. > Signed-off-by: Vishwas A Deshpande You should include signoffs from both of you - it's especailly important that whoever sends the mail signs it off from a legal point of view. > +/* codec private data */ > +struct isabelle_priv { > + struct regmap *regmap; > +}; If this is all you need then you should be able to use the newly introduced dev_get_regmap() to get the regmap back (other drivers should be being updated for this soon). > +/* > + * MICGAIN volume control: > + * from 0 to 30 dB in 1 dB steps > + */ > +static const DECLARE_TLV_DB_SCALE(mic_amp_tlv, 0, 100, 0); These comments are a bit on the verbose side... > + case SND_SOC_BIAS_STANDBY: > + if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) > + regcache_sync(isabelle->regmap); Nothing ever marks the cache as dirty so this'll never actually do anything. > +static int isabelle_resume(struct snd_soc_codec *codec) > +{ > + isabelle_set_bias_level(codec, SND_SOC_BIAS_STANDBY); > + isabelle_set_bias_level(codec, codec->dapm.suspend_bias_level); As with your previous driver there's no need to use suspend_bias_level the framework will ensure that you're in your idle state before it suspends. Indeed, since your driver sets idle_bias_off there's no need for these suspend and resume functions at all except possibly to invalidate the cache in the suspend. > +static int isabelle_remove(struct snd_soc_codec *codec) > +{ > + isabelle_set_bias_level(codec, SND_SOC_BIAS_OFF); > + return 0; > +} No need for this, your driver sets idle_bias_off so it'll be powered down before the driver is removed. > + isabelle->regmap = regmap_init_i2c(i2c, &isabelle_regmap_config); > + if (IS_ERR(isabelle->regmap)) { devm_regmap_init_i2c(). > +static const struct i2c_device_id isabelle_i2c_id[] = { > + { "isabelle", 0 }, > + { } > +}; > +MODULE_DEVICE_TABLE(i2c, isabelle_i2c_id); This should really include a list of part numbers - the general expecation people have is that they can just register the part number.