diff options
author | Mark Brown <broonie@linaro.org> | 2014-06-21 21:33:18 +0100 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-06-21 21:33:18 +0100 |
commit | 647d62d9ff499ad3a2f8dc067aae3ed82386cf05 (patch) | |
tree | 6aebf9d7af162debaa3c4802d57c8187574218f6 /sound/soc/soc-dapm.c | |
parent | 7df3788410e674423375b88e2d95c46e4015f5f5 (diff) | |
parent | 18626c7ebc05e6486712cc129d8da83d07da9dc7 (diff) |
Merge remote-tracking branch 'asoc/fix/core' into asoc-component
Diffstat (limited to 'sound/soc/soc-dapm.c')
-rw-r--r-- | sound/soc/soc-dapm.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 3ccbf9ba04b2..fab1a8813abf 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -2762,7 +2762,7 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, unsigned int mask = (1 << fls(max)) - 1; unsigned int invert = mc->invert; unsigned int val; - int connect, change; + int connect, change, reg_change = 0; struct snd_soc_dapm_update update; int ret = 0; @@ -2780,20 +2780,23 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); change = dapm_kcontrol_set_value(kcontrol, val); - if (change) { - if (reg != SND_SOC_NOPM) { - mask = mask << shift; - val = val << shift; - - if (snd_soc_test_bits(codec, reg, mask, val)) { - update.kcontrol = kcontrol; - update.reg = reg; - update.mask = mask; - update.val = val; - card->update = &update; - } + if (reg != SND_SOC_NOPM) { + mask = mask << shift; + val = val << shift; + + reg_change = snd_soc_test_bits(codec, reg, mask, val); + } + + if (change || reg_change) { + if (reg_change) { + update.kcontrol = kcontrol; + update.reg = reg; + update.mask = mask; + update.val = val; + card->update = &update; } + change |= reg_change; ret = soc_dapm_mixer_update_power(card, kcontrol, connect); |