From: Kuninori Morimoto <[email protected]>

Current simple-card is creating dai_link->name / dai_link->stream_name.
These are based on CPU + Codec name.
It can be "fe.CPU" or "be.Codec" if it was DPCM.
This patch adds simple card common function for it.

Signed-off-by: Kuninori Morimoto <[email protected]>
---
 include/sound/simple_card_utils.h     |  2 ++
 sound/soc/generic/simple-card-utils.c | 42 +++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/include/sound/simple_card_utils.h 
b/include/sound/simple_card_utils.h
index 6bb2c5f..41e567b 100644
--- a/include/sound/simple_card_utils.h
+++ b/include/sound/simple_card_utils.h
@@ -29,5 +29,7 @@ int asoc_simple_card_parse_daifmt(struct device *dev,
                                  unsigned int *retfmt);
 int asoc_simple_card_parse_tdm(struct device_node *port_np,
                               struct asoc_simple_dai *simple_dai);
+int asoc_simple_card_parse_dailink_name(struct device *dev,
+                                       struct snd_soc_dai_link *dai_link);
 
 #endif /* __SIMPLE_CARD_CORE_H */
diff --git a/sound/soc/generic/simple-card-utils.c 
b/sound/soc/generic/simple-card-utils.c
index 86fb2cf..9b49b5a 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -63,3 +63,45 @@ int asoc_simple_card_parse_tdm(struct device_node *port_np,
                                         &simple_dai->slot_width);
 }
 EXPORT_SYMBOL_GPL(asoc_simple_card_parse_tdm);
+
+int asoc_simple_card_parse_dailink_name(struct device *dev,
+                                       struct snd_soc_dai_link *dai_link)
+{
+       char *name = NULL;
+       int ret = -ENOMEM;
+
+       if (dai_link->dynamic && dai_link->cpu_dai_name) {
+               name = devm_kzalloc(dev,
+                                   strlen(dai_link->cpu_dai_name) + 4,
+                                   GFP_KERNEL);
+               if (name)
+                       sprintf(name, "fe.%s", dai_link->cpu_dai_name);
+
+       } else if (dai_link->no_pcm && dai_link->codec_dai_name) {
+               name = devm_kzalloc(dev,
+                                   strlen(dai_link->codec_dai_name) + 4,
+                                   GFP_KERNEL);
+               if (name)
+                       sprintf(name, "be.%s", dai_link->codec_dai_name);
+       } else if (dai_link->cpu_dai_name && dai_link->codec_dai_name) {
+               name = devm_kzalloc(dev,
+                                   strlen(dai_link->cpu_dai_name)   +
+                                   strlen(dai_link->codec_dai_name) + 2,
+                                   GFP_KERNEL);
+               if (name) {
+                       sprintf(name, "%s-%s",
+                               dai_link->cpu_dai_name,
+                               dai_link->codec_dai_name);
+               }
+       }
+
+       if (name) {
+               ret = 0;
+
+               dai_link->name =
+                       dai_link->stream_name = name;
+       }
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(asoc_simple_card_parse_dailink_name);
-- 
1.9.1

Reply via email to