| From 75306820248e26d15d84acf4e297b9fb27dd3bb2 Mon Sep 17 00:00:00 2001 |
| From: Mark Brown <broonie@linaro.org> |
| Date: Mon, 24 Feb 2014 11:59:14 +0900 |
| Subject: ASoC: da732x: Mark DC offset control registers volatile |
| |
| From: Mark Brown <broonie@linaro.org> |
| |
| commit 75306820248e26d15d84acf4e297b9fb27dd3bb2 upstream. |
| |
| 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. |
| |
| 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. |
| |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| Acked-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/soc/codecs/da732x.c | 12 ++++++++++++ |
| 1 file changed, 12 insertions(+) |
| |
| --- a/sound/soc/codecs/da732x.c |
| +++ b/sound/soc/codecs/da732x.c |
| @@ -1268,11 +1268,23 @@ static struct snd_soc_dai_driver da732x_ |
| }, |
| }; |
| |
| +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; |
| + } |
| +} |
| + |
| static const struct regmap_config da732x_regmap = { |
| .reg_bits = 8, |
| .val_bits = 8, |
| |
| .max_register = DA732X_MAX_REG, |
| + .volatile_reg = da732x_volatile, |
| .reg_defaults = da732x_reg_cache, |
| .num_reg_defaults = ARRAY_SIZE(da732x_reg_cache), |
| .cache_type = REGCACHE_RBTREE, |