ALSA: hda/realtek: Add speaker AMP init for Samsung laptops with ALC298
PATCH 1/1 ALSA: hda/realtek: Add speaker AMP init for Samsung laptops with ALC298
Magic initialization sequence was extracted from Windows driver and cleaned up manually.
Fixes internal speakers output.
Cc Takashi Iwai <[email protected]>
Signed-off-by Kacper Michajłow <[email protected]>
--- sound/pci/hda/patch_realtek.c | 63 +++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 7 deletions(-)
sound/pci/hda/patch_realtek.c +56 -7
@@ -4700,6 +4700,48 @@ static void alc236_fixup_hp_mute_led_micmute_vref(struct hda_codec *codec,alc236_fixup_hp_micmute_led_vref (codec, fix, action); } +static inline void alc298_samsung_write_coef_pack (struct hda_codec *codec, +const unsigned short coefs[2 ]) +{ +alc_write_coef_idx (codec,0x23 , coefs[0 ]); +alc_write_coef_idx (codec,0x25 , coefs[1 ]); +alc_write_coef_idx (codec,0x26 ,0xb011 ); +} + +struct alc298_samsung_amp_desc { +unsigned char nid; +unsigned short init_seq[2 ][2 ]; +}; + +static void alc298_fixup_samsung_amp (struct hda_codec *codec, +const struct hda_fixup *fix,int action) +{ +int i, j; +static const unsigned short init_seq[][2 ] = { + {0x19 ,0x00 }, {0x20 ,0xc0 }, {0x22 ,0x44 }, {0x23 ,0x08 }, + {0x24 ,0x85 }, {0x25 ,0x41 }, {0x35 ,0x40 }, {0x36 ,0x01 }, + {0x38 ,0x81 }, {0x3a ,0x03 }, {0x3b ,0x81 }, {0x40 ,0x3e }, + {0x41 ,0x07 }, {0x400 ,0x1 } + }; +static const struct alc298_samsung_amp_desc amps[] = { + {0x3a , { {0x18 ,0x1 }, {0x26 ,0x0 } } }, + {0x39 , { {0x18 ,0x2 }, {0x26 ,0x1 } } } + }; + +if (action !=HDA_FIXUP_ACT_INIT ) +return ; + +for (i =0 ; i <ARRAY_SIZE (amps); i++) { +alc_write_coef_idx (codec,0x22 , amps[i].nid); + +for (j =0 ; j <ARRAY_SIZE (amps[i].init_seq); j++) +alc298_samsung_write_coef_pack (codec, amps[i].init_seq[j]); + +for (j =0 ; j <ARRAY_SIZE (init_seq); j++) +alc298_samsung_write_coef_pack (codec, init_seq[j]); + } +} +#if IS_REACHABLE (CONFIG_INPUT )static void gpio2_mic_hotkey_event (struct hda_codec *codec,struct hda_jack_callback *event)
@@ -7030,6 +7072,7 @@ enum {ALC236_FIXUP_HP_GPIO_LED ,ALC236_FIXUP_HP_MUTE_LED ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF , +ALC298_FIXUP_SAMSUNG_AMP ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ,ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET , ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
@@ -8396,6 +8439,12 @@ static const struct hda_fixup alc269_fixups[] = { .type = HDA_FIXUP_FUNC, .v.func = alc236_fixup_hp_mute_led_micmute_vref, }, + [ALC298_FIXUP_SAMSUNG_AMP] = { + .type = HDA_FIXUP_FUNC, + .v.func = alc298_fixup_samsung_amp, + .chained = true, + .chain_id =ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET + }, [ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET] = { .type = HDA_FIXUP_VERBS, .v.verbs = (const struct hda_verb []) {
@@ -9342,13 +9391,13 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x10ec ,0x1254 ,"Intel Reference board" ,ALC295_FIXUP_CHROME_BOOK ),SND_PCI_QUIRK (0x10f7 ,0x8338 ,"Panasonic CF-SZ6" ,ALC269_FIXUP_HEADSET_MODE ),SND_PCI_QUIRK (0x144d ,0xc109 ,"Samsung Ativ book 9 (NP900X3G)" ,ALC269_FIXUP_INV_DMIC ), -SND_PCI_QUIRK (0x144d ,0xc169 ,"Samsung Notebook 9 Pen (NP930SBE-K01US)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ), -SND_PCI_QUIRK (0x144d ,0xc176 ,"Samsung Notebook 9 Pro (NP930MBE-K04US)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ), -SND_PCI_QUIRK (0x144d ,0xc189 ,"Samsung Galaxy Flex Book (NT950QCG-X716)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ), -SND_PCI_QUIRK (0x144d ,0xc18a ,"Samsung Galaxy Book Ion (NP930XCJ-K01US)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ), +SND_PCI_QUIRK (0x144d ,0xc169 ,"Samsung Notebook 9 Pen (NP930SBE-K01US)" ,ALC298_FIXUP_SAMSUNG_AMP ), +SND_PCI_QUIRK (0x144d ,0xc176 ,"Samsung Notebook 9 Pro (NP930MBE-K04US)" ,ALC298_FIXUP_SAMSUNG_AMP ), +SND_PCI_QUIRK (0x144d ,0xc189 ,"Samsung Galaxy Flex Book (NT950QCG-X716)" ,ALC298_FIXUP_SAMSUNG_AMP ), +SND_PCI_QUIRK (0x144d ,0xc18a ,"Samsung Galaxy Book Ion (NP930XCJ-K01US)" ,ALC298_FIXUP_SAMSUNG_AMP ),SND_PCI_QUIRK (0x144d ,0xc740 ,"Samsung Ativ book 8 (NP870Z5G)" ,ALC269_FIXUP_ATIV_BOOK_8 ), -SND_PCI_QUIRK (0x144d ,0xc812 ,"Samsung Notebook Pen S (NT950SBE-X58)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ), -SND_PCI_QUIRK (0x144d ,0xc830 ,"Samsung Galaxy Book Ion (NT950XCJ-X716A)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ), +SND_PCI_QUIRK (0x144d ,0xc812 ,"Samsung Notebook Pen S (NT950SBE-X58)" ,ALC298_FIXUP_SAMSUNG_AMP ), +SND_PCI_QUIRK (0x144d ,0xc830 ,"Samsung Galaxy Book Ion (NT950XCJ-X716A)" ,ALC298_FIXUP_SAMSUNG_AMP ),SND_PCI_QUIRK (0x144d ,0xc832 ,"Samsung Galaxy Book Flex Alpha (NP730QCJ)" ,ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ),SND_PCI_QUIRK (0x1458 ,0xfa53 ,"Gigabyte BXBT-2807" ,ALC283_FIXUP_HEADSET_MIC ), SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
@@ -9716,7 +9765,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = { {.id = ALC299_FIXUP_PREDATOR_SPK, .name = "predator-spk"}, {.id = ALC298_FIXUP_HUAWEI_MBX_STEREO, .name = "huawei-mbx-stereo"}, {.id = ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE, .name = "alc256-medion-headset"}, - {.id = ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc298-samsung-headphone"}, + {.id = ALC298_FIXUP_SAMSUNG_AMP, .name = "alc298-samsung-amp"}, {.id = ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc256-samsung-headphone"}, {.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"}, {.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"},
Signature · 1 line
2.37.2
Takashi Iwai
AppliedQuoted 10 lines · Kacper Michajłow
Magic initialization sequence was extracted from Windows driver and cleaned up manually.
Fixes internal speakers output.
Cc Takashi Iwai <[email protected]>Signed-off-by Kacper Michajłow <[email protected]>
Thanks, applied now.
Takashi