ASoC: qcom: common: Support parsing links without DPCM
So far qcom_snd_parse_of() was only used to parse the device tree for boards using the QDSP6 driver together with DPCM. apq8016_sbc uses an almost identical version (apq8016_sbc_parse_of()) which parses links without DPCM. Given the similarity of the two functions it is useful to combine these two. To allow using qcom_snd_parse_of() in apq8016_sbc we need to support parsing links without DPCM as well. This is pretty simple: A DPCM link in the device tree is defined using: - DPCM frontend: "cpu" - DPCM backend: "cpu", "platform" and "codec" ... while a link without DPCM has "cpu" and "codec" (but no "platform"). Add a few more if conditions to handle links without DPCM correctly. Signed-off-by: Stephan Gerhold <stephan@gerhold.net> Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20200723183904.321040-5-stephan@gerhold.net Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
0a8c336a1e
Коммит
47ea884882
|
@ -84,7 +84,7 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
|
|||
goto err;
|
||||
}
|
||||
|
||||
if (codec && platform) {
|
||||
if (platform) {
|
||||
link->platforms->of_node = of_parse_phandle(platform,
|
||||
"sound-dai",
|
||||
0);
|
||||
|
@ -93,15 +93,24 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
|
|||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
} else {
|
||||
link->platforms->of_node = link->cpus->of_node;
|
||||
}
|
||||
|
||||
if (codec) {
|
||||
ret = snd_soc_of_get_dai_link_codecs(dev, codec, link);
|
||||
if (ret < 0) {
|
||||
dev_err(card->dev, "%s: codec dai not found\n", link->name);
|
||||
goto err;
|
||||
}
|
||||
link->no_pcm = 1;
|
||||
link->ignore_pmdown_time = 1;
|
||||
|
||||
if (platform) {
|
||||
/* DPCM backend */
|
||||
link->no_pcm = 1;
|
||||
link->ignore_pmdown_time = 1;
|
||||
}
|
||||
} else {
|
||||
/* DPCM frontend */
|
||||
dlc = devm_kzalloc(dev, sizeof(*dlc), GFP_KERNEL);
|
||||
if (!dlc)
|
||||
return -ENOMEM;
|
||||
|
@ -109,15 +118,18 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
|
|||
link->codecs = dlc;
|
||||
link->num_codecs = 1;
|
||||
|
||||
link->platforms->of_node = link->cpus->of_node;
|
||||
link->codecs->dai_name = "snd-soc-dummy-dai";
|
||||
link->codecs->name = "snd-soc-dummy";
|
||||
link->dynamic = 1;
|
||||
}
|
||||
|
||||
snd_soc_dai_link_set_capabilities(link);
|
||||
link->ignore_suspend = 1;
|
||||
link->nonatomic = 1;
|
||||
if (platform || !codec) {
|
||||
/* DPCM */
|
||||
snd_soc_dai_link_set_capabilities(link);
|
||||
link->ignore_suspend = 1;
|
||||
link->nonatomic = 1;
|
||||
}
|
||||
|
||||
link->stream_name = link->name;
|
||||
link++;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче