Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp368517pxa; Fri, 21 Aug 2020 09:16:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzmlCS8MCDjPn2DBgCP7XyGyvD9TH82jRVm8hFGPby+Q+FzH5hHtvhf0o7psymn5gIQw4GU X-Received: by 2002:a17:906:7752:: with SMTP id o18mr3556284ejn.150.1598026585343; Fri, 21 Aug 2020 09:16:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598026585; cv=none; d=google.com; s=arc-20160816; b=DpcaPtu97KP8IRxCulJ0Yy/+KEWV1Xp1qsuU4ySY0Z+dUbvVTlviS6czcebPDMogvC PkEqX98NUbRmNyOhqYOcWY9/FecAort5JYX12HA10IY9OxAbIqgtiifnLzl43/gZAIbz n2r85JN4rj1T1nKqQuXMiIhIoTY2YlTNn+OvQWDHxKz88KT/c00Q5q2pWyE910yqo88C gB2e57SPvFviEtsr32iGE6I6ji1xCbtPJkZkzi8Zgcp554JyArdfcAvbVBQc4vRUUAsf zbI6jdX7VnyoBQGnYTaQXTHpL54qMDRF47n30qeyM+Ybp9pAqKtLhCmg6A/HS2Dv9kTu W+9A== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=W6NNdDhHYFcxeMC1pSP243sM59aYHKb4x7EAu9XUEoo=; b=kqhDGOIBM/7Iw+8DEH3BRQunteZx5UIxBa7HxQd4XNFRxj4jfwKSDfuUetspoPUtqE 3HuVrmLLiqUX5r+4JVcKtieq1jRBOKtNhPBdNtKnVLa/4TLOqdIwRKkKsstGhsW0/2uT Hiw9uxSRHtOv2aXr91/fYNkju860dZjRz0w6GMlWJwpyMC6Cb9t3rAuckGgt5dwWMi7l qpdvYNZVCUhhe7h2gYw2nC696nzJsPIwrIh04BRD3+ZPd5pF/SifdRn9E4e9uXDK2Kq/ OM3GkPOSVdqm+JNwhhRADnx2++j5NZRL5Xkml9Cz2Pye7rBCMgoZ9kdgHtj2r7M8bSct v5CA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=hET2W7+L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j2si1463134edp.166.2020.08.21.09.16.01; Fri, 21 Aug 2020 09:16:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=hET2W7+L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727099AbgHUQOy (ORCPT + 99 others); Fri, 21 Aug 2020 12:14:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:46130 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726976AbgHUQO0 (ORCPT ); Fri, 21 Aug 2020 12:14:26 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 52F5120855; Fri, 21 Aug 2020 16:14:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1598026466; bh=bpqFFIuJIaqnBbKwzmWCfJM+VGZuHc3Yu7TUhucPvko=; h=From:To:Cc:Subject:Date:From; b=hET2W7+L+AyCGbfHrGxcLq9cfB3lH/scu7BOfsVK+iAzwOXu6TnIIthd18n5NeeGT 1qSlXR86jltCXky4HHoHmHTXIVo+ajXFCKrSX+NunP1QzPf8XRIvTPAvFo4IQ+MZgi HTzPLNVG5Rz90eOFjsOQUIY2NATqnY5HAehjAoz8= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Kai-Heng Feng , Takashi Iwai , Sasha Levin , alsa-devel@alsa-project.org Subject: [PATCH AUTOSEL 5.8 01/62] ALSA: hda/hdmi: Add quirk to force connectivity Date: Fri, 21 Aug 2020 12:13:22 -0400 Message-Id: <20200821161423.347071-1-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kai-Heng Feng [ Upstream commit cd72c317a0a11f64225b9a3f1fe503bb8c7327b5 ] HDMI on some platforms doesn't enable audio support because its Port Connectivity [31:30] is set to AC_JACK_PORT_NONE: Node 0x05 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 Amp-Out vals: [0x00 0x00] Pincap 0x0b000094: OUT Detect HBR HDMI DP Pin Default 0x58560010: [N/A] Digital Out at Int HDMI Conn = Digital, Color = Unknown DefAssociation = 0x1, Sequence = 0x0 Pin-ctls: 0x40: OUT Unsolicited: tag=00, enabled=0 Power states: D0 D3 EPSS Power: setting=D0, actual=D0 Devices: 0 Connection: 3 0x02 0x03* 0x04 For now, use a quirk to force connectivity based on SSID. If there are more platforms affected by the same issue, we can eye for a more generic solution. Signed-off-by: Kai-Heng Feng Link: https://lore.kernel.org/r/20200804155836.16252-1-kai.heng.feng@canonical.com Signed-off-by: Takashi Iwai Signed-off-by: Sasha Levin --- sound/pci/hda/patch_hdmi.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index cd46247988e4d..b62cd3abb8273 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -160,6 +160,7 @@ struct hdmi_spec { bool use_acomp_notifier; /* use eld_notify callback for hotplug */ bool acomp_registered; /* audio component registered in this driver */ + bool force_connect; /* force connectivity */ struct drm_audio_component_audio_ops drm_audio_ops; int (*port2pin)(struct hda_codec *, int); /* reverse port/pin mapping */ @@ -1701,7 +1702,8 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid) * all device entries on the same pin */ config = snd_hda_codec_get_pincfg(codec, pin_nid); - if (get_defcfg_connect(config) == AC_JACK_PORT_NONE) + if (get_defcfg_connect(config) == AC_JACK_PORT_NONE && + !spec->force_connect) return 0; /* @@ -1803,11 +1805,18 @@ static int hdmi_add_cvt(struct hda_codec *codec, hda_nid_t cvt_nid) return 0; } +static const struct snd_pci_quirk force_connect_list[] = { + SND_PCI_QUIRK(0x103c, 0x871a, "HP", 1), + {} +}; + static int hdmi_parse_codec(struct hda_codec *codec) { + struct hdmi_spec *spec = codec->spec; hda_nid_t start_nid; unsigned int caps; int i, nodes; + const struct snd_pci_quirk *q; nodes = snd_hda_get_sub_nodes(codec, codec->core.afg, &start_nid); if (!start_nid || nodes < 0) { @@ -1815,6 +1824,11 @@ static int hdmi_parse_codec(struct hda_codec *codec) return -EINVAL; } + q = snd_pci_quirk_lookup(codec->bus->pci, force_connect_list); + + if (q && q->value) + spec->force_connect = true; + /* * hdmi_add_pin() assumes total amount of converters to * be known, so first discover all converters -- 2.25.1