ASoC: soc-dai.h: cleanup Playback/Capture data for snd_soc_dai
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tue, 31 Jan 2023 02:02:04 +0000 (02:02 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 31 Jan 2023 11:05:12 +0000 (11:05 +0000)
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>
include/sound/soc-dai.h
sound/soc/soc-dai.c

index 197dc16..e3906ec 100644 (file)
@@ -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
index 69f534f..0119afb 100644 (file)
@@ -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;
 }