Merge remote-tracking branch 'asoc/fix/core' into asoc-linus
This commit is contained in:
commit
1f84acd2dc
1 changed files with 15 additions and 12 deletions
|
@ -2755,7 +2755,7 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
|
||||||
unsigned int mask = (1 << fls(max)) - 1;
|
unsigned int mask = (1 << fls(max)) - 1;
|
||||||
unsigned int invert = mc->invert;
|
unsigned int invert = mc->invert;
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
int connect, change;
|
int connect, change, reg_change = 0;
|
||||||
struct snd_soc_dapm_update update;
|
struct snd_soc_dapm_update update;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
@ -2773,20 +2773,23 @@ 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) {
|
|
||||||
mask = mask << shift;
|
|
||||||
val = val << shift;
|
|
||||||
|
|
||||||
if (snd_soc_test_bits(codec, reg, mask, val)) {
|
if (reg != SND_SOC_NOPM) {
|
||||||
update.kcontrol = kcontrol;
|
mask = mask << shift;
|
||||||
update.reg = reg;
|
val = val << shift;
|
||||||
update.mask = mask;
|
|
||||||
update.val = val;
|
|
||||||
card->update = &update;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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);
|
ret = soc_dapm_mixer_update_power(card, kcontrol, connect);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue