mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 16:14:13 +08:00
ASoC: dapm: Make sure to always update the DAPM graph in _put_volsw()
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>
This commit is contained in:
parent
00a41d9fe2
commit
c9e065c27f
@ -2792,24 +2792,21 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
|
|||||||
mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
|
mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
|
||||||
|
|
||||||
change = dapm_kcontrol_set_value(kcontrol, val);
|
change = dapm_kcontrol_set_value(kcontrol, val);
|
||||||
|
if (change) {
|
||||||
if (reg != SND_SOC_NOPM) {
|
if (reg != SND_SOC_NOPM) {
|
||||||
mask = mask << shift;
|
mask = mask << shift;
|
||||||
val = val << shift;
|
val = val << shift;
|
||||||
|
|
||||||
change = snd_soc_test_bits(codec, reg, mask, val);
|
if (snd_soc_test_bits(codec, reg, mask, val)) {
|
||||||
}
|
|
||||||
|
|
||||||
if (change) {
|
|
||||||
if (reg != SND_SOC_NOPM) {
|
|
||||||
update.kcontrol = kcontrol;
|
update.kcontrol = kcontrol;
|
||||||
update.reg = reg;
|
update.reg = reg;
|
||||||
update.mask = mask;
|
update.mask = mask;
|
||||||
update.val = val;
|
update.val = val;
|
||||||
|
|
||||||
card->update = &update;
|
card->update = &update;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
ret = soc_dapm_mixer_update_power(card, kcontrol, connect);
|
ret = soc_dapm_mixer_update_power(card, kcontrol, connect);
|
||||||
|
|
||||||
card->update = NULL;
|
card->update = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user