ASoC: SOF: Intel: hda-codec: add helpers to suspend and resume cmd_io
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Thu, 27 Oct 2022 19:35:34 +0000 (15:35 -0400)
committerMark Brown <broonie@kernel.org>
Fri, 28 Oct 2022 12:04:55 +0000 (13:04 +0100)
No functionality change, code move to have better split between
HDaudio codec management and core parts.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/20221027193540.259520-16-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-codec.c
sound/soc/sof/intel/hda-dsp.c
sound/soc/sof/intel/hda.h

index da76d2a2301a14b9509184616264090644113b57..9d5e6a71a44ff2a30228fd3092904129769e1d89 100644 (file)
@@ -269,6 +269,16 @@ void hda_codec_init_cmd_io(struct snd_sof_dev *sdev)
 }
 EXPORT_SYMBOL_NS_GPL(hda_codec_init_cmd_io, SND_SOC_SOF_HDA_AUDIO_CODEC);
 
+void hda_codec_resume_cmd_io(struct snd_sof_dev *sdev)
+{
+       struct hdac_bus *bus = sof_to_bus(sdev);
+
+       /* set up CORB/RIRB buffers if was on before suspend */
+       if (bus->cmd_dma_state)
+               snd_hdac_bus_init_cmd_io(bus);
+}
+EXPORT_SYMBOL_NS_GPL(hda_codec_resume_cmd_io, SND_SOC_SOF_HDA_AUDIO_CODEC);
+
 void hda_codec_stop_cmd_io(struct snd_sof_dev *sdev)
 {
        struct hdac_bus *bus = sof_to_bus(sdev);
@@ -278,6 +288,17 @@ void hda_codec_stop_cmd_io(struct snd_sof_dev *sdev)
 }
 EXPORT_SYMBOL_NS_GPL(hda_codec_stop_cmd_io, SND_SOC_SOF_HDA_AUDIO_CODEC);
 
+void hda_codec_suspend_cmd_io(struct snd_sof_dev *sdev)
+{
+       struct hdac_bus *bus = sof_to_bus(sdev);
+
+       /* stop the CORB/RIRB DMA if it is On */
+       if (bus->cmd_dma_state)
+               snd_hdac_bus_stop_cmd_io(bus);
+
+}
+EXPORT_SYMBOL_NS_GPL(hda_codec_suspend_cmd_io, SND_SOC_SOF_HDA_AUDIO_CODEC);
+
 void hda_codec_rirb_status_clear(struct snd_sof_dev *sdev)
 {
        struct hdac_bus *bus = sof_to_bus(sdev);
index d325e82aff4cfd9213be6bb95b1dd09f038e6530..2596de5e24d6efb81034ff90588fbf5f1900529c 100644 (file)
@@ -745,11 +745,10 @@ int hda_dsp_resume(struct snd_sof_dev *sdev)
                                }
                        }
                }
+#endif
 
                /* set up CORB/RIRB buffers if was on before suspend */
-               if (bus->cmd_dma_state)
-                       snd_hdac_bus_init_cmd_io(bus);
-#endif
+               hda_codec_resume_cmd_io(sdev);
 
                /* Set DSP power state */
                ret = snd_sof_dsp_set_power_state(sdev, &target_state);
@@ -858,11 +857,10 @@ int hda_dsp_suspend(struct snd_sof_dev *sdev, u32 target_state)
                                                HDA_VS_INTEL_EM2_L1SEN,
                                                HDA_VS_INTEL_EM2_L1SEN);
 
-#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
                /* stop the CORB/RIRB DMA if it is On */
-               if (bus->cmd_dma_state)
-                       snd_hdac_bus_stop_cmd_io(bus);
+               hda_codec_suspend_cmd_io(sdev);
 
+#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
                /* no link can be powered in s0ix state */
                ret = snd_hdac_ext_bus_link_power_down_all(bus);
                if (ret < 0) {
index 3b3e05e716636ca402b748ab1831f1835a855020..e1f3d03cd4f71d4a0ca106cc28cd5425111ae261 100644 (file)
@@ -719,7 +719,9 @@ void hda_codec_jack_wake_enable(struct snd_sof_dev *sdev, bool enable);
 void hda_codec_jack_check(struct snd_sof_dev *sdev);
 void hda_codec_check_for_state_change(struct snd_sof_dev *sdev);
 void hda_codec_init_cmd_io(struct snd_sof_dev *sdev);
+void hda_codec_resume_cmd_io(struct snd_sof_dev *sdev);
 void hda_codec_stop_cmd_io(struct snd_sof_dev *sdev);
+void hda_codec_suspend_cmd_io(struct snd_sof_dev *sdev);
 void hda_codec_detect_mask(struct snd_sof_dev *sdev);
 void hda_codec_rirb_status_clear(struct snd_sof_dev *sdev);
 bool hda_codec_check_rirb_status(struct snd_sof_dev *sdev);
@@ -733,7 +735,9 @@ static inline void hda_codec_jack_wake_enable(struct snd_sof_dev *sdev, bool ena
 static inline void hda_codec_jack_check(struct snd_sof_dev *sdev) { }
 static inline void hda_codec_check_for_state_change(struct snd_sof_dev *sdev) { }
 static inline void hda_codec_init_cmd_io(struct snd_sof_dev *sdev) { }
+static inline void hda_codec_resume_cmd_io(struct snd_sof_dev *sdev) { }
 static inline void hda_codec_stop_cmd_io(struct snd_sof_dev *sdev) { }
+static inline void hda_codec_suspend_cmd_io(struct snd_sof_dev *sdev) { }
 static inline void hda_codec_detect_mask(struct snd_sof_dev *sdev) { }
 static inline void hda_codec_rirb_status_clear(struct snd_sof_dev *sdev) { }
 static inline bool hda_codec_check_rirb_status(struct snd_sof_dev *sdev) { return false; }