[alsa-devel] Question: Can aux_dev suspend/resume ?
    Kuninori Morimoto 
    kuninori.morimoto.gx at renesas.com
       
    Thu Jan 16 06:28:31 CET 2020
    
    
  
Hi ALSA ML
I'm checking ALSA SoC framework.
Now, many Components are connected to Card.
When we want to do something to all Components,
we have 2 type of loops
1)	for_each_card_components(card, component) {
		...
	}
2)	for_each_card_rtds(card, rtd) {
		for_each_rtd_components(rtd, i, component) {
			...
		}
	}
But, I noticed that these 1) and 2) are not same.
Please double check it.
We have 3 ways to connect Component to Card.
	a) via Card pre-linked Aux  (= card->aux_dev)
	b) via Card pre-linked link (= card->dai_link)
	c) via Topology dai_link
	static int snd_soc_bind_card(struct snd_soc_card *card)
	{
		...
	a)	ret = soc_bind_aux_dev(card);
		...
		for_each_card_prelinks(card, i, dai_link) {
	b)		ret = snd_soc_add_pcm_runtime(card, dai_link);
			...
		}
		...
	c)	ret = snd_soc_card_probe(card);
		...
	X)	ret = soc_probe_link_components(card);
		...
	Y)	ret = soc_probe_aux_devices(card);
		...
Here, b) and c) has dai_link / rtd.
And, connected Component are probed at X) (= b) + c)) Y) (= a)).
Then, probed Component are connected to card->component_dev_list.
Above 1) loop is based on it.
In total, 1) and 2) loop difference are
	1) loop is for a) + b) + c)
	2) loop is for      b) + c)
Now, ALSA SoC suspend/resume checks below,
but a) doesn't have it.
	rtd->dai_link->ignore_suspend.
Thus, "suspend" is using 2) loop,
but,  "resume"  is using 1) loop.
My question here is that can AUX suspend/resume ?
I think we need/want to use 1) loop for it.
Thank you for your help !!
Best regards
---
Kuninori Morimoto
    
    
More information about the Alsa-devel
mailing list