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: 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>
Link: https://patch.msgid.link/20241101020802.1103181-2-Vijendar.Mukunda@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Vijendar Mukunda 2024-11-01 07:38:01 +05:30 committed by Mark Brown
parent 0196105667
commit 485df22866
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
4 changed files with 18 additions and 16 deletions

View File

@ -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 *cpus, int cpus_num,
struct snd_soc_dai_link_component *platform_component, struct snd_soc_dai_link_component *platform_component,
int num_platforms, struct snd_soc_dai_link_component *codecs, 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); const struct snd_soc_ops *ops);
int asoc_sdw_init_simple_dai_link(struct device *dev, struct snd_soc_dai_link *dai_links, 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, int *be_id, char *name, int playback, int capture,
const char *cpu_dai_name, const char *platform_comp_name, const char *cpu_dai_name, const char *platform_comp_name,
int num_platforms, const char *codec_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), int (*init)(struct snd_soc_pcm_runtime *rtd),
const struct snd_soc_ops *ops); const struct snd_soc_ops *ops);

View File

@ -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, asoc_sdw_init_dai_link(dev, *dai_links, be_id, name, playback, capture,
cpus, num_cpus, platform_component, cpus, num_cpus, platform_component,
ARRAY_SIZE(platform_component), codecs, num_codecs, 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 * 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, 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; struct device *dev = card->dev;
int ret; int ret;
@ -294,7 +294,7 @@ static int create_dmic_dailinks(struct snd_soc_card *card,
0, 1, // DMIC only supports capture 0, 1, // DMIC only supports capture
"acp-sof-dmic", platform_component->name, "acp-sof-dmic", platform_component->name,
ARRAY_SIZE(platform_component), ARRAY_SIZE(platform_component),
"dmic-codec", "dmic-hifi", "dmic-codec", "dmic-hifi", no_pcm,
asoc_sdw_dmic_init, NULL); asoc_sdw_dmic_init, NULL);
if (ret) if (ret)
return ret; return ret;
@ -377,7 +377,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
if (ctx->ignore_internal_dmic) { if (ctx->ignore_internal_dmic) {
dev_warn(dev, "Ignoring ACP DMIC\n"); dev_warn(dev, "Ignoring ACP DMIC\n");
} else { } else {
ret = create_dmic_dailinks(card, &dai_links, &be_id); ret = create_dmic_dailinks(card, &dai_links, &be_id, 1);
if (ret) if (ret)
return ret; return ret;
} }

View File

@ -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, asoc_sdw_init_dai_link(dev, *dai_links, be_id, name, playback, capture,
cpus, num_cpus, platform_component, cpus, num_cpus, platform_component,
ARRAY_SIZE(platform_component), codecs, num_codecs, 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 * 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, playback, capture, cpu_dai_name,
platform_component->name, platform_component->name,
ARRAY_SIZE(platform_component), codec_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); ssp_info->ops);
if (ret) if (ret)
return ret; return ret;
@ -892,7 +892,7 @@ static int create_dmic_dailinks(struct snd_soc_card *card,
0, 1, // DMIC only supports capture 0, 1, // DMIC only supports capture
"DMIC01 Pin", platform_component->name, "DMIC01 Pin", platform_component->name,
ARRAY_SIZE(platform_component), ARRAY_SIZE(platform_component),
"dmic-codec", "dmic-hifi", "dmic-codec", "dmic-hifi", 1,
asoc_sdw_dmic_init, NULL); asoc_sdw_dmic_init, NULL);
if (ret) if (ret)
return ret; return ret;
@ -903,7 +903,7 @@ static int create_dmic_dailinks(struct snd_soc_card *card,
0, 1, // DMIC only supports capture 0, 1, // DMIC only supports capture
"DMIC16k Pin", platform_component->name, "DMIC16k Pin", platform_component->name,
ARRAY_SIZE(platform_component), ARRAY_SIZE(platform_component),
"dmic-codec", "dmic-hifi", "dmic-codec", "dmic-hifi", 1,
/* don't call asoc_sdw_dmic_init() twice */ /* don't call asoc_sdw_dmic_init() twice */
NULL, NULL); NULL, NULL);
if (ret) if (ret)
@ -947,7 +947,7 @@ static int create_hdmi_dailinks(struct snd_soc_card *card,
1, 0, // HDMI only supports playback 1, 0, // HDMI only supports playback
cpu_dai_name, platform_component->name, cpu_dai_name, platform_component->name,
ARRAY_SIZE(platform_component), ARRAY_SIZE(platform_component),
codec_name, codec_dai_name, codec_name, codec_dai_name, 1,
i == 0 ? sof_sdw_hdmi_init : NULL, NULL); i == 0 ? sof_sdw_hdmi_init : NULL, NULL);
if (ret) if (ret)
return 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, 1, 1, cpu_dai_name, platform_component->name,
ARRAY_SIZE(platform_component), ARRAY_SIZE(platform_component),
snd_soc_dummy_dlc.name, snd_soc_dummy_dlc.dai_name, snd_soc_dummy_dlc.name, snd_soc_dummy_dlc.dai_name,
NULL, NULL); 1, NULL, NULL);
if (ret) if (ret)
return ret; return ret;

View File

@ -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 *cpus, int cpus_num,
struct snd_soc_dai_link_component *platform_component, struct snd_soc_dai_link_component *platform_component,
int num_platforms, struct snd_soc_dai_link_component *codecs, 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) const struct snd_soc_ops *ops)
{ {
dev_dbg(dev, "create dai link %s, id %d\n", name, *be_id); 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->name = name;
dai_links->platforms = platform_component; dai_links->platforms = platform_component;
dai_links->num_platforms = num_platforms; dai_links->num_platforms = num_platforms;
dai_links->no_pcm = 1; dai_links->no_pcm = no_pcm;
dai_links->cpus = cpus; dai_links->cpus = cpus;
dai_links->num_cpus = cpus_num; dai_links->num_cpus = cpus_num;
dai_links->codecs = codecs; 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, int *be_id, char *name, int playback, int capture,
const char *cpu_dai_name, const char *platform_comp_name, const char *cpu_dai_name, const char *platform_comp_name,
int num_platforms, const char *codec_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), int (*init)(struct snd_soc_pcm_runtime *rtd),
const struct snd_soc_ops *ops) 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, asoc_sdw_init_dai_link(dev, dai_links, be_id, name, playback, capture,
&dlc[0], 1, &dlc[1], num_platforms, &dlc[0], 1, &dlc[1], num_platforms,
&dlc[2], 1, init, ops); &dlc[2], 1, no_pcm, init, ops);
return 0; return 0;
} }