All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
To: Mark Brown <broonie@kernel.org>
Cc: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>,
	Linux-ALSA <alsa-devel@alsa-project.org>,
	Charles Keepax <ckeepax@opensource.cirrus.com>,
	Heiko Stuebner <heiko@sntech.de>,
	Kai Vehmanen <kai.vehmanen@linux.intel.com>,
	Daniel Baluta <daniel.baluta@nxp.com>,
	Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
	Jonathan Hunter <jonathanh@nvidia.com>,
	Nicolas Frattaroli <frattaroli.nicolas@gmail.com>,
	Thierry Reding <thierry.reding@gmail.com>,
	Bard Liao <yung-chuan.liao@linux.intel.com>,
	Colin Ian King <colin.i.king@gmail.com>
Subject: [PATCH 17/25] ASoC: sof: use helper function
Date: Fri, 20 Jan 2023 07:03:22 +0000	[thread overview]
Message-ID: <87lelxk7r9.wl-kuninori.morimoto.gx@renesas.com> (raw)
In-Reply-To: <87a62dlmmn.wl-kuninori.morimoto.gx@renesas.com>


From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

Current ASoC has many helper function.
This patch use it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/sof/topology.c | 104 ++++++++++++++-------------------------
 1 file changed, 38 insertions(+), 66 deletions(-)

diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c
index 560771ba8fb9..e9a2d4a240b3 100644
--- a/sound/soc/sof/topology.c
+++ b/sound/soc/sof/topology.c
@@ -1055,6 +1055,7 @@ static int sof_connect_dai_widget(struct snd_soc_component *scomp,
 	struct snd_soc_card *card = scomp->card;
 	struct snd_soc_pcm_runtime *rtd;
 	struct snd_soc_dai *cpu_dai;
+	int stream;
 	int i;
 
 	if (!w->sname) {
@@ -1062,62 +1063,41 @@ static int sof_connect_dai_widget(struct snd_soc_component *scomp,
 		return -EINVAL;
 	}
 
+	if (w->id == snd_soc_dapm_dai_out)
+		stream = SNDRV_PCM_STREAM_CAPTURE;
+	if (w->id == snd_soc_dapm_dai_in)
+		stream = SNDRV_PCM_STREAM_PLAYBACK;
+	else
+		goto end;
+
 	list_for_each_entry(rtd, &card->rtd_list, list) {
 		/* does stream match DAI link ? */
 		if (!rtd->dai_link->stream_name ||
 		    strcmp(w->sname, rtd->dai_link->stream_name))
 			continue;
 
-		switch (w->id) {
-		case snd_soc_dapm_dai_out:
-			for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
-				/*
-				 * Please create DAI widget in the right order
-				 * to ensure BE will connect to the right DAI
-				 * widget.
-				 */
-				if (!cpu_dai->capture_widget) {
-					cpu_dai->capture_widget = w;
-					break;
-				}
-			}
-			if (i == rtd->dai_link->num_cpus) {
-				dev_err(scomp->dev, "error: can't find BE for DAI %s\n",
-					w->name);
-
-				return -EINVAL;
-			}
-			dai->name = rtd->dai_link->name;
-			dev_dbg(scomp->dev, "tplg: connected widget %s -> DAI link %s\n",
-				w->name, rtd->dai_link->name);
-			break;
-		case snd_soc_dapm_dai_in:
-			for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
-				/*
-				 * Please create DAI widget in the right order
-				 * to ensure BE will connect to the right DAI
-				 * widget.
-				 */
-				if (!cpu_dai->playback_widget) {
-					cpu_dai->playback_widget = w;
-					break;
-				}
+		for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
+			/*
+			 * Please create DAI widget in the right order
+			 * to ensure BE will connect to the right DAI
+			 * widget.
+			 */
+			if (!snd_soc_dai_get_widget(cpu_dai, stream)) {
+				snd_soc_dai_set_widget(cpu_dai, stream, w);
+				break;
 			}
-			if (i == rtd->dai_link->num_cpus) {
-				dev_err(scomp->dev, "error: can't find BE for DAI %s\n",
-					w->name);
+		}
+		if (i == rtd->dai_link->num_cpus) {
+			dev_err(scomp->dev, "error: can't find BE for DAI %s\n", w->name);
 
-				return -EINVAL;
-			}
-			dai->name = rtd->dai_link->name;
-			dev_dbg(scomp->dev, "tplg: connected widget %s -> DAI link %s\n",
-				w->name, rtd->dai_link->name);
-			break;
-		default:
-			break;
+			return -EINVAL;
 		}
-	}
 
+		dai->name = rtd->dai_link->name;
+		dev_dbg(scomp->dev, "tplg: connected widget %s -> DAI link %s\n",
+			w->name, rtd->dai_link->name);
+	}
+end:
 	/* check we have a connection */
 	if (!dai->name) {
 		dev_err(scomp->dev, "error: can't connect DAI %s stream %s\n",
@@ -1134,37 +1114,29 @@ static void sof_disconnect_dai_widget(struct snd_soc_component *scomp,
 	struct snd_soc_card *card = scomp->card;
 	struct snd_soc_pcm_runtime *rtd;
 	struct snd_soc_dai *cpu_dai;
-	int i;
+	int i, stream;
 
 	if (!w->sname)
 		return;
 
+	if (w->id == snd_soc_dapm_dai_out)
+		stream = SNDRV_PCM_STREAM_CAPTURE;
+	else if (w->id == snd_soc_dapm_dai_in)
+		stream = SNDRV_PCM_STREAM_PLAYBACK;
+	else
+		return;
+
 	list_for_each_entry(rtd, &card->rtd_list, list) {
 		/* does stream match DAI link ? */
 		if (!rtd->dai_link->stream_name ||
 		    strcmp(w->sname, rtd->dai_link->stream_name))
 			continue;
 
-		switch (w->id) {
-		case snd_soc_dapm_dai_out:
-			for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
-				if (cpu_dai->capture_widget == w) {
-					cpu_dai->capture_widget = NULL;
-					break;
-				}
-			}
-			break;
-		case snd_soc_dapm_dai_in:
-			for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
-				if (cpu_dai->playback_widget == w) {
-					cpu_dai->playback_widget = NULL;
-					break;
-				}
+		for_each_rtd_cpu_dais(rtd, i, cpu_dai)
+			if (snd_soc_dai_get_widget(cpu_dai, stream) == w) {
+				snd_soc_dai_set_widget(cpu_dai, stream, NULL);
+				break;
 			}
-			break;
-		default:
-			break;
-		}
 	}
 }
 
-- 
2.25.1


  parent reply	other threads:[~2023-01-20  7:07 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-20  6:56 [PATCH 00/25] ASoC: use helper function and cleanup Kuninori Morimoto
2023-01-20  7:01 ` [PATCH 02/25] ASoC: soc-dai.h: add snd_soc_dai_dma_data_set/get() for low level Kuninori Morimoto
2023-01-20 11:13   ` Charles Keepax
2023-01-20  7:01 ` [PATCH 03/25] ASoC: soc-dai.h: add snd_soc_dai_tdm_mask_set/get() helper Kuninori Morimoto
2023-01-20 11:14   ` Charles Keepax
2023-01-20  7:02 ` [PATCH 04/25] ASoC: soc-dai.h: add snd_soc_dai_get/set_widget_playback/capture() helper Kuninori Morimoto
2023-01-20 11:14   ` Charles Keepax
2023-01-20  7:02 ` [PATCH 05/25] ASoC: soc.h: add snd_soc_card_is_instantiated() helper Kuninori Morimoto
2023-01-20 11:14   ` Charles Keepax
2023-01-20  7:02 ` [PATCH 06/25] ASoC: hdmi-codec: use helper function Kuninori Morimoto
2023-01-20  7:02 ` [PATCH 07/25] ASoC: hda: " Kuninori Morimoto
2023-01-20  7:02 ` [PATCH 08/25] ASoC: max: " Kuninori Morimoto
2023-01-20  7:02 ` [PATCH 09/25] ASoC: rt: " Kuninori Morimoto
2023-01-20  7:02 ` [PATCH 10/25] ASoC: cirrus: " Kuninori Morimoto
2023-01-20  7:02 ` [PATCH 11/25] ASoC: spear: " Kuninori Morimoto
2023-01-20  7:02 ` [PATCH 12/25] ASoC: sdw-mockup: " Kuninori Morimoto
2023-01-20  7:02 ` [PATCH 13/25] ASoC: intel: " Kuninori Morimoto
2023-01-20  7:03 ` [PATCH 14/25] ASoC: mediatek: " Kuninori Morimoto
2023-01-20  7:03 ` [PATCH 15/25] ASoC: meson: " Kuninori Morimoto
2023-01-20  7:03 ` [PATCH 16/25] ASoC: rockchip: " Kuninori Morimoto
2023-01-20  7:03 ` Kuninori Morimoto [this message]
2023-01-20  7:03 ` [PATCH 18/25] ASoC: tegra: " Kuninori Morimoto
2023-01-20  7:03 ` [PATCH 19/25] ASoC: ti: " Kuninori Morimoto
2023-01-20  7:03 ` [PATCH 20/25] ASoC: soc-core.c: " Kuninori Morimoto
2023-01-20 10:30   ` Charles Keepax
2023-01-20  7:03 ` [PATCH 21/25] ASoC: soc-dapm.c: " Kuninori Morimoto
2023-01-20 10:36   ` Charles Keepax
2023-01-20  7:03 ` [PATCH 22/25] ASoC: soc-dai.c: " Kuninori Morimoto
2023-01-20  8:00   ` Amadeusz Sławiński
2023-01-22 23:01     ` Kuninori Morimoto
2023-01-20  7:04 ` [PATCH 23/25] ASoC: soc-pcm.c: " Kuninori Morimoto
2023-01-20 11:09   ` Charles Keepax
2023-01-20  7:04 ` [PATCH 24/25] ASoC: soc-topology.c: " Kuninori Morimoto
2023-01-20  7:04 ` [PATCH 25/25] ASoC: soc-dai.h: cleanup Playback/Capture data for snd_soc_dai Kuninori Morimoto
2023-01-20 11:40   ` Charles Keepax

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=87lelxk7r9.wl-kuninori.morimoto.gx@renesas.com \
    --to=kuninori.morimoto.gx@renesas.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=ckeepax@opensource.cirrus.com \
    --cc=colin.i.king@gmail.com \
    --cc=daniel.baluta@nxp.com \
    --cc=frattaroli.nicolas@gmail.com \
    --cc=heiko@sntech.de \
    --cc=jiapeng.chong@linux.alibaba.com \
    --cc=jonathanh@nvidia.com \
    --cc=kai.vehmanen@linux.intel.com \
    --cc=pierre-louis.bossart@linux.intel.com \
    --cc=thierry.reding@gmail.com \
    --cc=yung-chuan.liao@linux.intel.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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.