ASoC: SOF: Intel: hda: fix hotplug when only codec is suspended
authorKai Vehmanen <kai.vehmanen@linux.intel.com>
Fri, 5 Nov 2021 11:16:55 +0000 (13:16 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 5 Nov 2021 12:58:11 +0000 (12:58 +0000)
commitfd572393baf0350835e8d822db588f679dc7bcb8
tree9c68e55f12bc93d96f41c15f62ab3f30e2c88236
parentd9835eaa3e9fb4770745294fef3f8416446178c0
ASoC: SOF: Intel: hda: fix hotplug when only codec is suspended

If codec is in runtime suspend, but controller is not, hotplug events
are missed as the codec has no way to alert the controller. Problem does
not occur if both controller and codec are active, or when both are
suspended.

An easy way to reproduce is to play an audio stream on one codec (e.g.
to HDMI/DP display codec), wait for other HDA codec to go to runtime
suspend, and then plug in a headset to the suspended codec. The jack
event is not reported correctly in this case. Another way to reproduce
is to force controller to stay active with
"snd_sof_pci.sof_pci_debug=0x1"

Fix the issue by reconfiguring the WAKEEN register when powering up/down
individual links, and handling control events in the interrupt handler.

Fixes: 87fc20e4a0cb ("ASoC: SOF: Intel: hda: use hdac_ext fine-grained link management")
Reported-by: Hui Wang <hui.wang@canonical.com>
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20211105111655.668777-1-kai.vehmanen@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-bus.c
sound/soc/sof/intel/hda-dsp.c
sound/soc/sof/intel/hda.c