Skip to content

Commit

Permalink
ALSA: hda/realtek: update ALC222 depop optimize
Browse files Browse the repository at this point in the history
Add ALC222 its own depop functions for alc_init and alc_shutup.

[note: this fixes pop noise issues on the models with two headphone
 jacks -- tiwai ]

Signed-off-by: Kailang Yang <kailang@realtek.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Kailang Yang authored and Takashi Iwai committed Mar 5, 2025
1 parent d0bbe33 commit ca0deda
Showing 1 changed file with 76 additions and 0 deletions.
76 changes: 76 additions & 0 deletions sound/pci/hda/patch_realtek.c
Original file line number Diff line number Diff line change
Expand Up @@ -3843,6 +3843,79 @@ static void alc225_shutup(struct hda_codec *codec)
}
}

static void alc222_init(struct hda_codec *codec)
{
struct alc_spec *spec = codec->spec;
hda_nid_t hp_pin = alc_get_hp_pin(spec);
bool hp1_pin_sense, hp2_pin_sense;

if (!hp_pin)
return;

msleep(30);

hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
hp2_pin_sense = snd_hda_jack_detect(codec, 0x14);

if (hp1_pin_sense || hp2_pin_sense) {
msleep(2);

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, 0x14, 0,
AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
msleep(75);

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, 0x14, 0,
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);

msleep(75);
}
}

static void alc222_shutup(struct hda_codec *codec)
{
struct alc_spec *spec = codec->spec;
hda_nid_t hp_pin = alc_get_hp_pin(spec);
bool hp1_pin_sense, hp2_pin_sense;

if (!hp_pin)
hp_pin = 0x21;

hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
hp2_pin_sense = snd_hda_jack_detect(codec, 0x14);

if (hp1_pin_sense || hp2_pin_sense) {
msleep(2);

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, 0x14, 0,
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);

msleep(75);

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, 0x14, 0,
AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);

msleep(75);
}
alc_auto_setup_eapd(codec, false);
alc_shutup_pins(codec);
}

static void alc_default_init(struct hda_codec *codec)
{
struct alc_spec *spec = codec->spec;
Expand Down Expand Up @@ -11907,8 +11980,11 @@ static int patch_alc269(struct hda_codec *codec)
spec->codec_variant = ALC269_TYPE_ALC300;
spec->gen.mixer_nid = 0; /* no loopback on ALC300 */
break;
case 0x10ec0222:
case 0x10ec0623:
spec->codec_variant = ALC269_TYPE_ALC623;
spec->shutup = alc222_shutup;
spec->init_hook = alc222_init;
break;
case 0x10ec0700:
case 0x10ec0701:
Expand Down

0 comments on commit ca0deda

Please sign in to comment.