diff options
author | Mark Brown <broonie@linaro.org> | 2014-06-16 11:05:15 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-06-16 11:05:15 -0400 |
commit | 1f84acd2dc21b7c3220256b71f7b25d254a3175b (patch) | |
tree | 9312d2212a1e308855cbfe9c2338a47d07fd1e36 /sound | |
parent | 7171511eaec5bf23fb06078f59784a3a0626b38f (diff) | |
parent | 18626c7ebc05e6486712cc129d8da83d07da9dc7 (diff) |
Merge remote-tracking branch 'asoc/fix/core' into asoc-linus
Diffstat (limited to 'sound')
-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 a74b9bf23d9f..cdc837ed144d 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c | |||
@@ -2755,7 +2755,7 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, | |||
2755 | unsigned int mask = (1 << fls(max)) - 1; | 2755 | unsigned int mask = (1 << fls(max)) - 1; |
2756 | unsigned int invert = mc->invert; | 2756 | unsigned int invert = mc->invert; |
2757 | unsigned int val; | 2757 | unsigned int val; |
2758 | int connect, change; | 2758 | int connect, change, reg_change = 0; |
2759 | struct snd_soc_dapm_update update; | 2759 | struct snd_soc_dapm_update update; |
2760 | int ret = 0; | 2760 | int ret = 0; |
2761 | 2761 | ||
@@ -2773,20 +2773,23 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, | |||
2773 | mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); | 2773 | mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); |
2774 | 2774 | ||
2775 | change = dapm_kcontrol_set_value(kcontrol, val); | 2775 | change = dapm_kcontrol_set_value(kcontrol, val); |
2776 | if (change) { | ||
2777 | if (reg != SND_SOC_NOPM) { | ||
2778 | mask = mask << shift; | ||
2779 | val = val << shift; | ||
2780 | |||
2781 | if (snd_soc_test_bits(codec, reg, mask, val)) { | ||
2782 | update.kcontrol = kcontrol; | ||
2783 | update.reg = reg; | ||
2784 | update.mask = mask; | ||
2785 | update.val = val; | ||
2786 | card->update = &update; | ||
2787 | } | ||
2788 | 2776 | ||
2777 | if (reg != SND_SOC_NOPM) { | ||
2778 | mask = mask << shift; | ||
2779 | val = val << shift; | ||
2780 | |||
2781 | reg_change = snd_soc_test_bits(codec, reg, mask, val); | ||
2782 | } | ||
2783 | |||
2784 | if (change || reg_change) { | ||
2785 | if (reg_change) { | ||
2786 | update.kcontrol = kcontrol; | ||
2787 | update.reg = reg; | ||
2788 | update.mask = mask; | ||
2789 | update.val = val; | ||
2790 | card->update = &update; | ||
2789 | } | 2791 | } |
2792 | change |= reg_change; | ||
2790 | 2793 | ||
2791 | ret = soc_dapm_mixer_update_power(card, kcontrol, connect); | 2794 | ret = soc_dapm_mixer_update_power(card, kcontrol, connect); |
2792 | 2795 | ||