[PATCH 4/7] ASoC: qcom: common: Support parsing links without DPCM
Stephan Gerhold
stephan at gerhold.net
Thu Jul 23 20:39:01 CEST 2020
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.
Cc: Srinivas Kandagatla <srinivas.kandagatla at linaro.org>
Signed-off-by: Stephan Gerhold <stephan at gerhold.net>
---
sound/soc/qcom/common.c | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/sound/soc/qcom/common.c b/sound/soc/qcom/common.c
index 030df6026562..54f5bc60246f 100644
--- a/sound/soc/qcom/common.c
+++ b/sound/soc/qcom/common.c
@@ -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++;
--
2.27.0
More information about the Alsa-devel
mailing list