Skip to content

Commit

Permalink
ASoC: soc-core: Merge CPU/Codec DAIs
Browse files Browse the repository at this point in the history
ALSA SoC is currently categorizing CPU/Codec DAIs,
and it works well.

But modern devices require more complex connections,
for example Codec to Codec, etc, and future devices will
enable to more complex connections.
Because of these background, CPU/Codec DAIs categorizing is
no longer good much to modern device.

Currently, rtd has both CPU/Codec DAIs pointer.

	rtd->cpu_dais   = [][][][][][][][][]
	rtd->codec_dais = [][][][][][][][][]

This patch merges these into DAIs pointer.

	rtd->dais = [][][][][][][][][][][][][][][][][][]
	            ^cpu_dais         ^codec_dais
	            |--- num_cpus ---|--- num_codecs --|

Then, we can merge for_each_rtd_cpu/codec_dais() from this patch.

-	for_each_rtd_cpu_dais() {
-		...
-	}
-	for_each_rtd_codec_dais() {
-		...
-	}
+	for_each_rtd_dais() {
+		...
+	}

Signed-off-by: Kuninori Morimoto <[email protected]>
Reviewed-by: Ranjani Sridharan <[email protected]>
Reviewed-by: Pierre-Louis Bossart <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Mark Brown <[email protected]>
  • Loading branch information
morimoto authored and broonie committed Mar 20, 2020
1 parent 4fcf4b1 commit 22a2fc8
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
7 changes: 6 additions & 1 deletion include/sound/soc.h
Original file line number Diff line number Diff line change
Expand Up @@ -1145,6 +1145,7 @@ struct snd_soc_pcm_runtime {
struct snd_compr *compr;
struct snd_soc_dai *codec_dai;
struct snd_soc_dai *cpu_dai;
struct snd_soc_dai **dais;

struct snd_soc_dai **codec_dais;
unsigned int num_codecs;
Expand Down Expand Up @@ -1184,7 +1185,11 @@ struct snd_soc_pcm_runtime {
(i)++)
#define for_each_rtd_codec_dais_rollback(rtd, i, dai) \
for (; (--(i) >= 0) && ((dai) = rtd->codec_dais[i]);)

#define for_each_rtd_dais(rtd, i, dai) \
for ((i) = 0; \
((i) < (rtd)->num_cpus + (rtd)->num_codecs) && \
((dai) = (rtd)->dais[i]); \
(i)++)

void snd_soc_close_delayed_work(struct snd_soc_pcm_runtime *rtd);

Expand Down
18 changes: 9 additions & 9 deletions sound/soc/soc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -475,22 +475,22 @@ static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
INIT_DELAYED_WORK(&rtd->delayed_work, close_delayed_work);

/*
* for rtd->codec_dais
* for rtd->dais
*/
rtd->codec_dais = devm_kcalloc(dev, dai_link->num_codecs,
rtd->dais = devm_kcalloc(dev, dai_link->num_cpus + dai_link->num_codecs,
sizeof(struct snd_soc_dai *),
GFP_KERNEL);
if (!rtd->codec_dais)
if (!rtd->dais)
goto free_rtd;

/*
* for rtd->cpu_dais
* dais = [][][][][][][][][][][][][][][][][][]
* ^cpu_dais ^codec_dais
* |--- num_cpus ---|--- num_codecs --|
*/
rtd->cpu_dais = devm_kcalloc(dev, dai_link->num_cpus,
sizeof(struct snd_soc_dai *),
GFP_KERNEL);
if (!rtd->cpu_dais)
goto free_rtd;
rtd->cpu_dais = &rtd->dais[0];
rtd->codec_dais = &rtd->dais[dai_link->num_cpus];

/*
* rtd remaining settings
*/
Expand Down

0 comments on commit 22a2fc8

Please sign in to comment.