Received: by 2002:ac0:8c9a:0:0:0:0:0 with SMTP id r26csp3647866ima; Mon, 4 Feb 2019 02:46:41 -0800 (PST) X-Google-Smtp-Source: AHgI3IbHtRI/siEvnyiiDnRy+LTnIQwYYhUBHITwf1VM9p403ifAT/3AN4x/A85NlyFuTbHITDMm X-Received: by 2002:a65:4904:: with SMTP id p4mr12617325pgs.384.1549277201095; Mon, 04 Feb 2019 02:46:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549277201; cv=none; d=google.com; s=arc-20160816; b=iJIW1u/ZlLbpRuinbDcoTD49WCAooEQHR0UPNC6+FH/MB8sn5y9o1B/PdN+CSTUbj3 X9J4WPh7weauqEZ3nOPrYpRarJztwHxlIuo39gD4SHBJRr92SpzF95Motry+T15fIz09 mFbj2gRYBPQ3j8KxnliXU4eLa/2YrMgl2b8IRJ+3U5ln4tp8OU57CwK0O5oNX2rRQXpN UVx6XfP88V3QZCvw+MiKtIEp+uknM+uHZROoB295PSTUniSD64QNNhTMAdmpovbRySEe FMXvuLU1Lb1Ix13GLl2odND1vTnqv4BYXC8OOrTo2zyDtsF/TJi8akUwGaPZgGbjQAfc SWTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=0N4lqGv/NU1DnDHdNvCFOLJrgrkKGOZn+11awxhFczk=; b=cfsvndtalt/Zoti7OgrUUYN2kQpT8EoxnEZ5GqCv3N08u5s6U6Dz+GRAmSVeSfjA+q HwTX+c0tUVczBp/kPczh08bCDY9RVMl/5FO7YjuGQfVq74Osa/rArZHn4/ZoNh6tNXp+ o0s7pZY3FhcpdjgxwejI1XlIKSA45sjl3oCN+BDxPYPkRu7BXba8yv5t1WRhSeaQDpGa 6t4r2P8QyXas0H5jVRzY1XBny74xbgEVaNM/PiEyqyTc75FJLBldEHwUw68fOFRO3avu XU+DMlYMeNpYkPfQ3VG8a06/6f01NdZXFBM5riHK/HCb5i9eXBB7JMQ0OkI1m37M4tAM vZMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=C8xddGch; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z13si15001067pgi.438.2019.02.04.02.46.25; Mon, 04 Feb 2019 02:46:41 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=C8xddGch; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731236AbfBDKpf (ORCPT + 99 others); Mon, 4 Feb 2019 05:45:35 -0500 Received: from mail.kernel.org ([198.145.29.99]:43644 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731190AbfBDKpe (ORCPT ); Mon, 4 Feb 2019 05:45:34 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A68C22176F; Mon, 4 Feb 2019 10:45:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1549277133; bh=1ZZH699qjda+HDwUrecUvbcGcbl+74prKJVqdlSygo8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=C8xddGchPYBnF/tt3UDmLj76uiRwgu/ffFkf6OW7mG5bW7ggKoik/UpXm67L8ZXVe s2x3JdKBaBbafNtoATtf/xjpPgOCWNvTm1S5M7Eh7uxyWMOk50pEV+BCjYfUHO6Y5j pFUM2cPYe/Ufx5BYnH5J2zlXtr7/K5/c3avyIWBw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Kailang Yang , Takashi Iwai Subject: [PATCH 4.14 33/46] ALSA: hda/realtek - Fixed hp_pin no value Date: Mon, 4 Feb 2019 11:37:04 +0100 Message-Id: <20190204103614.493431937@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190204103608.651205056@linuxfoundation.org> References: <20190204103608.651205056@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Kailang Yang commit 693abe11aa6b27aed6eb8222162f8fb986325cef upstream. Fix hp_pin always no value. [More notes on the changes: The hp_pin value that is referred in alc294_hp_init() is always zero at the moment the function gets called, hence this is actually useless as in the current code. And, this kind of init sequence should be called from the codec init callback, instead of the parser function. So, the first fix in this patch to move the call call into its own init_hook. OTOH, this function is needed to be called only once after the boot, and it'd take too long for invoking at each resume (where the init callback gets called). So we add a new flag and invoke this only once as an additional fix. The one case is still not covered, though: S4 resume. But this change itself won't lead to any regression in that regard, so we leave S4 issue as is for now and fix it later. -- tiwai ] Fixes: bde1a7459623 ("ALSA: hda/realtek - Fixed headphone issue for ALC700") Signed-off-by: Kailang Yang Cc: Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- sound/pci/hda/patch_realtek.c | 78 ++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 33 deletions(-) --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -118,6 +118,7 @@ struct alc_spec { int codec_variant; /* flag for other variants */ unsigned int has_alc5505_dsp:1; unsigned int no_depop_delay:1; + unsigned int done_hp_init:1; /* for PLL fix */ hda_nid_t pll_nid; @@ -3213,6 +3214,48 @@ static void alc_default_shutup(struct hd snd_hda_shutup_pins(codec); } +static void alc294_hp_init(struct hda_codec *codec) +{ + struct alc_spec *spec = codec->spec; + hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0]; + int i, val; + + if (!hp_pin) + return; + + snd_hda_codec_write(codec, hp_pin, 0, + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); + + msleep(100); + + snd_hda_codec_write(codec, hp_pin, 0, + AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); + + alc_update_coef_idx(codec, 0x6f, 0x000f, 0);/* Set HP depop to manual mode */ + alc_update_coefex_idx(codec, 0x58, 0x00, 0x8000, 0x8000); /* HP depop procedure start */ + + /* Wait for depop procedure finish */ + val = alc_read_coefex_idx(codec, 0x58, 0x01); + for (i = 0; i < 20 && val & 0x0080; i++) { + msleep(50); + val = alc_read_coefex_idx(codec, 0x58, 0x01); + } + /* Set HP depop to auto mode */ + alc_update_coef_idx(codec, 0x6f, 0x000f, 0x000b); + msleep(50); +} + +static void alc294_init(struct hda_codec *codec) +{ + struct alc_spec *spec = codec->spec; + + if (!spec->done_hp_init) { + alc294_hp_init(codec); + spec->done_hp_init = true; + } + alc_default_init(codec); +} + static void alc5505_coef_set(struct hda_codec *codec, unsigned int index_reg, unsigned int val) { @@ -6981,37 +7024,6 @@ static void alc269_fill_coef(struct hda_ alc_update_coef_idx(codec, 0x4, 0, 1<<11); } -static void alc294_hp_init(struct hda_codec *codec) -{ - struct alc_spec *spec = codec->spec; - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0]; - int i, val; - - if (!hp_pin) - return; - - snd_hda_codec_write(codec, hp_pin, 0, - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); - - msleep(100); - - snd_hda_codec_write(codec, hp_pin, 0, - AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); - - alc_update_coef_idx(codec, 0x6f, 0x000f, 0);/* Set HP depop to manual mode */ - alc_update_coefex_idx(codec, 0x58, 0x00, 0x8000, 0x8000); /* HP depop procedure start */ - - /* Wait for depop procedure finish */ - val = alc_read_coefex_idx(codec, 0x58, 0x01); - for (i = 0; i < 20 && val & 0x0080; i++) { - msleep(50); - val = alc_read_coefex_idx(codec, 0x58, 0x01); - } - /* Set HP depop to auto mode */ - alc_update_coef_idx(codec, 0x6f, 0x000f, 0x000b); - msleep(50); -} - /* */ static int patch_alc269(struct hda_codec *codec) @@ -7148,7 +7160,7 @@ static int patch_alc269(struct hda_codec spec->codec_variant = ALC269_TYPE_ALC294; spec->gen.mixer_nid = 0; /* ALC2x4 does not have any loopback mixer path */ alc_update_coef_idx(codec, 0x6b, 0x0018, (1<<4) | (1<<3)); /* UAJ MIC Vref control by verb */ - alc294_hp_init(codec); + spec->init_hook = alc294_init; break; case 0x10ec0300: spec->codec_variant = ALC269_TYPE_ALC300; @@ -7160,7 +7172,7 @@ static int patch_alc269(struct hda_codec spec->codec_variant = ALC269_TYPE_ALC700; spec->gen.mixer_nid = 0; /* ALC700 does not have any loopback mixer path */ alc_update_coef_idx(codec, 0x4a, 1 << 15, 0); /* Combo jack auto trigger control */ - alc294_hp_init(codec); + spec->init_hook = alc294_init; break; }