ASoC: WM8990: Fix kcontrol's private value use in put callback
authorJarkko Nikula <jarkko.nikula@nokia.com>
Fri, 6 Feb 2009 10:01:05 +0000 (12:01 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 6 Feb 2009 11:39:28 +0000 (11:39 +0000)
Function wm899x_outpga_put_volsw_vu misuses the kcontrol's private value
by still accessing it as bitfields even SOC_SINGLE_VALUE constructs it
as a pointer into struct soc_mixer_control after the commit
4eaa9819dc08d7bfd1065ce530e31b18a119dcaf.

This is very similar fix than fix to TLV320AIC3X codec made by
Eero Nurkkala <ext-eero.nurkkala@nokia.com>. This fix is compile tested
only.

Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
Cc: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/wm8990.c

index 1cbb7b9b51ce07fd36b099426a5210dc2b4fce44..a5731faa150c4fdc6b838e5fc11f9cd801861c70 100644 (file)
@@ -176,7 +176,9 @@ static int wm899x_outpga_put_volsw_vu(struct snd_kcontrol *kcontrol,
        struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       int reg = kcontrol->private_value & 0xff;
+       struct soc_mixer_control *mc =
+               (struct soc_mixer_control *)kcontrol->private_value;
+       int reg = mc->reg;
        int ret;
        u16 val;