Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp13474213ybl; Sun, 29 Dec 2019 12:46:49 -0800 (PST) X-Google-Smtp-Source: APXvYqx3cD6BmhcODSDeNJ58ZZ0C8wdphUgNpZPnX8Njfh+gHcNVUgH0VLmQAcDWmTS/L2H+HkZs X-Received: by 2002:a05:6830:1e99:: with SMTP id n25mr31433563otr.67.1577652409615; Sun, 29 Dec 2019 12:46:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577652409; cv=none; d=google.com; s=arc-20160816; b=vFLNRxaF9otJX96BXi9QWwwmYceloqpCvCdsG5wvdw8KNtdRflnItJlu3OM8LAuJfE 185GifIUarq5uB+QFdAGA0Q79hiUZfFuiPYaLzYN/hhjmTLpKMTKYhJjDWqvPxDNKBvO /wHH3fVin83CB8JPg/rHXbXlSmisMs4Z/up+6bE2CkcopOy3lMhglyL5i2GWMX3kJZz+ 9RJZdjUocNHGwveWtuyJoIRktYleFA5zd/O6MFPEhsQLElcC8xGW0PtEr4HvC+1ZaylX h0YQoZa6XNDZBrvAQ2mtbqZwpTHS4ZpfsIn62dxdl4jSmpxjbhOACmGxzglOTSJstWs/ Jagg== 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=8pH8RR0JPDwY0ytSglKTGiyFCn3oreZT3EVhFvxgD7Q=; b=gt1kuOlUA2TP7FKcpRGxTZxRI+LCTR8TRGZJ6Tx42iTdGDuTlXL8qsad/5DPAWqiId AJV/pDEB2s1JpRuXLsC/Fy+hb8SI4ss0Q/e3nU3eQcJw2ROS7tpNHOQvL005bwhvPZ9t qufcooolmJmUCgeiJodZ1GI3Y+vHxhqMktBSRjda+93ff4G7rSPnwKyZ10dqFyHQNHcr qbsRpAmkDM/PMKBtVDmkMHllSDJ2Sdi1Fa59lKTBJFNMJuG6N6KdlMp5EtF8/KXG/t8+ UEOKRrm9dLEwkROOgFUgrYk885fdNMvzF6kDPXZwICxLM5ljUDX/cgKiDbP+FdL6ZTk5 XPZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Sq6plOo0; 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 m4si22314257otn.281.2019.12.29.12.46.39; Sun, 29 Dec 2019 12:46:49 -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=Sq6plOo0; 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 S1731678AbfL2Rtg (ORCPT + 99 others); Sun, 29 Dec 2019 12:49:36 -0500 Received: from mail.kernel.org ([198.145.29.99]:33420 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731665AbfL2Rte (ORCPT ); Sun, 29 Dec 2019 12:49:34 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.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 C3FF9208C4; Sun, 29 Dec 2019 17:49:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577641773; bh=w6iSnY7I0kCH9waKfL1HKUjv26aKQS+yqBaDUpDii+I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Sq6plOo0igIVcSl4z5DgEXXGlRJAqjsqmqyGK1P81qiADmnc9hkJ6XTZvAbI3daCs 7MoPqMm7W0FT2Oz/5NhFhBV6/EXfdZSNL8Ej9YdA4y0th+tvPmNNu8jEhmRhAK/K1K OH2hPNCM1qJIr93KZbt86PBIJigww4Ilzp7Zomkg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Kai Vehmanen , Takashi Iwai , Pierre-Louis Bossart , Mark Brown , Sasha Levin Subject: [PATCH 5.4 206/434] ALSA: hda/hdmi - implement mst_no_extra_pcms flag Date: Sun, 29 Dec 2019 18:24:19 +0100 Message-Id: <20191229172715.511452367@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191229172702.393141737@linuxfoundation.org> References: <20191229172702.393141737@linuxfoundation.org> User-Agent: quilt/0.66 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 From: Kai Vehmanen [ Upstream commit 2a2edfbbfee47947dd05f5860c66c0e80ee5e09d ] To support the DP-MST multiple streams via single connector feature, the HDMI driver was extended with the concept of backup PCMs. See commit 9152085defb6 ("ALSA: hda - add DP MST audio support"). This implementation works fine with snd_hda_intel.c as PCM topology is fully managed within the single driver. When the HDA codec driver is used from ASoC components, the concept of backup PCMs no longer fits. For ASoC topologies, the physical HDMI converters are presented as backend DAIs and these should match with hardware capabilities. The ASoC topology may define arbitrary PCMs (i.e. frontend DAIs) and have processing elements before eventual routing to the HDMI BE DAIs. With backup PCMs, the link between FE and BE DAIs would become dynamic and change when monitors are (un)plugged. This would lead to modifying the topology every time hotplug events happen, which is not currently possible in ASoC and there does not seem to be any obvious benefits from this design. To overcome above problems and enable the HDMI driver to be used from ASoC, this patch adds a new mode (mst_no_extra_pcms flags) to patch_hdmi.c. In this mode, the codec driver does not assume the backup PCMs to be created. Signed-off-by: Kai Vehmanen Reviewed-by: Takashi Iwai Reviewed-by: Pierre-Louis Bossart Link: https://lore.kernel.org/r/20191029134017.18901-2-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- include/sound/hda_codec.h | 1 + sound/pci/hda/patch_hdmi.c | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/include/sound/hda_codec.h b/include/sound/hda_codec.h index 9a0393cf024c..ac18f428eda6 100644 --- a/include/sound/hda_codec.h +++ b/include/sound/hda_codec.h @@ -254,6 +254,7 @@ struct hda_codec { unsigned int force_pin_prefix:1; /* Add location prefix */ unsigned int link_down_at_suspend:1; /* link down at runtime suspend */ unsigned int relaxed_resume:1; /* don't resume forcibly for jack */ + unsigned int mst_no_extra_pcms:1; /* no backup PCMs for DP-MST */ #ifdef CONFIG_PM unsigned long power_on_acct; diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 488c17c9f375..74f809b6fa31 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -2082,15 +2082,24 @@ static bool is_hdmi_pcm_attached(struct hdac_device *hdac, int pcm_idx) static int generic_hdmi_build_pcms(struct hda_codec *codec) { struct hdmi_spec *spec = codec->spec; - int idx; + int idx, pcm_num; /* * for non-mst mode, pcm number is the same as before - * for DP MST mode, pcm number is (nid number + dev_num - 1) - * dev_num is the device entry number in a pin - * + * for DP MST mode without extra PCM, pcm number is same + * for DP MST mode with extra PCMs, pcm number is + * (nid number + dev_num - 1) + * dev_num is the device entry number in a pin */ - for (idx = 0; idx < spec->num_nids + spec->dev_num - 1; idx++) { + + if (codec->mst_no_extra_pcms) + pcm_num = spec->num_nids; + else + pcm_num = spec->num_nids + spec->dev_num - 1; + + codec_dbg(codec, "hdmi: pcm_num set to %d\n", pcm_num); + + for (idx = 0; idx < pcm_num; idx++) { struct hda_pcm *info; struct hda_pcm_stream *pstr; -- 2.20.1