ALSA: emu10k1: fix non-zero mixer control defaults in highres mode
authorOswald Buddenhagen <oswald.buddenhagen@gmx.de>
Sun, 14 May 2023 17:03:18 +0000 (19:03 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 15 May 2023 20:06:18 +0000 (22:06 +0200)
The default value needs to be scaled.

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Link: https://lore.kernel.org/r/20230514170323.3408834-3-oswald.buddenhagen@gmx.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/emu10k1/emufx.c

index 43abb6c..fbc1bfc 100644 (file)
@@ -1116,18 +1116,19 @@ snd_emu10k1_init_mono_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
        ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
        strcpy(ctl->id.name, name);
        ctl->vcount = ctl->count = 1;
-       ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
        if (high_res_gpr_volume) {
                ctl->min = 0;
                ctl->max = 0x7fffffff;
                ctl->tlv = snd_emu10k1_db_linear;
                ctl->translation = EMU10K1_GPR_TRANSLATION_NONE;
+               defval = defval * 0x7fffffffLL / 100;
        } else {
                ctl->min = 0;
                ctl->max = 100;
                ctl->tlv = snd_emu10k1_db_scale1;
                ctl->translation = EMU10K1_GPR_TRANSLATION_TABLE100;
        }
+       ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
 }
 
 static void
@@ -1137,19 +1138,20 @@ snd_emu10k1_init_stereo_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
        ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
        strcpy(ctl->id.name, name);
        ctl->vcount = ctl->count = 2;
-       ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
-       ctl->gpr[1] = gpr + 1; ctl->value[1] = defval;
        if (high_res_gpr_volume) {
                ctl->min = 0;
                ctl->max = 0x7fffffff;
                ctl->tlv = snd_emu10k1_db_linear;
                ctl->translation = EMU10K1_GPR_TRANSLATION_NONE;
+               defval = defval * 0x7fffffffLL / 100;
        } else {
                ctl->min = 0;
                ctl->max = 100;
                ctl->tlv = snd_emu10k1_db_scale1;
                ctl->translation = EMU10K1_GPR_TRANSLATION_TABLE100;
        }
+       ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
+       ctl->gpr[1] = gpr + 1; ctl->value[1] = defval;
 }
 
 static void