ALSA: hda/realtek - Fix overridden device-specific initialization
The recent change to shuffle the codec initialization procedure for Realtek via commit607ca3bd22
("ALSA: hda/realtek - EAPD turn on later") caused the silent output on some machines. This change was supposed to be safe, but it isn't actually; some devices have quirk setups to override the EAPD via COEF or BTL in the additional verb table, which is applied at the beginning of snd_hda_gen_init(). And this EAPD setup is again overridden in alc_auto_init_amp(). For recovering from the regression, tell snd_hda_gen_init() not to apply the verbs there by a new flag, then apply the verbs in alc_init(). BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=204727 Fixes:607ca3bd22
("ALSA: hda/realtek - EAPD turn on later") Cc: <stable@vger.kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
333f31436d
commit
89781d0806
|
@ -6009,6 +6009,7 @@ int snd_hda_gen_init(struct hda_codec *codec)
|
|||
if (spec->init_hook)
|
||||
spec->init_hook(codec);
|
||||
|
||||
if (!spec->skip_verbs)
|
||||
snd_hda_apply_verbs(codec);
|
||||
|
||||
init_multi_out(codec);
|
||||
|
|
|
@ -243,6 +243,7 @@ struct hda_gen_spec {
|
|||
unsigned int indep_hp_enabled:1; /* independent HP enabled */
|
||||
unsigned int have_aamix_ctl:1;
|
||||
unsigned int hp_mic_jack_modes:1;
|
||||
unsigned int skip_verbs:1; /* don't apply verbs at snd_hda_gen_init() */
|
||||
|
||||
/* additional mute flags (only effective with auto_mute_via_amp=1) */
|
||||
u64 mute_bits;
|
||||
|
|
|
@ -837,9 +837,11 @@ static int alc_init(struct hda_codec *codec)
|
|||
if (spec->init_hook)
|
||||
spec->init_hook(codec);
|
||||
|
||||
spec->gen.skip_verbs = 1; /* applied in below */
|
||||
snd_hda_gen_init(codec);
|
||||
alc_fix_pll(codec);
|
||||
alc_auto_init_amp(codec, spec->init_amp);
|
||||
snd_hda_apply_verbs(codec); /* apply verbs here after own init */
|
||||
|
||||
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_INIT);
|
||||
|
||||
|
|
Loading…
Reference in New Issue