[alsa-devel] asoc multi-component: CPU DAI name is wrong

Timur Tabi timur at freescale.com
Mon Jul 26 20:57:46 CEST 2010


Liam Girdwood wrote:
> On Fri, 2010-07-23 at 13:56 -0500, Timur Tabi wrote:
>> Liam Girdwood wrote:
>> > My mistake, I'd missed something in the forward port. I've fixed the DAI
>> > naming problem and you should see your DAI use the correct name.
>>
>> Looks like you forgot something:
>>
>>   CC      sound/soc/soc-core.o
>> sound/soc/soc-core.c: In function 'snd_soc_register_dai':
>> sound/soc/soc-core.c:2872: error: 'struct snd_soc_dai' has no member
> named 'id'
>> sound/soc/soc-core.c: In function 'snd_soc_register_dais':
>> sound/soc/soc-core.c:2949: error: 'struct snd_soc_dai' has no member
> named 'id'
>> sound/soc/soc-core.c: In function 'snd_soc_register_platform':
>> sound/soc/soc-core.c:3004: error: 'struct snd_soc_platform' has no member
>> named 'id'
>> sound/soc/soc-core.c: In function 'snd_soc_register_codec':
>> sound/soc/soc-core.c:3102: error: 'struct snd_soc_codec' has no member
> named
>> 'id'
>> make[2]: *** [sound/soc/soc-core.o] Error 1
>> make[1]: *** [sound/soc] Error 2
>> make: *** [sound] Error 2
>>
> 
> Sorry, now fixed. Sound had somehow been disabled in my upstream .config
> and hence would build kernels.

I'm still seeing the problem:

fsl_ssi_probe:658 cpu_dai_drv.name=ssi at 16000
fsl_ssi_probe:713 name=snd-soc-mpc8610hpcd
mpc8610_hpcd_probe:312 cpu_dai_name=ssi at 16000
soc_bind_dai_link:1136 cpu_dai->name=e0016000.ssi,
dai_link->cpu_dai_name=ssi at 16000
soc_bind_dai_link:1136 cpu_dai->name=cs4270-hifi,
dai_link->cpu_dai_name=ssi at 16000
soc_bind_dai_link:1159 codec->name=cs4270-codec.0-004f,
dai_link->codec_name=cs4270-codec
soc_bind_dai_link:1194 platform->name=e0021180.dma-channel,
dai_link->platform_name=/soc at e0000000/dma at 21300/dma-channel at 0
soc_bind_dai_link:1194 platform->name=e0021100.dma-channel,
dai_link->platform_name=/soc at e0000000/dma at 21300/dma-channel at 0
soc_bind_dai_link:1136 cpu_dai->name=e0016000.ssi,
dai_link->cpu_dai_name=ssi at 16000
soc_bind_dai_link:1136 cpu_dai->name=cs4270-hifi,
dai_link->cpu_dai_name=ssi at 16000
soc_bind_dai_link:1159 codec->name=cs4270-codec.0-004f,
dai_link->codec_name=cs4270-codec
soc_bind_dai_link:1194 platform->name=e0021180.dma-channel,
dai_link->platform_name=/soc at e0000000/dma at 21300/dma-channel at 1
soc_bind_dai_link:1194 platform->name=e0021100.dma-channel,
dai_link->platform_name=/soc at e0000000/dma at 21300/dma-channel at 1
ALSA device list:
  No soundcards found.

Here's the code that sets the CPU DAI name (in fsl_ssi.c):

        /* The DAI name is the last part of the full name of the node. */
	p = strrchr(np->full_name, '/') + 1;
	ssi_private = kzalloc(sizeof(struct fsl_ssi_private) + strlen(p),
			      GFP_KERNEL);
	if (!ssi_private) {
		dev_err(&of_dev->dev, "could not allocate DAI object\n");
		return -ENOMEM;
	}

	strcpy(ssi_private->name, p);

	/* Initialize this copy of the CPU DAI driver structure */
	memcpy(&ssi_private->cpu_dai_drv, &fsl_ssi_dai_template,
	       sizeof(fsl_ssi_dai_template));
	ssi_private->cpu_dai_drv.name = ssi_private->name;
	printk(KERN_INFO "%s:%u cpu_dai_drv.name=%s\n", __func__, __LINE__,
ssi_private->cpu_dai_drv.name);

...

	ret = snd_soc_register_dai(&of_dev->dev, &ssi_private->cpu_dai_drv);

You can see above that cpu_dai_drv.name is set to "ssi at 16000", but when
soc_bind_dai_link() looks for it, cpu_dai->name is set to "e0016000.ssi".  I
don't know where that string comes from, but it's not coming from my code.




More information about the Alsa-devel mailing list