Skip to content

Commit

Permalink
ASoC: dapm: Make sure to always update the DAPM graph in _put_volsw()
Browse files Browse the repository at this point in the history
When using auto-muted controls it may happen that the register value will not
change when changing a control from enabled to disabled (since the control might
be physically disabled due to the auto-muting). We have to make sure to still
update the DAPM graph and disconnect the mixer input.

Fixes: commit 5729507 ("ASoC: dapm: Implement mixer input auto-disable")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
  • Loading branch information
Lars-Peter Clausen authored and Mark Brown committed May 5, 2014
1 parent 00a41d9 commit c9e065c
Showing 1 changed file with 10 additions and 13 deletions.
23 changes: 10 additions & 13 deletions sound/soc/soc-dapm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2792,22 +2792,19 @@ 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 (reg != SND_SOC_NOPM) {
mask = mask << shift;
val = val << shift;

change = snd_soc_test_bits(codec, reg, mask, val);
}

if (change) {
if (reg != SND_SOC_NOPM) {
update.kcontrol = kcontrol;
update.reg = reg;
update.mask = mask;
update.val = val;
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;
}

card->update = &update;
}

ret = soc_dapm_mixer_update_power(card, kcontrol, connect);
Expand Down

0 comments on commit c9e065c

Please sign in to comment.