lkml.org 
[lkml]   [2022]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 70/80] ALSA: hda/realtek: Add speaker AMP init for Samsung laptops with ALC298
    Date
    From: Kacper Michajłow <kasper93@gmail.com>

    commit a2d57ebec1e15f0ac256eb8397e82b07adfaaacc upstream.

    Magic initialization sequence was extracted from Windows driver and
    cleaned up manually.

    Fixes internal speakers output.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=207423
    Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1851518
    Signed-off-by: Kacper Michajłow <kasper93@gmail.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220827203328.30363-1-kasper93@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    sound/pci/hda/patch_realtek.c | 63 +++++++++++++++++++++++++++++++++++++-----
    1 file changed, 56 insertions(+), 7 deletions(-)

    --- a/sound/pci/hda/patch_realtek.c
    +++ b/sound/pci/hda/patch_realtek.c
    @@ -4628,6 +4628,48 @@ static void alc236_fixup_hp_mute_led_mic
    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)
    @@ -6787,6 +6829,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,
    @@ -8140,6 +8183,12 @@ static const struct hda_fixup alc269_fix
    .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[]) {
    @@ -8914,13 +8963,13 @@ static const struct snd_pci_quirk alc269
    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),
    @@ -9280,7 +9329,7 @@ static const struct hda_model_fixup alc2
    {.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"},

    \
     
     \ /
      Last update: 2022-09-06 15:45    [W:4.248 / U:0.252 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site