ASoC: soc-dai.h: cleanup Playback/Capture data for snd_soc_dai

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>
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/87cz6vea1v.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Kuninori Morimoto 2023-01-31 02:02:04 +00:00 committed by Mark Brown
parent 2b34c1359c
commit 3653480c68
No known key found for this signature in database
GPG key ID: 24D68B725D5487D0
2 changed files with 28 additions and 44 deletions

View file

@ -423,6 +423,16 @@ struct snd_soc_dai_driver {
int remove_order; 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. * Digital Audio Interface runtime data.
* *
@ -437,14 +447,7 @@ struct snd_soc_dai {
struct snd_soc_dai_driver *driver; struct snd_soc_dai_driver *driver;
/* DAI runtime info */ /* DAI runtime info */
unsigned int stream_active[SNDRV_PCM_STREAM_LAST + 1]; /* usage count */ struct snd_soc_dai_stream stream[SNDRV_PCM_STREAM_LAST + 1];
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;
/* Symmetry data - only valid if symmetry is being enforced */ /* Symmetry data - only valid if symmetry is being enforced */
unsigned int rate; unsigned int rate;
@ -454,10 +457,6 @@ struct snd_soc_dai {
/* parent platform/codec */ /* parent platform/codec */
struct snd_soc_component *component; 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; struct list_head list;
/* function mark */ /* function mark */
@ -482,8 +481,7 @@ snd_soc_dai_get_pcm_stream(const struct snd_soc_dai *dai, int stream)
static inline static inline
struct snd_soc_dapm_widget *snd_soc_dai_get_widget(struct snd_soc_dai *dai, int stream) struct snd_soc_dapm_widget *snd_soc_dai_get_widget(struct snd_soc_dai *dai, int stream)
{ {
return (stream == SNDRV_PCM_STREAM_PLAYBACK) ? return dai->stream[stream].widget;
dai->playback_widget : dai->capture_widget;
} }
#define snd_soc_dai_set_widget_playback(dai, widget) snd_soc_dai_set_widget(dai, SNDRV_PCM_STREAM_PLAYBACK, 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 static inline
void snd_soc_dai_set_widget(struct snd_soc_dai *dai, int stream, struct snd_soc_dapm_widget *widget) 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->stream[stream].widget = widget;
dai->playback_widget = widget;
else
dai->capture_widget = widget;
} }
#define snd_soc_dai_dma_data_get_playback(dai) snd_soc_dai_dma_data_get(dai, SNDRV_PCM_STREAM_PLAYBACK) #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) #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) static inline void *snd_soc_dai_dma_data_get(const struct snd_soc_dai *dai, int stream)
{ {
return (stream == SNDRV_PCM_STREAM_PLAYBACK) ? return dai->stream[stream].dma_data;
dai->playback_dma_data : dai->capture_dma_data;
} }
#define snd_soc_dai_dma_data_set_playback(dai, data) snd_soc_dai_dma_data_set(dai, SNDRV_PCM_STREAM_PLAYBACK, 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) #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) 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->stream[stream].dma_data = data;
dai->playback_dma_data = data;
else
dai->capture_dma_data = data;
} }
static inline void snd_soc_dai_init_dma_data(struct snd_soc_dai *dai, static inline void snd_soc_dai_init_dma_data(struct snd_soc_dai *dai, void *playback, void *capture)
void *playback, void *capture)
{ {
dai->playback_dma_data = playback; snd_soc_dai_dma_data_set_playback(dai, playback);
dai->capture_dma_data = capture; 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) 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->stream[stream].tdm_mask;
return dai->tx_mask;
else
return dai->rx_mask;
} }
static inline void snd_soc_dai_tdm_mask_set(struct snd_soc_dai *dai, int stream, static inline void snd_soc_dai_tdm_mask_set(struct snd_soc_dai *dai, int stream,
unsigned int tdm_mask) unsigned int tdm_mask)
{ {
if (stream == SNDRV_PCM_STREAM_PLAYBACK) dai->stream[stream].tdm_mask = tdm_mask;
dai->tx_mask = tdm_mask; }
else
dai->rx_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, 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); 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 #endif

View file

@ -514,7 +514,7 @@ void snd_soc_dai_action(struct snd_soc_dai *dai,
int stream, int action) int stream, int action)
{ {
/* see snd_soc_dai_stream_active() */ /* see snd_soc_dai_stream_active() */
dai->stream_active[stream] += action; dai->stream[stream].active += action;
/* see snd_soc_component_active() */ /* see snd_soc_component_active() */
dai->component->active += action; dai->component->active += action;
@ -527,7 +527,7 @@ int snd_soc_dai_active(struct snd_soc_dai *dai)
active = 0; active = 0;
for_each_pcm_streams(stream) for_each_pcm_streams(stream)
active += dai->stream_active[stream]; active += dai->stream[stream].active;
return active; return active;
} }