[alsa-devel] [PATCH 2/5 v7][RFC] ASoC: add .of_xlate_dai_name on snd_soc_cpu_cpu/codec_driver

Stephen Warren swarren at wwwdotorg.org
Wed Feb 27 23:56:50 CET 2013


On 02/25/2013 01:53 AM, Kuninori Morimoto wrote:
> ASoC sound driver requires CPU/CODEC drivers for probing,
> and each CPU/CODEC has some DAI on it.
> Then, "dai name matching" have been used to identify
> CPU-CODEC DAI pair on ASoC.
> 
> But, the "dai port number matching" is now required from DeviceTree.
> The solution of this issue is to replace the dai port number into dai name,
> and it needs some kind of .of_xlate function on each driver.
> 
> This patch adds .of_xlate_dai_name callback interface
> on each struct snd_soc_cpu/codec_driver,
> and snd_soc_of_get_cpu/codec_dai_name() which is using .of_xlate_dai_name.
> 
> Then, #sound-dai-cells which enables DAI specifier is required
> on CPU/CODEC device tree properties.

> diff --git a/include/sound/soc.h b/include/sound/soc.h

>  struct snd_soc_cpu_driver {
> +	/* DT */
> +	int (*of_xlate_dai_name)(struct snd_soc_cpu *codec,

s/codec/cpu/

> +int snd_soc_of_get_codec_dai_name(struct device_node *of_node,
> +				  const char **dai_name);
> +int snd_soc_of_get_cpu_dai_name(struct device_node *of_node,
> +				const char **dai_name);

I think you need to return the CODEC and CPU object or name here too.
That'll be needed to fill in the machine driver's {codec,cpu}_of_node
DAI link fields.

> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c

> +#define SND_SOC_OF_GET_DAI_NAME(contents) \
> +int snd_soc_of_get_ ## contents ## _dai_name(struct device_node *of_node,\

I would personally leave out the spaces around the ##; seems more
readable to me, but maybe you'd disagree.

s/contents/type/?

...
> +	mutex_lock(&client_mutex);					\
> +	list_for_each_entry(pos, &contents ## _list, list) {		\
> +		if (pos->dev->of_node != args.np)			\
> +			continue;					\
> +									\
> +		if (!pos->driver->of_xlate_dai_name) {			\
> +			ret = -EIO;					\

-ENOSYS seems more appropriate. Even if not, EIO doesn't seem right.

> +EXPORT_SYMBOL_GPL(snd_soc_of_get_codec_dai_name);

I think you can put that macro call into SND_SOC_OF_GET_DAI_NAME().


More information about the Alsa-devel mailing list