Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9cf7049 authored by Stephen Warren's avatar Stephen Warren Committed by Mark Brown
Browse files

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: default avatarStephen Warren <swarren@nvidia.com>
Acked-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 0fa63b69
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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 */