return 0;
 }
 
-static int axg_tdm_iface_trigger(struct snd_pcm_substream *substream,
-                                int cmd,
+static int axg_tdm_iface_prepare(struct snd_pcm_substream *substream,
                                 struct snd_soc_dai *dai)
 {
-       struct axg_tdm_stream *ts =
-               snd_soc_dai_get_dma_data(dai, substream);
-
-       switch (cmd) {
-       case SNDRV_PCM_TRIGGER_START:
-       case SNDRV_PCM_TRIGGER_RESUME:
-       case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-               axg_tdm_stream_start(ts);
-               break;
-       case SNDRV_PCM_TRIGGER_SUSPEND:
-       case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-       case SNDRV_PCM_TRIGGER_STOP:
-               axg_tdm_stream_stop(ts);
-               break;
-       default:
-               return -EINVAL;
-       }
+       struct axg_tdm_stream *ts = snd_soc_dai_get_dma_data(dai, substream);
 
-       return 0;
+       /* Force all attached formatters to update */
+       return axg_tdm_stream_reset(ts);
 }
 
 static int axg_tdm_iface_remove_dai(struct snd_soc_dai *dai)
        .set_fmt        = axg_tdm_iface_set_fmt,
        .startup        = axg_tdm_iface_startup,
        .hw_params      = axg_tdm_iface_hw_params,
+       .prepare        = axg_tdm_iface_prepare,
        .hw_free        = axg_tdm_iface_hw_free,
-       .trigger        = axg_tdm_iface_trigger,
 };
 
 /* TDM Backend DAIs */