Sorry for taking so long to look into this. 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. 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?