ASoC: soc-core: move soc_link_init()
This patch moves soc_link_init() to upper side. This is prepare for its cleanup. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/871rtdyq5g.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
bfa0dd8953
commit
46496acbe1
@ -1123,6 +1123,78 @@ static int soc_dai_pcm_new(struct snd_soc_dai **dais, int num_dais,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int soc_link_init(struct snd_soc_card *card,
|
||||
struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct snd_soc_dai_link *dai_link = rtd->dai_link;
|
||||
struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
|
||||
struct snd_soc_rtdcom_list *rtdcom;
|
||||
struct snd_soc_component *component;
|
||||
int ret, num;
|
||||
|
||||
/* set default power off timeout */
|
||||
rtd->pmdown_time = pmdown_time;
|
||||
|
||||
/* do machine specific initialization */
|
||||
if (dai_link->init) {
|
||||
ret = dai_link->init(rtd);
|
||||
if (ret < 0) {
|
||||
dev_err(card->dev, "ASoC: failed to init %s: %d\n",
|
||||
dai_link->name, ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (dai_link->dai_fmt) {
|
||||
ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* add DPCM sysfs entries */
|
||||
soc_dpcm_debugfs_add(rtd);
|
||||
|
||||
num = rtd->num;
|
||||
|
||||
/*
|
||||
* most drivers will register their PCMs using DAI link ordering but
|
||||
* topology based drivers can use the DAI link id field to set PCM
|
||||
* device number and then use rtd + a base offset of the BEs.
|
||||
*/
|
||||
for_each_rtd_components(rtd, rtdcom, component) {
|
||||
if (!component->driver->use_dai_pcm_id)
|
||||
continue;
|
||||
|
||||
if (rtd->dai_link->no_pcm)
|
||||
num += component->driver->be_pcm_base;
|
||||
else
|
||||
num = rtd->dai_link->id;
|
||||
}
|
||||
|
||||
/* create compress_device if possible */
|
||||
ret = snd_soc_dai_compress_new(cpu_dai, rtd, num);
|
||||
if (ret != -ENOTSUPP) {
|
||||
if (ret < 0)
|
||||
dev_err(card->dev, "ASoC: can't create compress %s\n",
|
||||
dai_link->stream_name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* create the pcm */
|
||||
ret = soc_new_pcm(rtd, num);
|
||||
if (ret < 0) {
|
||||
dev_err(card->dev, "ASoC: can't create pcm %s :%d\n",
|
||||
dai_link->stream_name, ret);
|
||||
return ret;
|
||||
}
|
||||
ret = soc_dai_pcm_new(&cpu_dai, 1, rtd);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = soc_dai_pcm_new(rtd->codec_dais,
|
||||
rtd->num_codecs, rtd);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void soc_set_of_name_prefix(struct snd_soc_component *component)
|
||||
{
|
||||
struct device_node *of_node = soc_component_to_node(component);
|
||||
@ -1400,78 +1472,6 @@ static int soc_probe_link_components(struct snd_soc_card *card)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int soc_link_init(struct snd_soc_card *card,
|
||||
struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct snd_soc_dai_link *dai_link = rtd->dai_link;
|
||||
struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
|
||||
struct snd_soc_rtdcom_list *rtdcom;
|
||||
struct snd_soc_component *component;
|
||||
int ret, num;
|
||||
|
||||
/* set default power off timeout */
|
||||
rtd->pmdown_time = pmdown_time;
|
||||
|
||||
/* do machine specific initialization */
|
||||
if (dai_link->init) {
|
||||
ret = dai_link->init(rtd);
|
||||
if (ret < 0) {
|
||||
dev_err(card->dev, "ASoC: failed to init %s: %d\n",
|
||||
dai_link->name, ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (dai_link->dai_fmt) {
|
||||
ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* add DPCM sysfs entries */
|
||||
soc_dpcm_debugfs_add(rtd);
|
||||
|
||||
num = rtd->num;
|
||||
|
||||
/*
|
||||
* most drivers will register their PCMs using DAI link ordering but
|
||||
* topology based drivers can use the DAI link id field to set PCM
|
||||
* device number and then use rtd + a base offset of the BEs.
|
||||
*/
|
||||
for_each_rtd_components(rtd, rtdcom, component) {
|
||||
if (!component->driver->use_dai_pcm_id)
|
||||
continue;
|
||||
|
||||
if (rtd->dai_link->no_pcm)
|
||||
num += component->driver->be_pcm_base;
|
||||
else
|
||||
num = rtd->dai_link->id;
|
||||
}
|
||||
|
||||
/* create compress_device if possible */
|
||||
ret = snd_soc_dai_compress_new(cpu_dai, rtd, num);
|
||||
if (ret != -ENOTSUPP) {
|
||||
if (ret < 0)
|
||||
dev_err(card->dev, "ASoC: can't create compress %s\n",
|
||||
dai_link->stream_name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* create the pcm */
|
||||
ret = soc_new_pcm(rtd, num);
|
||||
if (ret < 0) {
|
||||
dev_err(card->dev, "ASoC: can't create pcm %s :%d\n",
|
||||
dai_link->stream_name, ret);
|
||||
return ret;
|
||||
}
|
||||
ret = soc_dai_pcm_new(&cpu_dai, 1, rtd);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = soc_dai_pcm_new(rtd->codec_dais,
|
||||
rtd->num_codecs, rtd);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void soc_unbind_aux_dev(struct snd_soc_card *card)
|
||||
{
|
||||
struct snd_soc_component *component, *_component;
|
||||
|
Loading…
Reference in New Issue
Block a user