diff mbox series

[1/2] ASoC: sdw_utils/intel/amd: refactor dai link init logic

Message ID 20241101020802.1103181-2-Vijendar.Mukunda@amd.com (mailing list archive)
State Accepted
Commit 485df22866559e2f821a9754d51a9755ce56e7aa
Headers show
Series Soundwire dai link init logic refactor | expand

Commit Message

Vijendar Mukunda Nov. 1, 2024, 2:08 a.m. UTC
Add 'no_pcm' as parameter for asoc_sdw_init_dai_link() so that
same function can be used for SOF and legacy(No DSP) stack.
Pass 'no_pcm' as 1 for Intel and AMD SOF based machine drivers.

Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
---
 include/sound/soc_sdw_utils.h        |  5 +++--
 sound/soc/amd/acp/acp-sdw-sof-mach.c |  8 ++++----
 sound/soc/intel/boards/sof_sdw.c     | 12 ++++++------
 sound/soc/sdw_utils/soc_sdw_utils.c  |  9 +++++----
 4 files changed, 18 insertions(+), 16 deletions(-)
diff mbox series

Patch

diff --git a/include/sound/soc_sdw_utils.h b/include/sound/soc_sdw_utils.h
index a25f94d6eb67..0e82598e10af 100644
--- a/include/sound/soc_sdw_utils.h
+++ b/include/sound/soc_sdw_utils.h
@@ -152,14 +152,15 @@  void asoc_sdw_init_dai_link(struct device *dev, struct snd_soc_dai_link *dai_lin
 			    struct snd_soc_dai_link_component *cpus, int cpus_num,
 			    struct snd_soc_dai_link_component *platform_component,
 			    int num_platforms, struct snd_soc_dai_link_component *codecs,
-			    int codecs_num, int (*init)(struct snd_soc_pcm_runtime *rtd),
+			    int codecs_num, int no_pcm,
+			    int (*init)(struct snd_soc_pcm_runtime *rtd),
 			    const struct snd_soc_ops *ops);
 
 int asoc_sdw_init_simple_dai_link(struct device *dev, struct snd_soc_dai_link *dai_links,
 				  int *be_id, char *name, int playback, int capture,
 				  const char *cpu_dai_name, const char *platform_comp_name,
 				  int num_platforms, const char *codec_name,
-				  const char *codec_dai_name,
+				  const char *codec_dai_name, int no_pcm,
 				  int (*init)(struct snd_soc_pcm_runtime *rtd),
 				  const struct snd_soc_ops *ops);
 
diff --git a/sound/soc/amd/acp/acp-sdw-sof-mach.c b/sound/soc/amd/acp/acp-sdw-sof-mach.c
index 36e6d6db90c1..8fce8cb957c9 100644
--- a/sound/soc/amd/acp/acp-sdw-sof-mach.c
+++ b/sound/soc/amd/acp/acp-sdw-sof-mach.c
@@ -236,7 +236,7 @@  static int create_sdw_dailink(struct snd_soc_card *card,
 		asoc_sdw_init_dai_link(dev, *dai_links, be_id, name, playback, capture,
 				       cpus, num_cpus, platform_component,
 				       ARRAY_SIZE(platform_component), codecs, num_codecs,
-				       asoc_sdw_rtd_init, &sdw_ops);
+				       1, asoc_sdw_rtd_init, &sdw_ops);
 
 		/*
 		 * SoundWire DAILINKs use 'stream' functions and Bank Switch operations
@@ -285,7 +285,7 @@  static int create_sdw_dailinks(struct snd_soc_card *card,
 }
 
 static int create_dmic_dailinks(struct snd_soc_card *card,
-				struct snd_soc_dai_link **dai_links, int *be_id)
+				struct snd_soc_dai_link **dai_links, int *be_id, int no_pcm)
 {
 	struct device *dev = card->dev;
 	int ret;
@@ -294,7 +294,7 @@  static int create_dmic_dailinks(struct snd_soc_card *card,
 					    0, 1, // DMIC only supports capture
 					    "acp-sof-dmic", platform_component->name,
 					    ARRAY_SIZE(platform_component),
-					    "dmic-codec", "dmic-hifi",
+					    "dmic-codec", "dmic-hifi", no_pcm,
 					    asoc_sdw_dmic_init, NULL);
 	if (ret)
 		return ret;
@@ -377,7 +377,7 @@  static int sof_card_dai_links_create(struct snd_soc_card *card)
 		if (ctx->ignore_internal_dmic) {
 			dev_warn(dev, "Ignoring ACP DMIC\n");
 		} else {
-			ret = create_dmic_dailinks(card, &dai_links, &be_id);
+			ret = create_dmic_dailinks(card, &dai_links, &be_id, 1);
 			if (ret)
 				return ret;
 		}
diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
index 5614e706a0bb..9ca284a1d666 100644
--- a/sound/soc/intel/boards/sof_sdw.c
+++ b/sound/soc/intel/boards/sof_sdw.c
@@ -790,7 +790,7 @@  static int create_sdw_dailink(struct snd_soc_card *card,
 		asoc_sdw_init_dai_link(dev, *dai_links, be_id, name, playback, capture,
 				       cpus, num_cpus, platform_component,
 				       ARRAY_SIZE(platform_component), codecs, num_codecs,
-				       asoc_sdw_rtd_init, &sdw_ops);
+				       1, asoc_sdw_rtd_init, &sdw_ops);
 
 		/*
 		 * SoundWire DAILINKs use 'stream' functions and Bank Switch operations
@@ -867,7 +867,7 @@  static int create_ssp_dailinks(struct snd_soc_card *card,
 						    playback, capture, cpu_dai_name,
 						    platform_component->name,
 						    ARRAY_SIZE(platform_component), codec_name,
-						    ssp_info->dais[0].dai_name, NULL,
+						    ssp_info->dais[0].dai_name, 1, NULL,
 						    ssp_info->ops);
 		if (ret)
 			return ret;
@@ -892,7 +892,7 @@  static int create_dmic_dailinks(struct snd_soc_card *card,
 					    0, 1, // DMIC only supports capture
 					    "DMIC01 Pin", platform_component->name,
 					    ARRAY_SIZE(platform_component),
-					    "dmic-codec", "dmic-hifi",
+					    "dmic-codec", "dmic-hifi", 1,
 					    asoc_sdw_dmic_init, NULL);
 	if (ret)
 		return ret;
@@ -903,7 +903,7 @@  static int create_dmic_dailinks(struct snd_soc_card *card,
 					    0, 1, // DMIC only supports capture
 					    "DMIC16k Pin", platform_component->name,
 					    ARRAY_SIZE(platform_component),
-					    "dmic-codec", "dmic-hifi",
+					    "dmic-codec", "dmic-hifi", 1,
 					    /* don't call asoc_sdw_dmic_init() twice */
 					    NULL, NULL);
 	if (ret)
@@ -947,7 +947,7 @@  static int create_hdmi_dailinks(struct snd_soc_card *card,
 						    1, 0, // HDMI only supports playback
 						    cpu_dai_name, platform_component->name,
 						    ARRAY_SIZE(platform_component),
-						    codec_name, codec_dai_name,
+						    codec_name, codec_dai_name, 1,
 						    i == 0 ? sof_sdw_hdmi_init : NULL, NULL);
 		if (ret)
 			return ret;
@@ -975,7 +975,7 @@  static int create_bt_dailinks(struct snd_soc_card *card,
 					    1, 1, cpu_dai_name, platform_component->name,
 					    ARRAY_SIZE(platform_component),
 					    snd_soc_dummy_dlc.name, snd_soc_dummy_dlc.dai_name,
-					    NULL, NULL);
+					    1, NULL, NULL);
 	if (ret)
 		return ret;
 
diff --git a/sound/soc/sdw_utils/soc_sdw_utils.c b/sound/soc/sdw_utils/soc_sdw_utils.c
index 6610efe8af18..e7f5938701ef 100644
--- a/sound/soc/sdw_utils/soc_sdw_utils.c
+++ b/sound/soc/sdw_utils/soc_sdw_utils.c
@@ -1015,7 +1015,8 @@  void asoc_sdw_init_dai_link(struct device *dev, struct snd_soc_dai_link *dai_lin
 			    struct snd_soc_dai_link_component *cpus, int cpus_num,
 			    struct snd_soc_dai_link_component *platform_component,
 			    int num_platforms, struct snd_soc_dai_link_component *codecs,
-			    int codecs_num, int (*init)(struct snd_soc_pcm_runtime *rtd),
+			    int codecs_num, int no_pcm,
+			    int (*init)(struct snd_soc_pcm_runtime *rtd),
 			    const struct snd_soc_ops *ops)
 {
 	dev_dbg(dev, "create dai link %s, id %d\n", name, *be_id);
@@ -1023,7 +1024,7 @@  void asoc_sdw_init_dai_link(struct device *dev, struct snd_soc_dai_link *dai_lin
 	dai_links->name = name;
 	dai_links->platforms = platform_component;
 	dai_links->num_platforms = num_platforms;
-	dai_links->no_pcm = 1;
+	dai_links->no_pcm = no_pcm;
 	dai_links->cpus = cpus;
 	dai_links->num_cpus = cpus_num;
 	dai_links->codecs = codecs;
@@ -1039,7 +1040,7 @@  int asoc_sdw_init_simple_dai_link(struct device *dev, struct snd_soc_dai_link *d
 				  int *be_id, char *name, int playback, int capture,
 				  const char *cpu_dai_name, const char *platform_comp_name,
 				  int num_platforms, const char *codec_name,
-				  const char *codec_dai_name,
+				  const char *codec_dai_name, int no_pcm,
 				  int (*init)(struct snd_soc_pcm_runtime *rtd),
 				  const struct snd_soc_ops *ops)
 {
@@ -1058,7 +1059,7 @@  int asoc_sdw_init_simple_dai_link(struct device *dev, struct snd_soc_dai_link *d
 
 	asoc_sdw_init_dai_link(dev, dai_links, be_id, name, playback, capture,
 			       &dlc[0], 1, &dlc[1], num_platforms,
-			       &dlc[2], 1, init, ops);
+			       &dlc[2], 1, no_pcm, init, ops);
 
 	return 0;
 }