Hi Charles
Thank you for your help
static int snd_soc_instantiate_card(struct snd_soc_card *card) {
=> snd_soc_dapm_debugfs_init() => snd_soc_dapm_new_controls(...) => snd_soc_dapm_link_dai_widgets() => snd_soc_dapm_connect_dai_link_widgets() => snd_soc_add_card_controls() => snd_soc_dapm_add_routes() => snd_soc_dapm_new_widgets() => dapm_mark_endpoints_dirty() => snd_soc_dapm_sync()
card->probe(..) soc_probe_link_components(...) soc_probe_aux_device(...) soc_bind_dai_link(...) soc_probe_link_dais snprintf(...) card->late_probe() snd_card_register()
=> /* or dapm setup here instead ? */ }
(snip)
There are definitely some dependencies for example component probes will add widgets, controls and routes from those components so those will need to be done before the card level routes are added. The card level routes may link to widgets on individual components.
Also the DAPM sync definitely needs to be after everything has been setup.
I wouldn't be surprised if there are others as well, things like creating the DAI link widgets are probably done through some of these helpers and probably need to be at certain points in the process.
Thank for your information ! I think we can do some cleanup there, but need more investigation. I guess, the point is card->probe, and card->late_probe (?)
Thank you for your help !! Best regards --- Kuninori Morimoto