ALSA: hda: Refactor display power management
authorTakashi Iwai <tiwai@suse.de>
Sat, 8 Dec 2018 16:31:49 +0000 (17:31 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 11 Dec 2018 07:06:55 +0000 (08:06 +0100)
commit029d92c289bdad08ed08e61bf31b17cdc9ee61cf
treeaaccdd1b5f6aefc45c9406def67b6d142deeba0b
parent3baffc4a84d759ba54c461e8e4583bd8890c749a
ALSA: hda: Refactor display power management

The current HD-audio code manages the DRM audio power via too complex
redirections, and this seems even still unbalanced in a corner case as
Intel DRM CI has been intermittently reporting.  This patch is a big
surgery for addressing the complexity and the possible unbalance.

Basically the patch changes the display PM in the following ways:

- Both HD-audio controller and codec drivers call a single helper,
  snd_hdac_display_power().  (Formerly, the display power control from
  a codec was done indirectly via link_power bus ops.)

- snd_hdac_display_power() receives the codec address index.  For
  turning on/off from the controller, pass HDA_CODEC_IDX_CONTROLLER.

- snd_hdac_display_power() doesn't manage refcounts any longer, but
  keeps the power status in bitmap.  If any of controller or codecs is
  turned on, the function updates the DRM power state via get_power()
  or put_power().

Also this refactor allows us more cleanup:

- The link_power bus ops is dropped, so there is no longer indirect
  management, as mentioned in the above.

- hdac_device link_power_control flag is moved to hda_codec
  display_power_control flag, as it's only for HDA legacy.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106525
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/hda_codec.h
include/sound/hda_component.h
include/sound/hdaudio.h
sound/hda/hdac_component.c
sound/hda/hdac_device.c
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_controller.c
sound/pci/hda/hda_intel.c
sound/pci/hda/patch_hdmi.c
sound/soc/codecs/hdac_hdmi.c
sound/soc/intel/skylake/skl.c