mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 17:25:38 +00:00
ALSA: hda/realtek: Update ALC225 depop procedure
Old procedure has a chance to meet Headphone no output.
Fixes: da911b1f5e
("ALSA: hda/realtek - update ALC225 depop optimize")
Signed-off-by: Kailang Yang <kailang@realtek.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/5a27b016ba9d42b4a4e6dadce50a3ba4@realtek.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
31917b7bd8
commit
1fd50509fe
@ -3768,33 +3768,28 @@ static void alc225_init(struct hda_codec *codec)
|
||||
hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
|
||||
hp2_pin_sense = snd_hda_jack_detect(codec, 0x16);
|
||||
|
||||
if (hp1_pin_sense || hp2_pin_sense)
|
||||
if (hp1_pin_sense || hp2_pin_sense) {
|
||||
msleep(2);
|
||||
alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */
|
||||
|
||||
alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */
|
||||
if (hp1_pin_sense)
|
||||
snd_hda_codec_write(codec, hp_pin, 0,
|
||||
AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
|
||||
if (hp2_pin_sense)
|
||||
snd_hda_codec_write(codec, 0x16, 0,
|
||||
AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
|
||||
msleep(75);
|
||||
|
||||
if (hp1_pin_sense || spec->ultra_low_power)
|
||||
snd_hda_codec_write(codec, hp_pin, 0,
|
||||
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
|
||||
if (hp2_pin_sense)
|
||||
snd_hda_codec_write(codec, 0x16, 0,
|
||||
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
|
||||
if (hp1_pin_sense)
|
||||
snd_hda_codec_write(codec, hp_pin, 0,
|
||||
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
|
||||
if (hp2_pin_sense)
|
||||
snd_hda_codec_write(codec, 0x16, 0,
|
||||
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
|
||||
|
||||
if (hp1_pin_sense || hp2_pin_sense || spec->ultra_low_power)
|
||||
msleep(85);
|
||||
|
||||
if (hp1_pin_sense || spec->ultra_low_power)
|
||||
snd_hda_codec_write(codec, hp_pin, 0,
|
||||
AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
|
||||
if (hp2_pin_sense)
|
||||
snd_hda_codec_write(codec, 0x16, 0,
|
||||
AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
|
||||
|
||||
if (hp1_pin_sense || hp2_pin_sense || spec->ultra_low_power)
|
||||
msleep(100);
|
||||
|
||||
alc_update_coef_idx(codec, 0x4a, 3 << 10, 0);
|
||||
alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x4); /* Hight power */
|
||||
msleep(75);
|
||||
alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x4); /* Hight power */
|
||||
}
|
||||
}
|
||||
|
||||
static void alc225_shutup(struct hda_codec *codec)
|
||||
@ -3806,36 +3801,35 @@ static void alc225_shutup(struct hda_codec *codec)
|
||||
if (!hp_pin)
|
||||
hp_pin = 0x21;
|
||||
|
||||
alc_disable_headset_jack_key(codec);
|
||||
/* 3k pull low control for Headset jack. */
|
||||
alc_update_coef_idx(codec, 0x4a, 0, 3 << 10);
|
||||
|
||||
hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
|
||||
hp2_pin_sense = snd_hda_jack_detect(codec, 0x16);
|
||||
|
||||
if (hp1_pin_sense || hp2_pin_sense)
|
||||
if (hp1_pin_sense || hp2_pin_sense) {
|
||||
alc_disable_headset_jack_key(codec);
|
||||
/* 3k pull low control for Headset jack. */
|
||||
alc_update_coef_idx(codec, 0x4a, 0, 3 << 10);
|
||||
msleep(2);
|
||||
|
||||
if (hp1_pin_sense || spec->ultra_low_power)
|
||||
snd_hda_codec_write(codec, hp_pin, 0,
|
||||
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
|
||||
if (hp2_pin_sense)
|
||||
snd_hda_codec_write(codec, 0x16, 0,
|
||||
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
|
||||
if (hp1_pin_sense)
|
||||
snd_hda_codec_write(codec, hp_pin, 0,
|
||||
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
|
||||
if (hp2_pin_sense)
|
||||
snd_hda_codec_write(codec, 0x16, 0,
|
||||
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
|
||||
|
||||
if (hp1_pin_sense || hp2_pin_sense || spec->ultra_low_power)
|
||||
msleep(85);
|
||||
msleep(75);
|
||||
|
||||
if (hp1_pin_sense || spec->ultra_low_power)
|
||||
snd_hda_codec_write(codec, hp_pin, 0,
|
||||
AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
|
||||
if (hp2_pin_sense)
|
||||
snd_hda_codec_write(codec, 0x16, 0,
|
||||
AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
|
||||
|
||||
if (hp1_pin_sense || hp2_pin_sense || spec->ultra_low_power)
|
||||
msleep(100);
|
||||
if (hp1_pin_sense)
|
||||
snd_hda_codec_write(codec, hp_pin, 0,
|
||||
AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
|
||||
if (hp2_pin_sense)
|
||||
snd_hda_codec_write(codec, 0x16, 0,
|
||||
AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
|
||||
|
||||
msleep(75);
|
||||
alc_update_coef_idx(codec, 0x4a, 3 << 10, 0);
|
||||
alc_enable_headset_jack_key(codec);
|
||||
}
|
||||
alc_auto_setup_eapd(codec, false);
|
||||
alc_shutup_pins(codec);
|
||||
if (spec->ultra_low_power) {
|
||||
@ -3846,9 +3840,6 @@ static void alc225_shutup(struct hda_codec *codec)
|
||||
alc_update_coef_idx(codec, 0x4a, 3<<4, 2<<4);
|
||||
msleep(30);
|
||||
}
|
||||
|
||||
alc_update_coef_idx(codec, 0x4a, 3 << 10, 0);
|
||||
alc_enable_headset_jack_key(codec);
|
||||
}
|
||||
|
||||
static void alc_default_init(struct hda_codec *codec)
|
||||
|
Loading…
Reference in New Issue
Block a user