struct snd_pcm_substream *substream);
 void snd_soc_dai_shutdown(struct snd_soc_dai *dai,
                          struct snd_pcm_substream *substream);
+int snd_soc_dai_prepare(struct snd_soc_dai *dai,
+                       struct snd_pcm_substream *substream);
 
 struct snd_soc_dai_ops {
        /*
 
        if (dai->driver->ops->shutdown)
                dai->driver->ops->shutdown(substream, dai);
 }
+
+int snd_soc_dai_prepare(struct snd_soc_dai *dai,
+                       struct snd_pcm_substream *substream)
+{
+       int ret = 0;
+
+       if (dai->driver->ops->prepare)
+               ret = dai->driver->ops->prepare(substream, dai);
+
+       return ret;
+}
 
        }
 
        for_each_rtd_codec_dai(rtd, i, codec_dai) {
-               if (codec_dai->driver->ops->prepare) {
-                       ret = codec_dai->driver->ops->prepare(substream,
-                                                             codec_dai);
-                       if (ret < 0) {
-                               dev_err(codec_dai->dev,
-                                       "ASoC: codec DAI prepare error: %d\n",
-                                       ret);
-                               goto out;
-                       }
-               }
-       }
-
-       if (cpu_dai->driver->ops->prepare) {
-               ret = cpu_dai->driver->ops->prepare(substream, cpu_dai);
+               ret = snd_soc_dai_prepare(codec_dai, substream);
                if (ret < 0) {
-                       dev_err(cpu_dai->dev,
-                               "ASoC: cpu DAI prepare error: %d\n", ret);
+                       dev_err(codec_dai->dev,
+                               "ASoC: codec DAI prepare error: %d\n",
+                               ret);
                        goto out;
                }
        }
 
+       ret = snd_soc_dai_prepare(cpu_dai, substream);
+       if (ret < 0) {
+               dev_err(cpu_dai->dev,
+                       "ASoC: cpu DAI prepare error: %d\n", ret);
+               goto out;
+       }
+
        /* cancel any delayed stream shutdown that is pending */
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
            rtd->pop_wait) {