[PATCH v10 40/41] ASoC: qcom: Populate SoC components string

From: Wesley Cheng
Date: Fri Dec 15 2023 - 16:58:53 EST


For userspace to know about certain capabilities of the current platform
card, add tags to the components string that it can use to enable support
for that audio path. In case of USB offloading, the "usboffldplybk: 1" tag
is added to the string.

Signed-off-by: Wesley Cheng <quic_wcheng@xxxxxxxxxxx>
---
sound/soc/qcom/common.c | 22 ++++++++++++++++++++++
sound/soc/qcom/common.h | 1 +
sound/soc/qcom/sm8250.c | 3 +++
3 files changed, 26 insertions(+)

diff --git a/sound/soc/qcom/common.c b/sound/soc/qcom/common.c
index 2645436b08c4..4a4e4c14e625 100644
--- a/sound/soc/qcom/common.c
+++ b/sound/soc/qcom/common.c
@@ -258,4 +258,26 @@ int qcom_snd_usb_offload_jack_setup(struct snd_soc_pcm_runtime *rtd,
return 0;
}
EXPORT_SYMBOL_GPL(qcom_snd_usb_offload_jack_setup);
+
+int qcom_snd_add_components_string(struct snd_soc_pcm_runtime *rtd)
+{
+ struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
+ struct snd_soc_card *card = rtd->card;
+ const char *prev = card->components;
+
+ switch (cpu_dai->id) {
+ case USB_RX:
+ card->components = devm_kasprintf(card->dev, GFP_KERNEL, "%s %s",
+ card->components,
+ snd_soc_usb_get_components_tag(true));
+ default:
+ break;
+ }
+
+ if (prev && prev != card->components)
+ devm_kfree(card->dev, prev);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(qcom_snd_add_components_string);
MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/qcom/common.h b/sound/soc/qcom/common.h
index fca3046c8674..8546723e0aa8 100644
--- a/sound/soc/qcom/common.h
+++ b/sound/soc/qcom/common.h
@@ -11,4 +11,5 @@ int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime *rtd,
struct snd_soc_jack *jack, bool *jack_setup);
int qcom_snd_usb_offload_jack_setup(struct snd_soc_pcm_runtime *rtd,
struct snd_soc_jack *jack, bool *jack_setup);
+int qcom_snd_add_components_string(struct snd_soc_pcm_runtime *rtd);
#endif
diff --git a/sound/soc/qcom/sm8250.c b/sound/soc/qcom/sm8250.c
index c33a7c5fb8ad..d1c4f34d04f5 100644
--- a/sound/soc/qcom/sm8250.c
+++ b/sound/soc/qcom/sm8250.c
@@ -38,6 +38,9 @@ static int sm8250_snd_init(struct snd_soc_pcm_runtime *rtd)
&data->usb_offload_jack_setup);
else
ret = qcom_snd_wcd_jack_setup(rtd, &data->jack, &data->jack_setup);
+
+ qcom_snd_add_components_string(rtd);
+
return ret;
}