Message ID | 877feasj3i.wl%kuninori.morimoto.gx@renesas.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Geert Uytterhoeven |
Headers | show |
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?
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 --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);