snd_soc_rtdcom_lookup(rtd, SOF_AUDIO_PCM_DRV_NAME);
        struct snd_sof_dai *dai =
                snd_sof_find_dai(component, (char *)rtd->dai_link->name);
+       struct snd_soc_dpcm *dpcm;
 
        /* no topology exists for this BE, try a common configuration */
        if (!dai) {
                }
                break;
        case SOF_DAI_INTEL_HDA:
-               /* do nothing for HDA dai_link */
+               /*
+                * HDaudio does not follow the default trigger
+                * sequence due to firmware implementation
+                */
+               for_each_dpcm_fe(rtd, SNDRV_PCM_STREAM_PLAYBACK, dpcm) {
+                       struct snd_soc_pcm_runtime *fe = dpcm->fe;
+
+                       fe->dai_link->trigger[SNDRV_PCM_STREAM_PLAYBACK] =
+                               SND_SOC_DPCM_TRIGGER_POST;
+               }
                break;
        case SOF_DAI_INTEL_ALH:
                /* do nothing for ALH dai_link */
 
        if (!link->no_pcm) {
                link->nonatomic = true;
 
-               /* set trigger order */
-               link->trigger[0] = SND_SOC_DPCM_TRIGGER_POST;
-               link->trigger[1] = SND_SOC_DPCM_TRIGGER_POST;
+               /*
+                * set default trigger order for all links. Exceptions to
+                * the rule will be handled in sof_pcm_dai_link_fixup()
+                * For playback, the sequence is the following: start FE,
+                * start BE, stop BE, stop FE; for Capture the sequence is
+                * inverted start BE, start FE, stop FE, stop BE
+                */
+               link->trigger[SNDRV_PCM_STREAM_PLAYBACK] =
+                                       SND_SOC_DPCM_TRIGGER_PRE;
+               link->trigger[SNDRV_PCM_STREAM_CAPTURE] =
+                                       SND_SOC_DPCM_TRIGGER_POST;
 
                /* nothing more to do for FE dai links */
                return 0;