gta01: asoc: fix lm4857 control
authorPaul Fertser <fercerpav@gmail.com>
Wed, 10 Jun 2009 11:39:38 +0000 (15:39 +0400)
committerNelson Castillo <arhuaco@freaks-unidos.net>
Wed, 10 Jun 2009 12:26:05 +0000 (09:26 -0300)
Commit 4eaa9819dc08d7bfd1065ce530e31b18a119dcaf changed semantics of
private_value member of kcontrol. This resulted in inability to control
amplifier and subsequently in very low output volume.

Tested-by: Johannes Schauer <josch@pyneo.org>
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
sound/soc/s3c24xx/neo1973_wm8753.c

index 2970305..3f170cb 100644 (file)
@@ -353,9 +353,11 @@ static void lm4857_write_regs(void)
 static int lm4857_get_reg(struct snd_kcontrol *kcontrol,
        struct snd_ctl_elem_value *ucontrol)
 {
-       int reg = kcontrol->private_value & 0xFF;
-       int shift = (kcontrol->private_value >> 8) & 0x0F;
-       int mask = (kcontrol->private_value >> 16) & 0xFF;
+       struct soc_mixer_control *mc =
+               (struct soc_mixer_control *)kcontrol->private_value;
+       int reg = mc->reg;
+       int shift = mc->shift;
+       int mask = mc->max;
 
        DBG("Entered %s\n", __func__);
 
@@ -366,9 +368,11 @@ static int lm4857_get_reg(struct snd_kcontrol *kcontrol,
 static int lm4857_set_reg(struct snd_kcontrol *kcontrol,
        struct snd_ctl_elem_value *ucontrol)
 {
-       int reg = kcontrol->private_value & 0xFF;
-       int shift = (kcontrol->private_value >> 8) & 0x0F;
-       int mask = (kcontrol->private_value >> 16) & 0xFF;
+       struct soc_mixer_control *mc =
+               (struct soc_mixer_control *)kcontrol->private_value;
+       int reg = mc->reg;
+       int shift = mc->shift;
+       int mask = mc->max;
 
        if (((lm4857_regs[reg] >> shift) & mask) ==
                ucontrol->value.integer.value[0])