[ALSA] ac97: Fix AD1819 volume range
authorVille Syrjala <syrjala@sci.fi>
Mon, 4 Sep 2006 10:28:24 +0000 (12:28 +0200)
committerJaroslav Kysela <perex@suse.cz>
Sat, 23 Sep 2006 08:45:48 +0000 (10:45 +0200)
AD1819 volume registers can hold extra bits which do not affect the
actual volume. Add a res_table to the codec patch to fix the problem.
PCM, line and mic volume were tested.

Signed-off-by: Ville Syrjala <syrjala@sci.fi>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/ac97/ac97_patch.c

index bdd7f89..9be4ceb 100644 (file)
@@ -1395,6 +1395,17 @@ static void ad1888_resume(struct snd_ac97 *ac97)
 
 #endif
 
+static const struct snd_ac97_res_table ad1819_restbl[] = {
+       { AC97_PHONE, 0x9f1f },
+       { AC97_MIC, 0x9f1f },
+       { AC97_LINE, 0x9f1f },
+       { AC97_CD, 0x9f1f },
+       { AC97_VIDEO, 0x9f1f },
+       { AC97_AUX, 0x9f1f },
+       { AC97_PCM, 0x9f1f },
+       { } /* terminator */
+};
+
 int patch_ad1819(struct snd_ac97 * ac97)
 {
        unsigned short scfg;
@@ -1402,6 +1413,7 @@ int patch_ad1819(struct snd_ac97 * ac97)
        // patch for Analog Devices
        scfg = snd_ac97_read(ac97, AC97_AD_SERIAL_CFG);
        snd_ac97_write_cache(ac97, AC97_AD_SERIAL_CFG, scfg | 0x7000); /* select all codecs */
+       ac97->res_table = ad1819_restbl;
        return 0;
 }