Hi,
In our driver, the machine probe creates the soc-audio device. I am adding the codec and platform device in my soc-device. But the probe for the codec doesn't get called unless we add the cpu and codec dais in the machine probe. I saw the soc-core code and looks like it checks if cpu and codec dais are registerd if so then only proceeds and calls the codec probe.
So should I continue to register the dai for both cpu and codec in machine probe. I didn't see other driver in soc/ doing this, so did I miss something.
Code: In m/c driver... (the m/c driver probe is called by kernel when it finds this device, and I register it as a platform device)
/* Audio machine driver */ static struct snd_soc_card snd_soc_intelmid_card = { .name = "intel_mid_sound_card", .platform = &intelmid_soc_platform, .dai_link = intelmid_msic_dai, .num_links = 1, };
/* Audio subsystem */ static struct snd_soc_device intelmid_snd_devdata = { .card = &snd_soc_intelmid_card, .codec_dev = &intel_msic_codec, }; int __devinit snd_intelmid_mc_probe(struct platform_device *pdev) { int ret_val;
snd_printk(KERN_DEBUG "snd_intelmad_probe called\n");
ret_val = snd_soc_register_dais(mid_bsp_dai, ARRAY_SIZE(mid_bsp_dai)); ret_val = snd_soc_register_dais(intel_msic_dais, ARRAY_SIZE(intel_msic_dais));
intelmid_snd_device = platform_device_alloc("soc-audio", -1); if (!intelmid_snd_device) { snd_printk(KERN_ERR "Platform device allocation failed\n"); return -ENOMEM; }
platform_set_drvdata(intelmid_snd_device, &intelmid_snd_devdata);
intelmid_snd_devdata.dev = &intelmid_snd_device->dev;
ret_val = platform_device_add(intelmid_snd_device); if (ret_val) { snd_printk(KERN_ERR "Unable to add platform device\n"); platform_device_put(intelmid_snd_device); } return ret_val; }
In platform init (note I don't have probe for platform) static int __init intel_mid_soc_platform_init(void) { snd_printk(KERN_DEBUG "intel_mid_soc_platform_init called\n"); return snd_soc_register_platform(&intelmid_soc_platform); }
Thanks Vinod