mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 23:00:21 +00:00
ASoC: soc-dai.c: add DAI get/match functions
Current ASoC is specifying and checking DAI name. But where it came from and how to check was ambiguous. This patch adds snd_soc_dai_name_get() / snd_soc_dlc_dai_is_match() and makes it clear. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87h6qco952.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
083912c240
commit
09f75f0981
@ -271,6 +271,8 @@ int snd_soc_dai_compr_get_metadata(struct snd_soc_dai *dai,
|
||||
struct snd_compr_stream *cstream,
|
||||
struct snd_compr_metadata *metadata);
|
||||
|
||||
const char *snd_soc_dai_name_get(struct snd_soc_dai *dai);
|
||||
|
||||
struct snd_soc_dai_ops {
|
||||
/*
|
||||
* DAI clocking configuration, all optional.
|
||||
|
@ -253,6 +253,47 @@ static inline int snd_soc_dlc_dai_is_empty(struct snd_soc_dai_link_component *dl
|
||||
return !dlc->dai_name;
|
||||
}
|
||||
|
||||
static int snd_soc_is_matching_dai(const struct snd_soc_dai_link_component *dlc,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
if (!dlc)
|
||||
return 0;
|
||||
|
||||
if (!dlc->dai_name)
|
||||
return 1;
|
||||
|
||||
/* see snd_soc_dai_name_get() */
|
||||
|
||||
if (strcmp(dlc->dai_name, dai->name) == 0)
|
||||
return 1;
|
||||
|
||||
if (dai->driver->name &&
|
||||
strcmp(dai->driver->name, dlc->dai_name) == 0)
|
||||
return 1;
|
||||
|
||||
if (dai->component->name &&
|
||||
strcmp(dlc->dai_name, dai->component->name) == 0)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *snd_soc_dai_name_get(struct snd_soc_dai *dai)
|
||||
{
|
||||
/* see snd_soc_is_matching_dai() */
|
||||
if (dai->name)
|
||||
return dai->name;
|
||||
|
||||
if (dai->driver->name)
|
||||
return dai->driver->name;
|
||||
|
||||
if (dai->component->name)
|
||||
return dai->component->name;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_dai_name_get);
|
||||
|
||||
static int snd_soc_rtd_add_component(struct snd_soc_pcm_runtime *rtd,
|
||||
struct snd_soc_component *component)
|
||||
{
|
||||
@ -810,18 +851,11 @@ struct snd_soc_dai *snd_soc_find_dai(
|
||||
lockdep_assert_held(&client_mutex);
|
||||
|
||||
/* Find CPU DAI from registered DAIs */
|
||||
for_each_component(component) {
|
||||
if (!snd_soc_is_matching_component(dlc, component))
|
||||
continue;
|
||||
for_each_component_dais(component, dai) {
|
||||
if (dlc->dai_name && strcmp(dai->name, dlc->dai_name)
|
||||
&& (!dai->driver->name
|
||||
|| strcmp(dai->driver->name, dlc->dai_name)))
|
||||
continue;
|
||||
|
||||
return dai;
|
||||
}
|
||||
}
|
||||
for_each_component(component)
|
||||
if (snd_soc_is_matching_component(dlc, component))
|
||||
for_each_component_dais(component, dai)
|
||||
if (snd_soc_is_matching_dai(dlc, dai))
|
||||
return dai;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@ -3316,9 +3350,7 @@ int snd_soc_get_dlc(const struct of_phandle_args *args, struct snd_soc_dai_link_
|
||||
id--;
|
||||
}
|
||||
|
||||
dlc->dai_name = dai->driver->name;
|
||||
if (!dlc->dai_name)
|
||||
dlc->dai_name = pos->name;
|
||||
dlc->dai_name = snd_soc_dai_name_get(dai);
|
||||
} else if (ret) {
|
||||
/*
|
||||
* if another error than ENOTSUPP is returned go on and
|
||||
|
Loading…
x
Reference in New Issue
Block a user