mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
ASoC: soc-core.c: add snd_soc_add_pcm_runtimes()
Current ASoC supports snd_soc_add_pcm_runtime(), but user need to call it one-by-one if it has multi dai_links. This patch adds snd_soc_add_pcm_runtimes() which supports multi dai_links. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87h6u76nhq.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
8908c36dab
commit
ffaf886e24
@ -1302,8 +1302,9 @@ int snd_soc_of_get_dai_link_cpus(struct device *dev,
|
||||
struct snd_soc_dai_link *dai_link);
|
||||
void snd_soc_of_put_dai_link_cpus(struct snd_soc_dai_link *dai_link);
|
||||
|
||||
int snd_soc_add_pcm_runtime(struct snd_soc_card *card,
|
||||
struct snd_soc_dai_link *dai_link);
|
||||
int snd_soc_add_pcm_runtimes(struct snd_soc_card *card,
|
||||
struct snd_soc_dai_link *dai_link,
|
||||
int num_dai_link);
|
||||
void snd_soc_remove_pcm_runtime(struct snd_soc_card *card,
|
||||
struct snd_soc_pcm_runtime *rtd);
|
||||
|
||||
|
@ -194,12 +194,10 @@ static int avs_probing_link_init(struct snd_soc_pcm_runtime *rtm)
|
||||
return ret;
|
||||
}
|
||||
|
||||
for (n = 0; n < pcm_count; n++) {
|
||||
ret = snd_soc_add_pcm_runtime(card, &links[n]);
|
||||
if (ret < 0) {
|
||||
dev_err(card->dev, "add links failed: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
ret = snd_soc_add_pcm_runtimes(card, links, pcm_count);
|
||||
if (ret < 0) {
|
||||
dev_err(card->dev, "add links failed: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = avs_create_dapm_routes(card->dev, codec, pcm_count, &routes, &n);
|
||||
|
@ -959,8 +959,8 @@ EXPORT_SYMBOL_GPL(snd_soc_remove_pcm_runtime);
|
||||
* topology component. And machine drivers can still define static
|
||||
* DAI links in dai_link array.
|
||||
*/
|
||||
int snd_soc_add_pcm_runtime(struct snd_soc_card *card,
|
||||
struct snd_soc_dai_link *dai_link)
|
||||
static int snd_soc_add_pcm_runtime(struct snd_soc_card *card,
|
||||
struct snd_soc_dai_link *dai_link)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd;
|
||||
struct snd_soc_dai_link_component *codec, *platform, *cpu;
|
||||
@ -1027,7 +1027,21 @@ _err_defer:
|
||||
snd_soc_remove_pcm_runtime(card, rtd);
|
||||
return -EPROBE_DEFER;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_add_pcm_runtime);
|
||||
|
||||
int snd_soc_add_pcm_runtimes(struct snd_soc_card *card,
|
||||
struct snd_soc_dai_link *dai_link,
|
||||
int num_dai_link)
|
||||
{
|
||||
for (int i = 0; i < num_dai_link; i++) {
|
||||
int ret = snd_soc_add_pcm_runtime(card, dai_link + i);
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_add_pcm_runtimes);
|
||||
|
||||
static void snd_soc_runtime_get_dai_fmt(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
@ -1921,8 +1935,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd;
|
||||
struct snd_soc_component *component;
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
int ret, i;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&client_mutex);
|
||||
mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT);
|
||||
@ -1939,11 +1952,9 @@ static int snd_soc_bind_card(struct snd_soc_card *card)
|
||||
|
||||
/* add predefined DAI links to the list */
|
||||
card->num_rtd = 0;
|
||||
for_each_card_prelinks(card, i, dai_link) {
|
||||
ret = snd_soc_add_pcm_runtime(card, dai_link);
|
||||
if (ret < 0)
|
||||
goto probe_end;
|
||||
}
|
||||
ret = snd_soc_add_pcm_runtimes(card, card->dai_link, card->num_links);
|
||||
if (ret < 0)
|
||||
goto probe_end;
|
||||
|
||||
/* card bind complete so register a sound card */
|
||||
ret = snd_card_new(card->dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
|
||||
|
@ -1741,7 +1741,7 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg,
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = snd_soc_add_pcm_runtime(tplg->comp->card, link);
|
||||
ret = snd_soc_add_pcm_runtimes(tplg->comp->card, link, 1);
|
||||
if (ret < 0) {
|
||||
dev_err(tplg->dev, "ASoC: adding FE link failed\n");
|
||||
goto err;
|
||||
|
Loading…
Reference in New Issue
Block a user