[alsa-devel] Question about pinctrl_pm_select_xxx()

Kuninori Morimoto kuninori.morimoto.gx at renesas.com
Wed Jun 19 09:22:11 CEST 2019


Hi ALSA ML

I noticed pinctrl_pm_select_xxx() unbalance.

I think these are paired function

	pinctrl_pm_select_default_state()
	pinctrl_pm_select_sleep_state()

I can find pinctrl_pm_select_sleep_state() for component at
snd_soc_suspend().

	int snd_soc_suspend(struct device *dev)
	{
		...
		if (!snd_soc_component_is_suspended(component)) {
			switch (snd_soc_dapm_get_bias_level(dapm)) {
			...
			case SND_SOC_BIAS_OFF:
				...
				/* deactivate pins to sleep state */
=>				pinctrl_pm_select_sleep_state(component->dev);
				break;
			}
			...
		}
		...
	}

But, I can't find its paired pinctrl_pm_select_default_state().
It looks strange for me. Is this really needed ??

And about pinctrl_pm_select_xxx() for CPU/Codec DAI,
Many places are calling pinctrl_pm_select_xxx() for both CPU/Codec.
snd_soc_suspend() cares only CPU only, but snd_soc_resume() cares both.
Is this bug ??

	int snd_soc_suspend(struct device *dev)
	{
		...
		for_each_card_rtds(card, rtd) {
			/* deactivate pins to sleep state */
=>			pinctrl_pm_select_sleep_state(cpu_dai->dev);
		}
		...
	}

	int snd_soc_resume(struct device *dev)
	{
		...
		for_each_card_rtds(card, rtd) {
			...
			if (cpu_dai->active)
=>				pinctrl_pm_select_default_state(cpu_dai->dev);

			for_each_rtd_codec_dai(rtd, i, codec_dai) {
				if (codec_dai->active)
=>					pinctrl_pm_select_default_state(codec_dai->dev);
			}
		}
		...
	}


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


More information about the Alsa-devel mailing list