ASoC: Fix mask/val_mask confusion snd_soc_dapm_put_volsw()
snd_soc_dapm_put_volsw() has variables for both the unshifted and shifted mask for updates commit 97404f (ASoC: Do DAPM control updates in the middle of DAPM sequences) got confused between the two of these. Since there's no need to keep a copy of the unshifted mask fix this and simplify the code by using only one mask variable. [Completely rewrote the changelog to describe the issue -- broonie.] Signed-off-by: Stephen Warren <swarren@nvidia.com> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
0fa63b6928
commit
e9cf704933
@ -1742,7 +1742,7 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
|
||||
int max = mc->max;
|
||||
unsigned int mask = (1 << fls(max)) - 1;
|
||||
unsigned int invert = mc->invert;
|
||||
unsigned int val, val_mask;
|
||||
unsigned int val;
|
||||
int connect, change;
|
||||
struct snd_soc_dapm_update update;
|
||||
|
||||
@ -1750,13 +1750,13 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
|
||||
|
||||
if (invert)
|
||||
val = max - val;
|
||||
val_mask = mask << shift;
|
||||
mask = mask << shift;
|
||||
val = val << shift;
|
||||
|
||||
mutex_lock(&widget->codec->mutex);
|
||||
widget->value = val;
|
||||
|
||||
change = snd_soc_test_bits(widget->codec, reg, val_mask, val);
|
||||
change = snd_soc_test_bits(widget->codec, reg, mask, val);
|
||||
if (change) {
|
||||
if (val)
|
||||
/* new connection */
|
||||
|
Loading…
Reference in New Issue
Block a user