diff options
author | Ville Syrjala <syrjala@sci.fi> | 2006-09-04 06:28:24 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2006-09-23 04:45:48 -0400 |
commit | bd25b7cae1e763b292f359170e16bccd01c7ee5c (patch) | |
tree | ede5771f67361bb6d2e139c25e4e79d66fed4728 | |
parent | 93ed150375187ae7917ed1e3b9b830b9d4065bad (diff) |
[ALSA] ac97: Fix AD1819 volume range
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>
-rw-r--r-- | sound/pci/ac97/ac97_patch.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c index bdd7f89234f6..9be4ceb6838e 100644 --- a/sound/pci/ac97/ac97_patch.c +++ b/sound/pci/ac97/ac97_patch.c | |||
@@ -1395,6 +1395,17 @@ static void ad1888_resume(struct snd_ac97 *ac97) | |||
1395 | 1395 | ||
1396 | #endif | 1396 | #endif |
1397 | 1397 | ||
1398 | static const struct snd_ac97_res_table ad1819_restbl[] = { | ||
1399 | { AC97_PHONE, 0x9f1f }, | ||
1400 | { AC97_MIC, 0x9f1f }, | ||
1401 | { AC97_LINE, 0x9f1f }, | ||
1402 | { AC97_CD, 0x9f1f }, | ||
1403 | { AC97_VIDEO, 0x9f1f }, | ||
1404 | { AC97_AUX, 0x9f1f }, | ||
1405 | { AC97_PCM, 0x9f1f }, | ||
1406 | { } /* terminator */ | ||
1407 | }; | ||
1408 | |||
1398 | int patch_ad1819(struct snd_ac97 * ac97) | 1409 | int patch_ad1819(struct snd_ac97 * ac97) |
1399 | { | 1410 | { |
1400 | unsigned short scfg; | 1411 | unsigned short scfg; |
@@ -1402,6 +1413,7 @@ int patch_ad1819(struct snd_ac97 * ac97) | |||
1402 | // patch for Analog Devices | 1413 | // patch for Analog Devices |
1403 | scfg = snd_ac97_read(ac97, AC97_AD_SERIAL_CFG); | 1414 | scfg = snd_ac97_read(ac97, AC97_AD_SERIAL_CFG); |
1404 | snd_ac97_write_cache(ac97, AC97_AD_SERIAL_CFG, scfg | 0x7000); /* select all codecs */ | 1415 | snd_ac97_write_cache(ac97, AC97_AD_SERIAL_CFG, scfg | 0x7000); /* select all codecs */ |
1416 | ac97->res_table = ad1819_restbl; | ||
1405 | return 0; | 1417 | return 0; |
1406 | } | 1418 | } |
1407 | 1419 | ||