diff options
author | Takashi Iwai <tiwai@suse.de> | 2005-09-02 08:03:05 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2005-09-12 04:41:01 -0400 |
commit | a5022b0dc6e45254437b75289e773876bb43e262 (patch) | |
tree | d3ede798938b8745eea6b68936e3b0d6e2dfd449 /sound/pci/ac97/ac97_patch.c | |
parent | b73c1c122a097500e1c3dd495045432a1c818b92 (diff) |
[ALSA] Fix ALC658D support
AC97 Codec
Fix the internal speaker problem (e.g. Targa Traveller 826)
with ALC658D codec. The info is taken from Cyberlink/realtek-modified code.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/ac97/ac97_patch.c')
-rw-r--r-- | sound/pci/ac97/ac97_patch.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c index 0acf51dd4478..045ddc743edc 100644 --- a/sound/pci/ac97/ac97_patch.c +++ b/sound/pci/ac97/ac97_patch.c | |||
@@ -2134,7 +2134,13 @@ int patch_alc655(ac97_t * ac97) | |||
2134 | { | 2134 | { |
2135 | unsigned int val; | 2135 | unsigned int val; |
2136 | 2136 | ||
2137 | ac97->spec.dev_flags = (ac97->id == 0x414c4780); /* ALC658 */ | 2137 | if (ac97->id == AC97_ID_ALC658) { |
2138 | ac97->spec.dev_flags = 1; /* ALC658 */ | ||
2139 | if ((snd_ac97_read(ac97, AC97_ALC650_REVISION) & 0x3f) == 2) { | ||
2140 | ac97->id = AC97_ID_ALC658D; | ||
2141 | ac97->spec.dev_flags = 2; | ||
2142 | } | ||
2143 | } | ||
2138 | 2144 | ||
2139 | ac97->build_ops = &patch_alc655_ops; | 2145 | ac97->build_ops = &patch_alc655_ops; |
2140 | 2146 | ||
@@ -2143,7 +2149,7 @@ int patch_alc655(ac97_t * ac97) | |||
2143 | 2149 | ||
2144 | /* adjust default values */ | 2150 | /* adjust default values */ |
2145 | val = snd_ac97_read(ac97, 0x7a); /* misc control */ | 2151 | val = snd_ac97_read(ac97, 0x7a); /* misc control */ |
2146 | if (ac97->id == 0x414c4780) /* ALC658 */ | 2152 | if (ac97->spec.dev_flags) /* ALC658 */ |
2147 | val &= ~(1 << 1); /* Pin 47 is spdif input pin */ | 2153 | val &= ~(1 << 1); /* Pin 47 is spdif input pin */ |
2148 | else { /* ALC655 */ | 2154 | else { /* ALC655 */ |
2149 | if (ac97->subsystem_vendor == 0x1462 && | 2155 | if (ac97->subsystem_vendor == 0x1462 && |
@@ -2164,6 +2170,11 @@ int patch_alc655(ac97_t * ac97) | |||
2164 | /* full DAC volume */ | 2170 | /* full DAC volume */ |
2165 | snd_ac97_write_cache(ac97, AC97_ALC650_SURR_DAC_VOL, 0x0808); | 2171 | snd_ac97_write_cache(ac97, AC97_ALC650_SURR_DAC_VOL, 0x0808); |
2166 | snd_ac97_write_cache(ac97, AC97_ALC650_LFE_DAC_VOL, 0x0808); | 2172 | snd_ac97_write_cache(ac97, AC97_ALC650_LFE_DAC_VOL, 0x0808); |
2173 | |||
2174 | /* update undocumented bit... */ | ||
2175 | if (ac97->id == AC97_ID_ALC658D) | ||
2176 | snd_ac97_update_bits(ac97, 0x74, 0x0800, 0x0800); | ||
2177 | |||
2167 | return 0; | 2178 | return 0; |
2168 | } | 2179 | } |
2169 | 2180 | ||