Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5022b0d authored by Takashi Iwai's avatar Takashi Iwai Committed by Jaroslav Kysela
Browse files

[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: default avatarTakashi Iwai <tiwai@suse.de>
parent b73c1c12
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 },
+1 −0
Original line number Diff line number Diff line
@@ -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
+13 −2
Original line number Diff line number Diff line
@@ -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;
}