diff options
author | Mark Brown <broonie@kernel.org> | 2021-02-05 18:01:21 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2021-02-05 18:01:21 +0300 |
commit | 2927e6d398d0fca52d8f011a89dcfcabb2b1abfd (patch) | |
tree | 30ddd4cddded855db423c290512d7be7c13dc9db /sound/soc/sof/intel/hda-dsp.c | |
parent | 6395a6213b8367bb55c3b940f663eda772d7c19c (diff) | |
parent | b976a5adf32eee7db928b5b77cffa3b008ebf2ff (diff) | |
download | linux-2927e6d398d0fca52d8f011a89dcfcabb2b1abfd.tar.xz |
Merge branch 'asoc-5.11' into asoc-5.12
Diffstat (limited to 'sound/soc/sof/intel/hda-dsp.c')
-rw-r--r-- | sound/soc/sof/intel/hda-dsp.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/sound/soc/sof/intel/hda-dsp.c b/sound/soc/sof/intel/hda-dsp.c index 4fe4175179d4..e92e9750b720 100644 --- a/sound/soc/sof/intel/hda-dsp.c +++ b/sound/soc/sof/intel/hda-dsp.c @@ -617,7 +617,7 @@ static int hda_suspend(struct snd_sof_dev *sdev, bool runtime_suspend) #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) if (runtime_suspend) - hda_codec_jack_wake_enable(sdev); + hda_codec_jack_wake_enable(sdev, true); /* power down all hda link */ snd_hdac_ext_bus_link_power_down_all(bus); @@ -683,8 +683,11 @@ static int hda_resume(struct snd_sof_dev *sdev, bool runtime_resume) #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) /* check jack status */ - if (runtime_resume) - hda_codec_jack_check(sdev); + if (runtime_resume) { + hda_codec_jack_wake_enable(sdev, false); + if (sdev->system_suspend_target == SOF_SUSPEND_NONE) + hda_codec_jack_check(sdev); + } /* turn off the links that were off before suspend */ list_for_each_entry(hlink, &bus->hlink_list, list) { @@ -799,11 +802,15 @@ int hda_dsp_runtime_idle(struct snd_sof_dev *sdev) int hda_dsp_runtime_suspend(struct snd_sof_dev *sdev) { + struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; const struct sof_dsp_power_state target_state = { .state = SOF_DSP_PM_D3, }; int ret; + /* cancel any attempt for DSP D0I3 */ + cancel_delayed_work_sync(&hda->d0i3_work); + /* stop hda controller and power dsp off */ ret = hda_suspend(sdev, true); if (ret < 0) |