Re: [PATCH] ALSA: hda/realtek: Enable rear line-out pins on MSI EC79 (ALCS1200A)
From: Takashi Iwai
Date: Tue Mar 17 2026 - 05:03:47 EST
On Tue, 17 Mar 2026 09:57:39 +0100,
James wrote:
>
>
> Hello,
> alsa-info output attached (--no-upload). Note: this was captured after
> applying a userspace workaround that
> forces pin-ctls=0x40 (PIN_OUT) on NID 0x14. Let me know if you'd prefer a
> capture from a clean boot state.
Yes, please give the clean state, too.
thanks,
Takashi
> Thanks,
> Signed-off-by: James Waschbisch <james@xxxxxxxxxx>
>
> On Mon, Mar 16, 2026, at 12:08 PM, Takashi Iwai wrote:
>
> On Sun, 15 Mar 2026 11:19:50 +0100,
> James Waschbisch wrote:
> >
> > On MSI systems with subsystem ID 1462:ec79 using the Realtek ALCS1200A
> > codec, the rear line-out pins (0x14, 0x15, 0x16) are parsed as line
> > outputs but do not come up with active pin widget control after boot.
> > This leaves analog output on the rear jacks unavailable until userspace
> > manually reprograms the codec.
> >
> > Add a board-specific fixup that disables line-out/speaker automute and
> > forces pins 0x14, 0x15, and 0x16 to PIN_OUT during HDA_FIXUP_ACT_INIT,
> > while also clearing the output amp mute on those nodes.
> >
> > Tested-on: MSI X570 Gaming Pro WiFi (1462:ec79, ALCS1200A)
> >
> > Signed-off-by: James Waschbisch <james@xxxxxxxxxx>
>
> When this kind of changes like the manual amp updates or pin control
> fiddling are needed, usually something else is missing.
> Could you give alsa-info.sh output for further investigation?
> Run the script with --no-upload option and attach the output.
>
> thanks,
>
> Takashi
>
> > ---
> > sound/hda/codecs/realtek/alc882.c | 38 +++++++++++++++++++++++++++++++
> > 1 file changed, 38 insertions(+)
> >
> > diff --git a/sound/hda/codecs/realtek/alc882.c b/sound/hda/codecs/
> realtek/alc882.c
> > index 529fecd5b..2bf266a25 100644
> > --- a/sound/hda/codecs/realtek/alc882.c
> > +++ b/sound/hda/codecs/realtek/alc882.c
> > @@ -60,6 +60,7 @@ enum {
> > ALC887_FIXUP_ASUS_AUDIO,
> > ALC887_FIXUP_ASUS_HMIC,
> > ALCS1200A_FIXUP_MIC_VREF,
> > + ALCS1200A_FIXUP_MSI_EC79,
> > ALC888VD_FIXUP_MIC_100VREF,
> > };
> >
> > @@ -261,6 +262,36 @@ static void alc887_fixup_asus_jack(struct hda_codec
> *codec,
> > spec->gen.hp_automute_hook = alc887_asus_hp_automute_hook;
> > }
> >
> > +static void alcs1200a_fixup_msi_ec79(struct hda_codec *codec,
> > + const struct hda_fixup *fix, int action)
> > +{
> > + struct alc_spec *spec = codec->spec;
> > +
> > + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
> > + spec->gen.automute_lo = 0;
> > + spec->gen.automute_speaker = 0;
> > + return;
> > + }
> > +
> > + if (action != HDA_FIXUP_ACT_INIT)
> > + return;
> > +
> > + /* Front / Surround / CLFE line-out pins */
> > + snd_hda_set_pin_ctl(codec, 0x14, PIN_OUT);
> > + snd_hda_set_pin_ctl(codec, 0x15, PIN_OUT);
> > + snd_hda_set_pin_ctl(codec, 0x16, PIN_OUT);
> > +
> > + /* Unmute both output amp channels on all three pins */
> > + snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0, 0x80, 0);
> > + snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0, 0x80, 0);
> > +
> > + snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0, 0x80, 0);
> > + snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0, 0x80, 0);
> > +
> > + snd_hda_codec_amp_update(codec, 0x16, 0, HDA_OUTPUT, 0, 0x80, 0);
> > + snd_hda_codec_amp_update(codec, 0x16, 1, HDA_OUTPUT, 0, 0x80, 0);
> > +}
> > +
> > static const struct hda_fixup alc882_fixups[] = {
> > [ALC882_FIXUP_ABIT_AW9D_MAX] = {
> > .type = HDA_FIXUP_PINS,
> > @@ -553,6 +584,12 @@ static const struct hda_fixup alc882_fixups[] = {
> > {}
> > }
> > },
> > + [ALCS1200A_FIXUP_MSI_EC79] = {
> > + .type = HDA_FIXUP_FUNC,
> > + .v.func = alcs1200a_fixup_msi_ec79,
> > + .chained = true,
> > + .chain_id = ALCS1200A_FIXUP_MIC_VREF,
> > + },
> > [ALC888VD_FIXUP_MIC_100VREF] = {
> > .type = HDA_FIXUP_PINCTLS,
> > .v.pins = (const struct hda_pintbl[]) {
> > @@ -636,6 +673,7 @@ static const struct hda_quirk alc882_fixup_tbl[] = {
> > SND_PCI_QUIRK(0x1458, 0xa0cd, "Gigabyte X570 Aorus Master",
> ALC1220_FIXUP_GB_X570),
> > SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme",
> ALC1220_FIXUP_GB_X570),
> > SND_PCI_QUIRK(0x1458, 0xa0d5, "Gigabyte X570S Aorus Master",
> ALC1220_FIXUP_GB_X570),
> > + SND_PCI_QUIRK(0x1462, 0xec79, "MSI ALCS1200A",
> ALCS1200A_FIXUP_MSI_EC79),
> > SND_PCI_QUIRK(0x1462, 0x11f7, "MSI-GE63", ALC1220_FIXUP_CLEVO_P950),
> > SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),
> > SND_PCI_QUIRK(0x1462, 0x1229, "MSI-GP73", ALC1220_FIXUP_CLEVO_P950),
> > --
> > 2.53.0
> >
>
>