Linux-Tegra Archive on lore.kernel.org
 help / color / Atom feed
From: Sameer Pujar <spujar@nvidia.com>
To: <broonie@kernel.org>, <lgirdwood@gmail.com>, <robh+dt@kernel.org>,
	<kuninori.morimoto.gx@renesas.com>,
	<pierre-louis.bossart@linux.intel.com>, <perex@perex.cz>,
	<tiwai@suse.com>, <p.zabel@pengutronix.de>,
	<thierry.reding@gmail.com>, <jonathanh@nvidia.com>
Cc: <alsa-devel@alsa-project.org>, <devicetree@vger.kernel.org>,
	<linux-tegra@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<sharadg@nvidia.com>, <mkumard@nvidia.com>,
	<viswanathl@nvidia.com>, <rlokhande@nvidia.com>,
	<dramesh@nvidia.com>, <atalambedu@nvidia.com>,
	<nwartikar@nvidia.com>, <swarren@nvidia.com>,
	<nicoleotsuka@gmail.com>, Sameer Pujar <spujar@nvidia.com>
Subject: [PATCH v4 04/15] ASoC: audio-graph: Identify 'no_pcm' DAI links for DPCM
Date: Fri, 16 Oct 2020 20:12:51 +0530
Message-ID: <1602859382-19505-5-git-send-email-spujar@nvidia.com> (raw)
In-Reply-To: <1602859382-19505-1-git-send-email-spujar@nvidia.com>

PCM devices are created for FE dai links with 'no-pcm' flag as '0'.
Such DAI links have CPU component which implement either pcm_construct()
or pcm_new() at component or dai level respectively. Based on this,
current patch exposes a helper function to identify such components
and populate 'no_pcm' flag for DPCM DAI link.

This helps to have BE<->BE component links where PCM devices need
not be created for CPU component involved in such links.

Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Cc: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/generic/audio-graph-card.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/sound/soc/generic/audio-graph-card.c b/sound/soc/generic/audio-graph-card.c
index 1e20562..9b06841 100644
--- a/sound/soc/generic/audio-graph-card.c
+++ b/sound/soc/generic/audio-graph-card.c
@@ -111,6 +111,17 @@ static int graph_get_dai_id(struct device_node *ep)
 	return id;
 }
 
+static bool soc_component_is_pcm(struct snd_soc_dai_link_component *dlc)
+{
+	struct snd_soc_dai *dai = snd_soc_find_dai_with_mutex(dlc);
+
+	if (dai && (dai->component->driver->pcm_construct ||
+		    dai->driver->pcm_new))
+		return true;
+
+	return false;
+}
+
 static int asoc_simple_parse_dai(struct device_node *ep,
 				 struct snd_soc_dai_link_component *dlc,
 				 int *is_single_link)
@@ -205,6 +216,7 @@ static int graph_dai_link_of_dpcm(struct asoc_simple_priv *priv,
 				  int dup_codec)
 {
 	struct device *dev = simple_priv_to_dev(priv);
+	struct snd_soc_card *card = simple_priv_to_card(priv);
 	struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);
 	struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);
 	struct device_node *top = dev->of_node;
@@ -259,6 +271,19 @@ static int graph_dai_link_of_dpcm(struct asoc_simple_priv *priv,
 		if (ret < 0)
 			goto out_put_node;
 
+		/*
+		 * In BE<->BE connections it is not required to create
+		 * PCM devices at CPU end of the dai link and thus 'no_pcm'
+		 * flag needs to be set. It is useful when there are many
+		 * BE components and some of these have to be connected to
+		 * form a valid audio path.
+		 *
+		 * For example: FE <-> BE1 <-> BE2 <-> ... <-> BEn where
+		 * there are 'n' BE components in the path.
+		 */
+		if (card->component_chaining && !soc_component_is_pcm(cpus))
+			dai_link->no_pcm = 1;
+
 		/* card->num_links includes Codec */
 		asoc_simple_canonicalize_cpu(dai_link, is_single_links);
 	} else {
-- 
2.7.4


  parent reply index

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-16 14:42 [PATCH v4 00/15] Audio graph card updates and usage with Tegra210 audio Sameer Pujar
2020-10-16 14:42 ` [PATCH v4 01/15] ASoC: soc-core: Fix component name_prefix parsing Sameer Pujar
2020-10-16 14:42 ` [PATCH v4 02/15] ASoC: soc-pcm: Get all BEs along DAPM path Sameer Pujar
2020-10-16 14:42 ` [PATCH v4 03/15] ASoC: audio-graph: Use of_node and DAI for DPCM DAI link names Sameer Pujar
2020-10-16 14:42 ` Sameer Pujar [this message]
2020-10-16 14:42 ` [PATCH v4 05/15] ASoC: audio-graph: Support empty Codec endpoint Sameer Pujar
2020-10-16 14:42 ` [PATCH v4 06/15] ASoC: audio-graph: Expose new members for asoc_simple_priv Sameer Pujar
2020-10-16 14:42 ` [PATCH v4 07/15] ASoC: audio-graph: Expose helpers from audio graph Sameer Pujar
2020-10-16 14:42 ` [PATCH v4 08/15] Documentation: of: Convert graph bindings to json-schema Sameer Pujar
2020-10-19 21:56   ` Rob Herring
2020-10-20  5:34     ` Sameer Pujar
2020-10-20  8:30     ` Philipp Zabel
2020-10-23 13:45       ` Sameer Pujar
2020-10-16 14:42 ` [PATCH v4 09/15] ASoC: dt-bindings: audio-graph: Convert " Sameer Pujar
2020-10-19  2:50   ` Kuninori Morimoto
2020-10-19  4:30     ` Sameer Pujar
2020-10-19  4:41       ` Kuninori Morimoto
2020-10-19 22:11         ` Rob Herring
2020-10-16 14:42 ` [PATCH v4 10/15] ASoC: dt-bindings: tegra: Add graph bindings Sameer Pujar
2020-10-19 22:11   ` Rob Herring
2020-10-20  6:03     ` Sameer Pujar
2020-10-16 14:42 ` [PATCH v4 11/15] ASoC: dt-bindings: tegra: Add json-schema for Tegra audio graph card Sameer Pujar
2020-10-19 22:16   ` Rob Herring
2020-10-20  6:16     ` Sameer Pujar
2020-10-20 13:24       ` Rob Herring
2020-10-16 14:42 ` [PATCH v4 12/15] ASoC: tegra: Add audio graph based card driver Sameer Pujar
2020-10-16 14:43 ` [PATCH v4 13/15] arm64: defconfig: Enable Tegra audio graph " Sameer Pujar
2020-10-16 14:43 ` [PATCH v4 14/15] arm64: tegra: Audio graph header for Tegra210 Sameer Pujar
2020-10-16 14:43 ` [PATCH v4 15/15] arm64: tegra: Audio graph sound card for Jetson Nano and TX1 Sameer Pujar
2020-10-30  6:34 ` [PATCH v4 00/15] Audio graph card updates and usage with Tegra210 audio Sameer Pujar
2020-10-30 13:58   ` Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1602859382-19505-5-git-send-email-spujar@nvidia.com \
    --to=spujar@nvidia.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=atalambedu@nvidia.com \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dramesh@nvidia.com \
    --cc=jonathanh@nvidia.com \
    --cc=kuninori.morimoto.gx@renesas.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=mkumard@nvidia.com \
    --cc=nicoleotsuka@gmail.com \
    --cc=nwartikar@nvidia.com \
    --cc=p.zabel@pengutronix.de \
    --cc=perex@perex.cz \
    --cc=pierre-louis.bossart@linux.intel.com \
    --cc=rlokhande@nvidia.com \
    --cc=robh+dt@kernel.org \
    --cc=sharadg@nvidia.com \
    --cc=swarren@nvidia.com \
    --cc=thierry.reding@gmail.com \
    --cc=tiwai@suse.com \
    --cc=viswanathl@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-Tegra Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-tegra/0 linux-tegra/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-tegra linux-tegra/ https://lore.kernel.org/linux-tegra \
		linux-tegra@vger.kernel.org
	public-inbox-index linux-tegra

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-tegra


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git