mirror of
https://github.com/torvalds/linux.git
synced 2024-12-23 19:31:53 +00:00
c4c8dd6ef8
The HD-audio controller does system-suspend and resume operations by directly calling its helpers __azx_runtime_suspend() and __azx_runtime_resume(). However, in general, we don't have to resume always the device fully at the system resume; typically, if a device has been runtime-suspended, we can leave it to runtime resume. Usually for achieving this, the driver would call pm_runtime_force_suspend() and pm_runtime_force_resume() pairs in the system suspend and resume ops. Unfortunately, this doesn't work for the resume path in our case. For handling the jack detection at the system resume, a child codec device may need the (literally) forcibly resume even if it's been runtime-suspended, and for that, the controller device must be also resumed even if it's been suspended. This patch is an attempt to improve the situation. It replaces the direct __azx_runtime_suspend()/_resume() calls with with pm_runtime_force_suspend() and pm_runtime_force_resume() with a slight trick as we've done for the codec side. More exactly: - azx_has_pm_runtime() check is dropped from azx_runtime_suspend() and azx_runtime_resume(), so that it can be properly executed from the system-suspend/resume path - The WAKEEN handling depends on the card's power state now; it's set and cleared only for the runtime-suspend - azx_resume() checks whether any codec may need the forcible resume beforehand. If the forcible resume is required, it does temporary PM refcount up/down for actually triggering the runtime resume. - A new helper function, hda_codec_need_resume(), is introduced for checking whether the codec needs a forcible runtime-resume, and the existing code is rewritten with that. BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=207043 Link: https://lore.kernel.org/r/20200413082034.25166-6-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de> |
||
---|---|---|
.. | ||
ca0132_regs.h | ||
hda_auto_parser.c | ||
hda_auto_parser.h | ||
hda_beep.c | ||
hda_beep.h | ||
hda_bind.c | ||
hda_codec.c | ||
hda_controller_trace.h | ||
hda_controller.c | ||
hda_controller.h | ||
hda_eld.c | ||
hda_generic.c | ||
hda_generic.h | ||
hda_hwdep.c | ||
hda_intel_trace.h | ||
hda_intel.c | ||
hda_intel.h | ||
hda_jack.c | ||
hda_jack.h | ||
hda_local.h | ||
hda_proc.c | ||
hda_sysfs.c | ||
hda_tegra.c | ||
hp_x360_helper.c | ||
Kconfig | ||
Makefile | ||
patch_analog.c | ||
patch_ca0110.c | ||
patch_ca0132.c | ||
patch_cirrus.c | ||
patch_cmedia.c | ||
patch_conexant.c | ||
patch_hdmi.c | ||
patch_realtek.c | ||
patch_si3054.c | ||
patch_sigmatel.c | ||
patch_via.c | ||
thinkpad_helper.c |