struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
        int ret = 0;
 
-       /* perform any topology hw_params fixups before DAI  */
-       ret = snd_soc_link_be_hw_params_fixup(rtd, params);
-       if (ret < 0)
-               goto end;
-
        if (dai->driver->ops &&
-           dai->driver->ops->hw_params)
+           dai->driver->ops->hw_params) {
+               /* perform any topology hw_params fixups before DAI  */
+               ret = snd_soc_link_be_hw_params_fixup(rtd, params);
+               if (ret < 0)
+                       goto end;
+
                ret = dai->driver->ops->hw_params(substream, params, dai);
+       }
 
        /* mark substream if succeeded */
        if (ret == 0)