Unverified Commit 485df228 authored by Vijendar Mukunda's avatar Vijendar Mukunda Committed by Mark Brown
Browse files

ASoC: sdw_utils/intel/amd: refactor dai link init logic



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: default avatarVijendar Mukunda <Vijendar.Mukunda@amd.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: default avatarLiam Girdwood <liam.r.girdwood@intel.com>
Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://patch.msgid.link/20241101020802.1103181-2-Vijendar.Mukunda@amd.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 01961056
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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);

+4 −4
Original line number Diff line number Diff line
@@ -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;
		}
+6 −6
Original line number Diff line number Diff line
@@ -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;

+5 −4
Original line number Diff line number Diff line
@@ -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;
}