Re: [PATCH] ALSA: hda/realtek: Enable rear line-out pins on MSI EC79 (ALCS1200A)
From: James
Date: Wed Mar 18 2026 - 18:15:07 EST
Hello,
Attached is a clean state dump with my modifications removed. I think the previous alsa-info dump was misleading as some kernel modifications were still left over from my testing and causing the wrong module to load, but I now have a clean install of the kernel and have disabled my userspace patch.
Signed-off-by: James Waschbisch <james@xxxxxxxxxx>
On Tue, Mar 17, 2026, at 6:02 AM, Takashi Iwai wrote:
On Tue, 17 Mar 2026 10:03:39 +0100,Takashi Iwai wrote:>> 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.... and I noticed that you didn't enable the proper codec drivers?Are CONFIG_SND_HDA_CODEC_ALC* enabled?thanks,Takashi>>> 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> > >> >> >
Attachment:
alsa-info.txt.uNrk0S9u78
Description: Binary data