On Mon, 24 Feb 2014 03:01:37 +0000, Mark Brown wrote: > From: Mark Brown <broonie@xxxxxxxxxx> > > The driver reads from the DC offset control registers during callibration > but since the registers are marked as volatile and there is a register > cache the values will not be read from the hardware after the first reading > rendering the callibration ineffective. Guessing that should read 'not marked as volatile'. > It appears that the driver was originally written for the ASoC level > register I/O code but converted to regmap prior to merge and this issue > was missed during the conversion as the framework level volatile register > functionality was not being used. Yes you're correct here, unfortunately. A good spot. > +static bool da732x_volatile(struct device *dev, unsigned int reg) > +{ > + switch (reg) { > + case DA732X_REG_HPL_DAC_OFF_CNTL: > + case DA732X_REG_HPR_DAC_OFF_CNTL: > + return true; > + default: > + return false; > + } > +} > + Having looked over the driver again, can you include the following registers as well: DA732X_REG_HPL DA732X_REG_HPR Also, if we're doing this then you can move to using snd_soc_read() instead of hw_read(), I guess. ��.n��������+%������w��{.n�����������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f