From patchwork Sun Aug 11 22:19:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dennis Mungai X-Patchwork-Id: 11089187 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6411714DB for ; Sun, 11 Aug 2019 22:20:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 488B71FFE6 for ; Sun, 11 Aug 2019 22:20:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 39220205F7; Sun, 11 Aug 2019 22:20:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4DBCF1FFE6 for ; Sun, 11 Aug 2019 22:20:51 +0000 (UTC) Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id EBE731615; Mon, 12 Aug 2019 00:19:59 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz EBE731615 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1565562050; bh=SLKY+5ZLacO7guZ8oqpvgWMeqhvJPo/38+Dk2bWUZvE=; h=From:Date:To:Cc:Subject:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From; b=GSmXZn6/iBxIHWSAjcVq4wxDtvsoXEI+UtVMys6XSKu3nqj25Vve0AZILfS5PEWgP NGLJWgnnclbiuNe/GzZhlVSuA4cGNkp+ONyKUUDusXVH4W93BUI1gf0YD2FY2fPh6T sgQGutZ2SspjCaeALIXBeQBcbMpXPm+32O3BOyuw= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id 6721BF8026A; Mon, 12 Aug 2019 00:19:59 +0200 (CEST) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa1.perex.cz (Postfix, from userid 50401) id 2CF8BF80273; Mon, 12 Aug 2019 00:19:58 +0200 (CEST) Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id A172AF8015B for ; Mon, 12 Aug 2019 00:19:55 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz A172AF8015B Authentication-Results: alsa1.perex.cz; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QANDH1OA" Received: by mail-lj1-x242.google.com with SMTP id l14so6734400lje.2 for ; Sun, 11 Aug 2019 15:19:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=mEx7mShT9GbJPBQeyGiDGMaSIRGfvcMa1t0hMVneidU=; b=QANDH1OA8GkUtFgYgvO4EJM17LJqjrT8gwK/A0paC88jGh5ZCpGFMx6nz8SPJtnbRA tleQshvQd06+Z8N4vFof+5E0PmxF97bSBuQ58952hmtqro0/y0tw9S7iOfv+SOkZdew+ Soxn+/n9uyhZVdQ2WRHXjx6KFh/FyCQF/NuhDKfl58EszWBsUSiG4VPazrI4BkpV0fY1 55YeLF+Xjd7AFECuGOHekaoK+cwhA6NqhUcFF96pnGDISpoANw8JvwCxc4EtR7KTYbOA cbcMEgQD2dqL4egjSlexyEBnrweC8SSSYu8wznjCVFjOQtMUchyOfon+836egQo62Rgy X4DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=mEx7mShT9GbJPBQeyGiDGMaSIRGfvcMa1t0hMVneidU=; b=pbCjPpNIBC0Jv34N6fc9FFUPRoFvf3zEiv3IBlSF+LmUP4RdA5cu1PIC52aTjzuREu 3VJPN+sbHr5vOEz9RUu3U5Qlp6i+guiYlXxGQiQCsl49dRqo6LBKnJlDHS1ZeHhj9KTB wPl/xIAlh+3pF9LV4Ep+mkhG7VOMQPvayjd3yGYScDkTY02sRc5pJZ+qpkovPqTgqgjS QQptb7w4ZB3jpDWiyK4Uk8qGlryD7jIx/RbwN663fFHnkMGHC+c2S/vKiAUI4Gf1ZFSV UeY1xtZKCdmVm+nq4QzjraM5bCKNy0dI1MYNxlKFY/JfnUOsNFl7T3HuHcDw08WZqn9N NU3A== X-Gm-Message-State: APjAAAWJwOOo1eKCFu0mxWeWdy3u1kOd2gQEVc5vr2SIa6pnidW/cKIt Nlwr/xZwgeTZlh3gzYTbwTAkVKTB2zNXahIw9F+FFrnzLI4= X-Google-Smtp-Source: APXvYqxahAueJeivJCESizZtUJL3vciWKqAf8JDnm/U+l1jB3HxkFhyYgnIjwVrPzK1BtfpY3h3Cj5bQ0dasc3Yku4Q= X-Received: by 2002:a2e:9a13:: with SMTP id o19mr17919179lji.102.1565561993781; Sun, 11 Aug 2019 15:19:53 -0700 (PDT) MIME-Version: 1.0 From: Dennis Mungai Date: Mon, 12 Aug 2019 01:19:17 +0300 Message-ID: To: alsa-devel@alsa-project.org Cc: Takashi Iwai , jackpot51@gmail.com Subject: [alsa-devel] [PATCH] Add support for Sabre HiFi on System76 and Clevo laptops X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" X-Virus-Scanned: ClamAV using ClamSMTP Hello there, The patch attached below is based on Jeremy Soller's prior work on: https://patchwork.kernel.org/patch/9552671/ , copied herein. Cleaned up to pass checkpatch.pl tests. I can confirm that this patch does indeed fix the audio DAC init on the Clevo based P775TM1-R chassis with no issues. Warm regards, Dennis Mungai From 9f6b7f51a8be738bb588e8d6b0f4d9fb8ac5a0ce Mon Sep 17 00:00:00 2001 From: brainiarc7 Date: Mon, 12 Aug 2019 00:43:55 +0300 Subject: [PATCH 1/1] Fix ESS Sabre DAC init for Clevo laptops Signed-off-by: brainiarc7 --- sound/pci/hda/patch_realtek.c | 54 ++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index de224cbea..d8f9862cb 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -1899,6 +1899,7 @@ enum { ALC882_FIXUP_NO_PRIMARY_HP, ALC887_FIXUP_ASUS_BASS, ALC887_FIXUP_BASS_CHMAP, + ALC898_FIXUP_CLEVO_SPDIF, ALC1220_FIXUP_GB_DUAL_CODECS, ALC1220_FIXUP_CLEVO_P950, ALC1220_FIXUP_CLEVO_PB51ED, @@ -2029,6 +2030,43 @@ static void alc882_fixup_no_primary_hp(struct hda_codec *codec, } } +static void alc898_clevo_dac_hook(struct hda_codec *codec, + struct hda_jack_callback *jack) +{ + int val; + + // Read ESS DAC status + snd_hda_codec_write(codec, codec->core.afg, 0, AC_VERB_SET_GPIO_MASK, 4); + snd_hda_codec_write(codec, codec->core.afg, 0, AC_VERB_SET_GPIO_DIRECTION, 0); + val = snd_hda_codec_read(codec, codec->core.afg, 0, AC_VERB_GET_GPIO_DATA, 0); + val &= 0x04; + + if (val == 0) { + // Set VREF on headphone pin to 80% + val = snd_hda_codec_get_pin_target(codec, 0x1b); + val |= AC_PINCTL_VREF_80; + snd_hda_set_pin_ctl(codec, 0x1b, val); + } else { + // Set VREF on headphone pin to HIZ + val = snd_hda_codec_get_pin_target(codec, 0x1b); + val = val & 0xfff8; + snd_hda_set_pin_ctl(codec, 0x1b, val); + } +} + +static void alc898_fixup_clevo(struct hda_codec *codec, + const struct hda_fixup *fix, int action) +{ + switch (action) { + case HDA_FIXUP_ACT_PRE_PROBE: + snd_hda_jack_detect_enable_callback(codec, 0x1b, alc898_clevo_dac_hook); + break; + case HDA_FIXUP_ACT_INIT: + snd_hda_codec_read(codec, 0x1b, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, 4); + break; + } +} + static void alc_fixup_bass_chmap(struct hda_codec *codec, const struct hda_fixup *fix, int action); @@ -2350,7 +2388,11 @@ static const struct hda_fixup alc882_fixups[] = { [ALC887_FIXUP_BASS_CHMAP] = { .type = HDA_FIXUP_FUNC, .v.func = alc_fixup_bass_chmap, - }, + }, [ALC898_FIXUP_CLEVO_SPDIF] = { + .type = HDA_FIXUP_FUNC, + .v.func = alc898_fixup_clevo, + }, + [ALC1220_FIXUP_GB_DUAL_CODECS] = { .type = HDA_FIXUP_FUNC, .v.func = alc1220_fixup_gb_dual_codecs, @@ -2459,6 +2501,11 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { {} }; +static const struct snd_pci_quirk alc898_fixup_tbl[] = { + SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC898_FIXUP_CLEVO_SPDIF), + {} +}; + static const struct hda_model_fixup alc882_fixup_models[] = { {.id = ALC882_FIXUP_ABIT_AW9D_MAX, .name = "abit-aw9d"}, {.id = ALC882_FIXUP_LENOVO_Y530, .name = "lenovo-y530"}, @@ -2524,6 +2571,11 @@ static int patch_alc882(struct hda_codec *codec) case 0x10ec0900: case 0x10ec1220: break; + case 0x10ec0898: + case 0x10ec0899: + snd_hda_pick_fixup(codec, NULL, alc898_fixup_tbl, + alc882_fixups); + break; default: /* ALC883 and variants */ alc_fix_pll_init(codec, 0x20, 0x0a, 10); -- 2.17.1