mirror of https://gitee.com/openkylin/linux.git
[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>
This commit is contained in:
parent
b73c1c122a
commit
a5022b0dc6
|
@ -112,6 +112,7 @@ static const ac97_codec_id_t snd_ac97_codec_ids[] = {
|
|||
{ 0x414c4723, 0xffffffff, "ALC650F", NULL, NULL }, /* already patched */
|
||||
{ 0x414c4720, 0xfffffff0, "ALC650", patch_alc650, NULL },
|
||||
{ 0x414c4760, 0xfffffff0, "ALC655", patch_alc655, NULL },
|
||||
{ 0x414c4781, 0xffffffff, "ALC658D", NULL, NULL }, /* already patched */
|
||||
{ 0x414c4780, 0xfffffff0, "ALC658", patch_alc655, NULL },
|
||||
{ 0x414c4790, 0xfffffff0, "ALC850", patch_alc850, NULL },
|
||||
{ 0x414c4730, 0xffffffff, "ALC101", NULL, NULL },
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#define AC97_ID_ALC650F 0x414c4723
|
||||
#define AC97_ID_ALC655 0x414c4760
|
||||
#define AC97_ID_ALC658 0x414c4780
|
||||
#define AC97_ID_ALC658D 0x414c4781
|
||||
#define AC97_ID_ALC850 0x414c4790
|
||||
#define AC97_ID_YMF753 0x594d4803
|
||||
#define AC97_ID_VT1616 0x49434551
|
||||
|
|
|
@ -2134,7 +2134,13 @@ int patch_alc655(ac97_t * ac97)
|
|||
{
|
||||
unsigned int val;
|
||||
|
||||
ac97->spec.dev_flags = (ac97->id == 0x414c4780); /* ALC658 */
|
||||
if (ac97->id == AC97_ID_ALC658) {
|
||||
ac97->spec.dev_flags = 1; /* ALC658 */
|
||||
if ((snd_ac97_read(ac97, AC97_ALC650_REVISION) & 0x3f) == 2) {
|
||||
ac97->id = AC97_ID_ALC658D;
|
||||
ac97->spec.dev_flags = 2;
|
||||
}
|
||||
}
|
||||
|
||||
ac97->build_ops = &patch_alc655_ops;
|
||||
|
||||
|
@ -2143,7 +2149,7 @@ int patch_alc655(ac97_t * ac97)
|
|||
|
||||
/* adjust default values */
|
||||
val = snd_ac97_read(ac97, 0x7a); /* misc control */
|
||||
if (ac97->id == 0x414c4780) /* ALC658 */
|
||||
if (ac97->spec.dev_flags) /* ALC658 */
|
||||
val &= ~(1 << 1); /* Pin 47 is spdif input pin */
|
||||
else { /* ALC655 */
|
||||
if (ac97->subsystem_vendor == 0x1462 &&
|
||||
|
@ -2164,6 +2170,11 @@ int patch_alc655(ac97_t * ac97)
|
|||
/* full DAC volume */
|
||||
snd_ac97_write_cache(ac97, AC97_ALC650_SURR_DAC_VOL, 0x0808);
|
||||
snd_ac97_write_cache(ac97, AC97_ALC650_LFE_DAC_VOL, 0x0808);
|
||||
|
||||
/* update undocumented bit... */
|
||||
if (ac97->id == AC97_ID_ALC658D)
|
||||
snd_ac97_update_bits(ac97, 0x74, 0x0800, 0x0800);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue