On Fri, Aug 18, 2023 at 12:09:19AM +0300, Marian Postevca wrote:
Sorry for taking so long to look into this.
You didn't quote any context here so it's not 100% clear what "this" is...
I think I understand why sound doesn't work if suspending with headphones inserted. When the jack is inserted, function es8316_enable_micbias_for_mic_gnd_short_detect() is called and 3 pins are enabled: Bias, Analog power, Mic Bias.
Since these 3 are supplies, the loop for_each_card_widgets() in dapm_power_widgets() will always force the target_bias_level to be SND_SOC_BIAS_STANDBY. So the codec component will never enter SND_SOC_BIAS_OFF bias level.
When a suspend happens (with the headphones inserted) in snd_soc_suspend(), in the for_each_rtd_components() loop, since the bias level is SND_SOC_BIAS_STANDBY and dapm->idle_bias_off is true the codec's suspend/resume functions are not called. Because of this the codec stops running correctly.
This is saying that the machine driver should disable jack detection over suspend and restart it during resume. The machine driver should suspend before the rest of the card which should mean that the CODEC gets powered off then. The core can't tell if jack detection is supposed to work over suspend, it is a standard wake event on systems like phones, but it sounds like on this system the power gets removed from the device so that can't work.
Now I'm not sure what a proper fix would be. Enabling idle_bias_on in struct snd_soc_component_driver fixes this issue. Would enabling this option have any unwanted side effects?
I don't understand why that would be expected to help? The main effect of keeping the bias on all the time would be to consume more power.