[alsa-devel] Question about dapm setup

Kuninori Morimoto kuninori.morimoto.gx at renesas.com
Thu May 30 02:12:10 CEST 2019


Hi Charles

> > 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.
(snip)
> 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.
(snip)
> This needs to be before the routes are added so that the routes
> can find their associated controls.
(snip)
> And the routes also obviously need to be after the widgets are
> added as well.
(snip)
> Hope that is roughly the sort of thing you were interested in.

Thanks !! Nice to know !!
It is very clear for dapm setup timing.

But, it was my fault, the question was not clear.
I wanted to know was that there are many non dapm functions
are called between dapm setup.
pseudo code is..

	static int snd_soc_instantiate_card(struct snd_soc_card *card)
	{
		...

=>		snd_soc_dapm_debugfs_init()
=>		snd_soc_dapm_new_controls(...)

		card->probe(..)
		soc_probe_link_components(...)
		soc_probe_aux_device(...)
		soc_bind_dai_link(...)
		soc_probe_link_dais

=>		snd_soc_dapm_link_dai_widgets()
=>		snd_soc_dapm_connect_dai_link_widgets()
=>		snd_soc_add_card_controls()
=>		snd_soc_dapm_add_routes()

		snprintf(...)
		card->late_probe()

=>		snd_soc_dapm_new_widgets()
	
		snd_card_register()

=>		dapm_mark_endpoints_dirty()
=>		snd_soc_dapm_sync()
		...
	}

It looks very random. So my original question was
can we do like this (with keeping dapm order)?

	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 ? */
	}

For example, snd_soc_dapm_xxx() should be called before/after
card->probe() etc, etc...


Thank you for your help !!
Best regards
---
Kuninori Morimoto


More information about the Alsa-devel mailing list