Skip to content

Commit

Permalink
ASoC: dapm: Fix snd_soc_dapm_put_volsw() connect
Browse files Browse the repository at this point in the history
snd_soc_dapm_put_volsw() sets connect incorrectly in the case max > 1 with
invert. In that case, the raw disconnect value should be max, which corresponds
to the userspace value 0.

This use case currently does not appear upstream, but it could break
SOC_DAPM_SINGLE() or SOC_DAPM_SINGLE_TLV() elsewhere or in the future.

Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Benoît Thébaudeau authored and Mark Brown committed Jun 29, 2012
1 parent adf643a commit 8a72071
Showing 1 changed file with 1 addition and 7 deletions.
8 changes: 1 addition & 7 deletions sound/soc/soc-dapm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2515,19 +2515,13 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
int wi;

val = (ucontrol->value.integer.value[0] & mask);
connect = !!val;

if (invert)
val = max - val;
mask = mask << shift;
val = val << shift;

if (val)
/* new connection */
connect = invert ? 0 : 1;
else
/* old connection must be powered down */
connect = invert ? 1 : 0;

mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);

change = snd_soc_test_bits(widget->codec, reg, mask, val);
Expand Down

0 comments on commit 8a72071

Please sign in to comment.