.read_sdw_lcount =  hda_sdw_check_lcount_common,
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
+       .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
        .read_sdw_lcount =  hda_sdw_check_lcount_common,
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
+       .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
 
        return sdw_intel_thread(irq, context);
 }
 
-static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
+bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev)
 {
-       u32 interface_mask = hda_get_interface_mask(sdev);
        struct sof_intel_hda_dev *hdev;
 
-       if (!(interface_mask & BIT(SOF_DAI_INTEL_ALH)))
-               return false;
-
        hdev = sdev->pdata->hw_pdata;
        if (hdev->sdw &&
            snd_sof_dsp_read(sdev, HDA_DSP_BAR,
        return false;
 }
 
+static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
+{
+       u32 interface_mask = hda_get_interface_mask(sdev);
+       const struct sof_intel_dsp_desc *chip;
+
+       if (!(interface_mask & BIT(SOF_DAI_INTEL_ALH)))
+               return false;
+
+       if (chip && chip->check_sdw_wakeen_irq)
+               return chip->check_sdw_wakeen_irq(sdev);
+
+       return false;
+}
+
 void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
 {
        u32 interface_mask = hda_get_interface_mask(sdev);
 
 int hda_sdw_startup(struct snd_sof_dev *sdev);
 void hda_common_enable_sdw_irq(struct snd_sof_dev *sdev, bool enable);
 void hda_sdw_int_enable(struct snd_sof_dev *sdev, bool enable);
+bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev);
 void hda_sdw_process_wakeen(struct snd_sof_dev *sdev);
 bool hda_common_check_sdw_irq(struct snd_sof_dev *sdev);
 
 {
 }
 
+static inline bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev)
+{
+       return false;
+}
+
 static inline void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
 {
 }
 
        .read_sdw_lcount =  hda_sdw_check_lcount_common,
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
+       .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
 
        .read_sdw_lcount =  hda_sdw_check_lcount_common,
        .enable_sdw_irq = mtl_enable_sdw_irq,
        .check_sdw_irq = mtl_dsp_check_sdw_irq,
+       .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
        .check_ipc_irq = mtl_dsp_check_ipc_irq,
        .cl_init = mtl_dsp_cl_init,
        .power_down_dsp = mtl_power_down_dsp,
 
        int (*read_sdw_lcount)(struct snd_sof_dev *sdev);
        void (*enable_sdw_irq)(struct snd_sof_dev *sdev, bool enable);
        bool (*check_sdw_irq)(struct snd_sof_dev *sdev);
+       bool (*check_sdw_wakeen_irq)(struct snd_sof_dev *sdev);
        bool (*check_ipc_irq)(struct snd_sof_dev *sdev);
        int (*power_down_dsp)(struct snd_sof_dev *sdev);
        int (*disable_interrupts)(struct snd_sof_dev *sdev);
 
        .read_sdw_lcount =  hda_sdw_check_lcount_common,
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
+       .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
        .read_sdw_lcount =  hda_sdw_check_lcount_common,
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
+       .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
        .read_sdw_lcount =  hda_sdw_check_lcount_common,
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
+       .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
        .read_sdw_lcount =  hda_sdw_check_lcount_common,
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
+       .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,