diff mbox

[06/39,v2] ASoC: simple-card-utils: add asoc_simple_card_parse_dailink_name()

Message ID 877feasj3i.wl%kuninori.morimoto.gx@renesas.com (mailing list archive)
State Changes Requested
Delegated to: Geert Uytterhoeven
Headers show

Commit Message

Kuninori Morimoto May 31, 2016, 9:01 a.m. UTC
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

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 <kuninori.morimoto.gx@renesas.com>
---
 include/sound/simple_card_utils.h     |  2 ++
 sound/soc/generic/simple-card-utils.c | 42 +++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+)

Comments

Mark Brown June 29, 2016, 6:14 p.m. UTC | #1
On Tue, May 31, 2016 at 09:01:09AM +0000, Kuninori Morimoto wrote:
> From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> 
> 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.

This looks like it's about putting DPCM into the DT.  Given that DPCM is
very much an implementation detail we're trying to get rid of this seems
like it's going in the wrong direction.  What's the intended use?
Kuninori Morimoto June 30, 2016, 5:32 a.m. UTC | #2
Hi Mark

> > From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> > 
> > 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.
> 
> This looks like it's about putting DPCM into the DT.  Given that DPCM is
> very much an implementation detail we're trying to get rid of this seems
> like it's going in the wrong direction.  What's the intended use?

My rsrc-card already supporting DPCM on DT.
This function is for name setting, for both DPCM card and normal simple-card.
It doesn't related to DPCM feature, just for name.
simple-card name will be created from CPU/Codec dai name, then,
we need to allocate memory for it, and dai_link name setting
So, this is for it.
diff mbox

Patch

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);