diff options
| -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 | ||
