return sdw_intel_thread(irq, context);
 }
 
+static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
+{
+       struct sof_intel_hda_dev *hdev;
+
+       hdev = sdev->pdata->hw_pdata;
+       if (hdev->sdw &&
+           snd_sof_dsp_read(sdev, HDA_DSP_BAR,
+                            HDA_DSP_REG_SNDW_WAKE_STS))
+               return true;
+
+       return false;
+}
+
 void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
 {
        struct sof_intel_hda_dev *hdev;
        if (hda_dsp_check_sdw_irq(sdev))
                hda_dsp_sdw_thread(irq, hdev->sdw);
 
+       if (hda_sdw_check_wakeen_irq(sdev))
+               hda_sdw_process_wakeen(sdev);
+
        /* enable GIE interrupt */
        snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR,
                                SOF_HDA_INTCTL,
 
 #define HDA_DSP_REG_ADSPIS2            (HDA_DSP_GEN_BASE + 0x14)
 
 #define HDA_DSP_REG_ADSPIS2_SNDW       BIT(5)
+#define HDA_DSP_REG_SNDW_WAKE_STS      0x2C192
 
 /* Intel HD Audio Inter-Processor Communication Registers */
 #define HDA_DSP_IPC_BASE               0x40
        return IRQ_HANDLED;
 }
 
+static inline bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
+{
+       return false;
+}
+
 static inline void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
 {
 }