[alsa-devel] Question about dapm setup

Charles Keepax ckeepax at opensource.cirrus.com
Wed May 29 12:34:39 CEST 2019


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


More information about the Alsa-devel mailing list