linux/sound/pci/hda
Takashi Iwai c4c8dd6ef8 ALSA: hda: Skip controller resume if not needed
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>
2020-04-13 18:03:16 +02:00
..
ca0132_regs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 32 2019-05-24 17:27:10 +02:00
hda_auto_parser.c ASoC: Updates for v5.4 2019-09-10 13:03:08 +02:00
hda_auto_parser.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 46 2019-05-24 17:27:12 +02:00
hda_beep.c ALSA: hda: Fix potential access overflow in beep helper 2020-04-07 16:42:29 +02:00
hda_beep.h ALSA: hda - Use standard device registration for beep 2019-01-29 18:28:09 +01:00
hda_bind.c ALSA: hda - Fix pending unsol events at shutdown 2019-10-28 12:44:28 +01:00
hda_codec.c ALSA: hda: Skip controller resume if not needed 2020-04-13 18:03:16 +02:00
hda_controller_trace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
hda_controller.c ALSA: hda: remove redundant assignment to variable timeout 2020-02-10 08:29:46 +01:00
hda_controller.h Merge branch 'asoc-5.4' into asoc-next 2019-09-09 14:55:20 +01:00
hda_eld.c ALSA: hda: Use scnprintf() for printing texts for sysfs/procfs 2020-02-18 10:15:41 +01:00
hda_generic.c ALSA: hda: correct kernel-doc parameter descriptions 2020-01-14 07:47:44 +01:00
hda_generic.h ALSA: hda/realtek - Fix overridden device-specific initialization 2019-08-30 12:03:38 +02:00
hda_hwdep.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 32 2019-05-24 17:27:10 +02:00
hda_intel_trace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
hda_intel.c ALSA: hda: Skip controller resume if not needed 2020-04-13 18:03:16 +02:00
hda_intel.h ALSA: hda: Release resources at error in delayed probe 2020-04-13 18:02:36 +02:00
hda_jack.c ALSA: hda: correct kernel-doc parameter descriptions 2020-01-14 07:47:44 +01:00
hda_jack.h ALSA: hda - Add DP-MST jack support 2019-11-19 11:51:07 +01:00
hda_local.h ALSA: hda: Manage concurrent reg access more properly 2020-01-13 13:40:41 +01:00
hda_proc.c ALSA: hda: More constifications 2020-01-05 16:14:32 +01:00
hda_sysfs.c ALSA: hda: Use scnprintf() for printing texts for sysfs/procfs 2020-02-18 10:15:41 +01:00
hda_tegra.c Merge branch 'for-linus' into for-next 2020-01-20 11:44:51 +01:00
hp_x360_helper.c ALSA: hda/realtek - Fixup for HP x360 laptops with B&O speakers 2018-05-29 22:33:37 +02:00
Kconfig ALSA: hda: default enable CA0132 DSP support 2020-03-29 09:43:45 +02:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
patch_analog.c ALSA: hda/analog - Minor optimization for SPDIF mux connections 2020-01-16 17:29:17 +01:00
patch_ca0110.c ALSA: hda: Unify get_response handling 2019-12-13 14:36:52 +01:00
patch_ca0132.c Merge branch 'for-next' into for-linus 2020-03-30 09:46:51 +02:00
patch_cirrus.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 32 2019-05-24 17:27:10 +02:00
patch_cmedia.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 32 2019-05-24 17:27:10 +02:00
patch_conexant.c Merge branch 'for-linus' into for-next 2020-01-26 09:31:41 +01:00
patch_hdmi.c ALSA: hda/hdmi: Move ELD parse and jack reporting into update_eld() 2020-02-10 08:24:11 +01:00
patch_realtek.c ALSA: hda/realtek - Enable the headset mic on Asus FX505DT 2020-04-11 08:47:49 +02:00
patch_si3054.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 32 2019-05-24 17:27:10 +02:00
patch_sigmatel.c ALSA: hda - constify and cleanup static NodeID tables 2020-01-03 10:38:38 +01:00
patch_via.c ALSA: hda: Manage concurrent reg access more properly 2020-01-13 13:40:41 +01:00
thinkpad_helper.c ALSA: hda - Support led audio trigger 2018-11-28 23:25:22 +01:00