switch (cmd) {
        case SNDRV_PCM_TRIGGER_RESUME:
                skl_pcm_prepare(substream, dai);
+               /*
+                * enable DMA Resume enable bit for the stream, set the dpib
+                * & lpib position to resune before starting the DMA
+                */
+               snd_hdac_ext_stream_drsm_enable(ebus, true,
+                                       hdac_stream(stream)->index);
+               snd_hdac_ext_stream_set_dpibr(ebus, stream, stream->dpib);
+               snd_hdac_ext_stream_set_lpib(stream, stream->lpib);
+
        case SNDRV_PCM_TRIGGER_START:
        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
                /*
                        return ret;
 
                ret = skl_decoupled_trigger(substream, cmd);
-               if (cmd == SNDRV_PCM_TRIGGER_SUSPEND)
+               if (cmd == SNDRV_PCM_TRIGGER_SUSPEND) {
+                       /* save the dpib and lpib positions */
+                       stream->dpib = readl(ebus->bus.remap_addr +
+                                       AZX_REG_VS_SDXDPIB_XBASE +
+                                       (AZX_REG_VS_SDXDPIB_XINTERVAL *
+                                       hdac_stream(stream)->index));
+
+                       stream->lpib = snd_hdac_stream_get_pos_lpib(
+                                                       hdac_stream(stream));
                        snd_hdac_ext_stream_decouple(ebus, stream, false);
+               }
                break;
 
        default: