Skip to content

Commit

Permalink
ALSA: hda - Fix no sound from ALC662 after Windows reboot
Browse files Browse the repository at this point in the history
Windows use hidden register to control EAPD.
Linux use verb to control EAPD.
If windows reboot to Linux, it must change the EAPD control to verb
control.

Signed-off-by: Kailang Yang <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
KailangYang authored and tiwai committed Jun 29, 2012
1 parent c47ccb2 commit 8663ff7
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions sound/pci/hda/patch_realtek.c
Original file line number Diff line number Diff line change
Expand Up @@ -6688,6 +6688,31 @@ static const struct alc_model_fixup alc662_fixup_models[] = {
{}
};

static void alc662_fill_coef(struct hda_codec *codec)
{
int val, coef;

coef = alc_get_coef0(codec);

switch (codec->vendor_id) {
case 0x10ec0662:
if ((coef & 0x00f0) == 0x0030) {
val = alc_read_coef_idx(codec, 0x4); /* EAPD Ctrl */
alc_write_coef_idx(codec, 0x4, val & ~(1<<10));
}
break;
case 0x10ec0272:
case 0x10ec0273:
case 0x10ec0663:
case 0x10ec0665:
case 0x10ec0670:
case 0x10ec0671:
case 0x10ec0672:
val = alc_read_coef_idx(codec, 0xd); /* EAPD Ctrl */
alc_write_coef_idx(codec, 0xd, val | (1<<14));
break;
}
}

/*
*/
Expand All @@ -6707,6 +6732,9 @@ static int patch_alc662(struct hda_codec *codec)

alc_fix_pll_init(codec, 0x20, 0x04, 15);

spec->init_hook = alc662_fill_coef;
alc662_fill_coef(codec);

alc_pick_fixup(codec, alc662_fixup_models,
alc662_fixup_tbl, alc662_fixups);
alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
Expand Down

0 comments on commit 8663ff7

Please sign in to comment.