On Wed, May 29, 2019 at 01:50:07PM +0900, Kuninori Morimoto wrote:
Hi ALSA ML
snd_soc_instantiate_card() setups dapm, but its timing seems very randomly for me. In my understanding, dapm setup timing is not so serious. So, I think we can do it in one place, but are there some reasons ? For example, "xxxx should be called after yyyy"
There are certainly reasons for some of it, but might be easier to explain what you are thinking of moving, rather than trying to list all dependencies.
static int snd_soc_instantiate_card(struct snd_soc_card *card) { ...
=> snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root);
...
if (card->dapm_widgets) snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets, card->num_dapm_widgets);
if (card->of_dapm_widgets) snd_soc_dapm_new_controls(&card->dapm, card->of_dapm_widgets, card->num_of_dapm_widgets);
...
snd_soc_dapm_link_dai_widgets(card); snd_soc_dapm_connect_dai_link_widgets(card);
For example we need the calls to snd_soc_dapm_new_controls to be before these two so that the widgets exist for linking them.
if (card->controls) snd_soc_add_card_controls(card, card->controls, card->num_controls);
This needs to be before the routes are added so that the routes can find their associated controls.
if (card->dapm_routes) snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes, card->num_dapm_routes);
if (card->of_dapm_routes) snd_soc_dapm_add_routes(&card->dapm, card->of_dapm_routes, card->num_of_dapm_routes); ...
And the routes also obviously need to be after the widgets are added as well.
snd_soc_dapm_new_widgets(card);
...
dapm_mark_endpoints_dirty(card); snd_soc_dapm_sync(&card->dapm); ... }
Hope that is roughly the sort of thing you were interested in.
Thanks, Charles