[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