/* DAI drivers */
        .drv = imx8_dai,
        .num_drv = 1, /* we have only 1 ESAI interface on i.MX8 */
+
+       /* ALSA HW info flags */
+       .hw_info =      SNDRV_PCM_INFO_MMAP |
+                       SNDRV_PCM_INFO_MMAP_VALID |
+                       SNDRV_PCM_INFO_INTERLEAVED |
+                       SNDRV_PCM_INFO_PAUSE |
+                       SNDRV_PCM_INFO_NO_PERIOD_WAKEUP
 };
 EXPORT_SYMBOL(sof_imx8_ops);
 
 
        .runtime_resume         = hda_dsp_runtime_resume,
        .runtime_idle           = hda_dsp_runtime_idle,
        .set_hw_params_upon_resume = hda_dsp_set_hw_params_upon_resume,
+
+       /* ALSA HW info flags */
+       .hw_info =      SNDRV_PCM_INFO_MMAP |
+                       SNDRV_PCM_INFO_MMAP_VALID |
+                       SNDRV_PCM_INFO_INTERLEAVED |
+                       SNDRV_PCM_INFO_PAUSE |
+                       SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
 };
 EXPORT_SYMBOL(sof_apl_ops);
 
 
 
        /* DAI drivers */
        .drv = bdw_dai,
-       .num_drv = ARRAY_SIZE(bdw_dai)
+       .num_drv = ARRAY_SIZE(bdw_dai),
+
+       /* ALSA HW info flags */
+       .hw_info =      SNDRV_PCM_INFO_MMAP |
+                       SNDRV_PCM_INFO_MMAP_VALID |
+                       SNDRV_PCM_INFO_INTERLEAVED |
+                       SNDRV_PCM_INFO_PAUSE |
+                       SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
 };
 EXPORT_SYMBOL(sof_bdw_ops);
 
 
        /* DAI drivers */
        .drv = byt_dai,
        .num_drv = 3, /* we have only 3 SSPs on byt*/
+
+       /* ALSA HW info flags */
+       .hw_info =      SNDRV_PCM_INFO_MMAP |
+                       SNDRV_PCM_INFO_MMAP_VALID |
+                       SNDRV_PCM_INFO_INTERLEAVED |
+                       SNDRV_PCM_INFO_PAUSE |
+                       SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
 };
 EXPORT_SYMBOL(sof_tng_ops);
 
        /* DAI drivers */
        .drv = byt_dai,
        .num_drv = 3, /* we have only 3 SSPs on byt*/
+
+       /* ALSA HW info flags */
+       .hw_info =      SNDRV_PCM_INFO_MMAP |
+                       SNDRV_PCM_INFO_MMAP_VALID |
+                       SNDRV_PCM_INFO_INTERLEAVED |
+                       SNDRV_PCM_INFO_PAUSE |
+                       SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
 };
 EXPORT_SYMBOL(sof_byt_ops);
 
        .drv = byt_dai,
        /* all 6 SSPs may be available for cherrytrail */
        .num_drv = ARRAY_SIZE(byt_dai),
+
+       /* ALSA HW info flags */
+       .hw_info =      SNDRV_PCM_INFO_MMAP |
+                       SNDRV_PCM_INFO_MMAP_VALID |
+                       SNDRV_PCM_INFO_INTERLEAVED |
+                       SNDRV_PCM_INFO_PAUSE |
+                       SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
 };
 EXPORT_SYMBOL(sof_cht_ops);
 
 
        .runtime_resume         = hda_dsp_runtime_resume,
        .runtime_idle           = hda_dsp_runtime_idle,
        .set_hw_params_upon_resume = hda_dsp_set_hw_params_upon_resume,
+
+       /* ALSA HW info flags */
+       .hw_info =      SNDRV_PCM_INFO_MMAP |
+                       SNDRV_PCM_INFO_MMAP_VALID |
+                       SNDRV_PCM_INFO_INTERLEAVED |
+                       SNDRV_PCM_INFO_PAUSE |
+                       SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
 };
 EXPORT_SYMBOL(sof_cnl_ops);
 
 
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
+       const struct snd_sof_dsp_ops *ops = sof_ops(sdev);
        struct snd_sof_pcm *spcm;
        struct snd_soc_tplg_stream_caps *caps;
        int ret;
                                   le32_to_cpu(caps->period_size_min));
 
        /* set runtime config */
-       runtime->hw.info = SNDRV_PCM_INFO_MMAP |
-                         SNDRV_PCM_INFO_MMAP_VALID |
-                         SNDRV_PCM_INFO_INTERLEAVED |
-                         SNDRV_PCM_INFO_PAUSE |
-                         SNDRV_PCM_INFO_NO_PERIOD_WAKEUP;
+       runtime->hw.info = ops->hw_info; /* platform-specific */
+
        runtime->hw.formats = le64_to_cpu(caps->formats);
        runtime->hw.period_bytes_min = le32_to_cpu(caps->period_size_min);
        runtime->hw.period_bytes_max = le32_to_cpu(caps->period_size_max);
 
        /* DAI ops */
        struct snd_soc_dai_driver *drv;
        int num_drv;
+
+       /* ALSA HW info flags, will be stored in snd_pcm_runtime.hw.info */
+       u32 hw_info;
 };
 
 /* DSP architecture specific callbacks for oops and stack dumps */