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 25/25] ASoC: soc-dai.h: cleanup Playback/Capture data for snd_soc_dai
Date: Fri, 20 Jan 2023 07:04:14 +0000	[thread overview]
Message-ID: <87a62dk7pt.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 snd_soc_dai has data for Playback/Capture, but it is very
random. Someone is array (A), someone is playback/capture (B),
and someone is tx/rx (C);

	struct snd_soc_dai {
		...
(A)		unsigned int stream_active[SNDRV_PCM_STREAM_LAST + 1];

(B)		struct snd_soc_dapm_widget *playback_widget;
(B)		struct snd_soc_dapm_widget *capture_widget;

(B)		void *playback_dma_data;
(B)		void *capture_dma_data;

		...

(C)		unsigned int tx_mask;
(C)		unsigned int rx_mask;
	};

Because of it, the code was very complicated.
This patch creates new data structure to merge these into one,
and tidyup the code.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 include/sound/soc-dai.h | 68 ++++++++++++++++-------------------------
 sound/soc/soc-dai.c     |  4 +--
 2 files changed, 28 insertions(+), 44 deletions(-)

diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
index 197dc1629708..e3906ecda740 100644
--- a/include/sound/soc-dai.h
+++ b/include/sound/soc-dai.h
@@ -423,6 +423,16 @@ struct snd_soc_dai_driver {
 	int remove_order;
 };
 
+/* for Playback/Capture */
+struct snd_soc_dai_stream {
+	struct snd_soc_dapm_widget *widget;
+
+	unsigned int active;	/* usage count */
+	unsigned int tdm_mask;	/* CODEC TDM slot masks and params (for fixup) */
+
+	void *dma_data;		/* DAI DMA data */
+};
+
 /*
  * Digital Audio Interface runtime data.
  *
@@ -437,14 +447,7 @@ struct snd_soc_dai {
 	struct snd_soc_dai_driver *driver;
 
 	/* DAI runtime info */
-	unsigned int stream_active[SNDRV_PCM_STREAM_LAST + 1]; /* usage count */
-
-	struct snd_soc_dapm_widget *playback_widget;
-	struct snd_soc_dapm_widget *capture_widget;
-
-	/* DAI DMA data */
-	void *playback_dma_data;
-	void *capture_dma_data;
+	struct snd_soc_dai_stream stream[SNDRV_PCM_STREAM_LAST + 1];
 
 	/* Symmetry data - only valid if symmetry is being enforced */
 	unsigned int rate;
@@ -454,10 +457,6 @@ struct snd_soc_dai {
 	/* parent platform/codec */
 	struct snd_soc_component *component;
 
-	/* CODEC TDM slot masks and params (for fixup) */
-	unsigned int tx_mask;
-	unsigned int rx_mask;
-
 	struct list_head list;
 
 	/* function mark */
@@ -482,8 +481,7 @@ snd_soc_dai_get_pcm_stream(const struct snd_soc_dai *dai, int stream)
 static inline
 struct snd_soc_dapm_widget *snd_soc_dai_get_widget(struct snd_soc_dai *dai, int stream)
 {
-	return (stream == SNDRV_PCM_STREAM_PLAYBACK) ?
-		dai->playback_widget : dai->capture_widget;
+	return dai->stream[stream].widget;
 }
 
 #define snd_soc_dai_set_widget_playback(dai, widget)	snd_soc_dai_set_widget(dai, SNDRV_PCM_STREAM_PLAYBACK, widget)
@@ -491,10 +489,7 @@ struct snd_soc_dapm_widget *snd_soc_dai_get_widget(struct snd_soc_dai *dai, int
 static inline
 void snd_soc_dai_set_widget(struct snd_soc_dai *dai, int stream, struct snd_soc_dapm_widget *widget)
 {
-	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
-		dai->playback_widget = widget;
-	else
-		dai->capture_widget  = widget;
+	dai->stream[stream].widget = widget;
 }
 
 #define snd_soc_dai_dma_data_get_playback(dai)	snd_soc_dai_dma_data_get(dai, SNDRV_PCM_STREAM_PLAYBACK)
@@ -502,8 +497,7 @@ void snd_soc_dai_set_widget(struct snd_soc_dai *dai, int stream, struct snd_soc_
 #define snd_soc_dai_get_dma_data(dai, ss)	snd_soc_dai_dma_data_get(dai, ss->stream)
 static inline void *snd_soc_dai_dma_data_get(const struct snd_soc_dai *dai, int stream)
 {
-	return (stream == SNDRV_PCM_STREAM_PLAYBACK) ?
-		dai->playback_dma_data : dai->capture_dma_data;
+	return dai->stream[stream].dma_data;
 }
 
 #define snd_soc_dai_dma_data_set_playback(dai, data)	snd_soc_dai_dma_data_set(dai, SNDRV_PCM_STREAM_PLAYBACK, data)
@@ -511,34 +505,30 @@ static inline void *snd_soc_dai_dma_data_get(const struct snd_soc_dai *dai, int
 #define snd_soc_dai_set_dma_data(dai, ss, data)		snd_soc_dai_dma_data_set(dai, ss->stream, data)
 static inline void snd_soc_dai_dma_data_set(struct snd_soc_dai *dai, int stream, void *data)
 {
-	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
-		dai->playback_dma_data = data;
-	else
-		dai->capture_dma_data = data;
+	dai->stream[stream].dma_data = data;
 }
 
-static inline void snd_soc_dai_init_dma_data(struct snd_soc_dai *dai,
-					     void *playback, void *capture)
+static inline void snd_soc_dai_init_dma_data(struct snd_soc_dai *dai, void *playback, void *capture)
 {
-	dai->playback_dma_data = playback;
-	dai->capture_dma_data = capture;
+	snd_soc_dai_dma_data_set_playback(dai, playback);
+	snd_soc_dai_dma_data_set_capture(dai,  capture);
 }
 
 static inline unsigned int snd_soc_dai_tdm_mask_get(struct snd_soc_dai *dai, int stream)
 {
-	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
-		return dai->tx_mask;
-	else
-		return dai->rx_mask;
+	return dai->stream[stream].tdm_mask;
 }
 
 static inline void snd_soc_dai_tdm_mask_set(struct snd_soc_dai *dai, int stream,
 					    unsigned int tdm_mask)
 {
-	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
-		dai->tx_mask = tdm_mask;
-	else
-		dai->rx_mask = tdm_mask;
+	dai->stream[stream].tdm_mask = tdm_mask;
+}
+
+static inline unsigned int snd_soc_dai_stream_active(struct snd_soc_dai *dai, int stream)
+{
+	/* see snd_soc_dai_action() for setup */
+	return dai->stream[stream].active;
 }
 
 static inline void snd_soc_dai_set_drvdata(struct snd_soc_dai *dai,
@@ -593,10 +583,4 @@ static inline void *snd_soc_dai_get_stream(struct snd_soc_dai *dai,
 		return ERR_PTR(-ENOTSUPP);
 }
 
-static inline unsigned int
-snd_soc_dai_stream_active(struct snd_soc_dai *dai, int stream)
-{
-	return dai->stream_active[stream];
-}
-
 #endif
diff --git a/sound/soc/soc-dai.c b/sound/soc/soc-dai.c
index e01b87ea04d4..906819d441ba 100644
--- a/sound/soc/soc-dai.c
+++ b/sound/soc/soc-dai.c
@@ -514,7 +514,7 @@ void snd_soc_dai_action(struct snd_soc_dai *dai,
 			int stream, int action)
 {
 	/* see snd_soc_dai_stream_active() */
-	dai->stream_active[stream]	+= action;
+	dai->stream[stream].active	+= action;
 
 	/* see snd_soc_component_active() */
 	dai->component->active		+= action;
@@ -527,7 +527,7 @@ int snd_soc_dai_active(struct snd_soc_dai *dai)
 
 	active = 0;
 	for_each_pcm_streams(stream)
-		active += dai->stream_active[stream];
+		active += dai->stream[stream].active;
 
 	return active;
 }
-- 
2.25.1


  parent reply	other threads:[~2023-01-20  7:09 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 ` [PATCH 17/25] ASoC: sof: " Kuninori Morimoto
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 ` Kuninori Morimoto [this message]
2023-01-20 11:40   ` [PATCH 25/25] ASoC: soc-dai.h: cleanup Playback/Capture data for snd_soc_dai 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=87a62dk7pt.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.