[PATCH v16 49/50] ASoC: qcom: Populate SoC components string

From: Wesley Cheng
Date: Thu Feb 15 2024 - 23:12:08 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.

Change-Id: I454631f8ddbceb7db6a65c7e5ab57bd918a2c88a
Signed-off-by: Wesley Cheng <quic_wcheng@xxxxxxxxxxx>
---
sound/soc/qcom/sm8250.c | 3 +++
sound/soc/qcom/usb_offload_utils.c | 22 ++++++++++++++++++++++
sound/soc/qcom/usb_offload_utils.h | 6 ++++++
3 files changed, 31 insertions(+)

diff --git a/sound/soc/qcom/sm8250.c b/sound/soc/qcom/sm8250.c
index a4e87dfb1b93..5e3007e2e061 100644
--- a/sound/soc/qcom/sm8250.c
+++ b/sound/soc/qcom/sm8250.c
@@ -39,6 +39,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;
}

diff --git a/sound/soc/qcom/usb_offload_utils.c b/sound/soc/qcom/usb_offload_utils.c
index 0be05c1f87a9..8b137e1593e5 100644
--- a/sound/soc/qcom/usb_offload_utils.c
+++ b/sound/soc/qcom/usb_offload_utils.c
@@ -26,4 +26,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");
diff --git a/sound/soc/qcom/usb_offload_utils.h b/sound/soc/qcom/usb_offload_utils.h
index 283e81f57f43..03780a12a326 100644
--- a/sound/soc/qcom/usb_offload_utils.h
+++ b/sound/soc/qcom/usb_offload_utils.h
@@ -10,11 +10,17 @@
#if IS_ENABLED(CONFIG_SND_SOC_QCOM_OFFLOAD_UTILS)
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);
#else
static inline int qcom_snd_usb_offload_jack_setup(struct snd_soc_pcm_runtime *rtd,
struct snd_soc_jack *jack, bool *jack_setup)
{
return -ENODEV;
}
+
+static inline int qcom_snd_add_components_string(struct snd_soc_pcm_runtime *rtd)
+{
+ return -ENODEV;
+}
#endif /* IS_ENABLED(CONFIG_SND_SOC_QCOM_OFFLOAD_UTILS) */
#endif /* __QCOM_SND_USB_OFFLOAD_UTILS_H__ */