#define __SOC_LINK_H
 
 int snd_soc_link_init(struct snd_soc_pcm_runtime *rtd);
+int snd_soc_link_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
+                                   struct snd_pcm_hw_params *params);
+
 int snd_soc_link_startup(struct snd_pcm_substream *substream);
 void snd_soc_link_shutdown(struct snd_pcm_substream *substream);
 int snd_soc_link_prepare(struct snd_pcm_substream *substream);
 
                        dai_link->dpcm_playback = 1;
                        dai_link->dpcm_capture = 1;
 
-                       /* override any BE fixups */
+                       /*
+                        * override any BE fixups
+                        * see
+                        *      snd_soc_link_be_hw_params_fixup()
+                        */
                        dai_link->be_hw_params_fixup =
                                component->driver->be_hw_params_fixup;
 
 
 
 #include <sound/soc.h>
 #include <sound/soc-dai.h>
+#include <sound/soc-link.h>
 
 #define soc_dai_ret(dai, ret) _soc_dai_ret(dai, __func__, ret)
 static inline int _soc_dai_ret(struct snd_soc_dai *dai,
        int ret = 0;
 
        /* perform any topology hw_params fixups before DAI  */
-       if (rtd->dai_link->be_hw_params_fixup) {
-               ret = rtd->dai_link->be_hw_params_fixup(rtd, params);
-               if (ret < 0)
-                       goto end;
-       }
+       ret = snd_soc_link_be_hw_params_fixup(rtd, params);
+       if (ret < 0)
+               goto end;
 
        if (dai->driver->ops &&
            dai->driver->ops->hw_params)
 
        return soc_link_ret(rtd, ret);
 }
 
+int snd_soc_link_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
+                                   struct snd_pcm_hw_params *params)
+{
+       int ret = 0;
+
+       if (rtd->dai_link->be_hw_params_fixup)
+               ret = rtd->dai_link->be_hw_params_fixup(rtd, params);
+
+       return soc_link_ret(rtd, ret);
+}
+
 int snd_soc_link_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
 
                                sizeof(struct snd_pcm_hw_params));
 
                /* perform any hw_params fixups */
-               if (be->dai_link->be_hw_params_fixup) {
-                       ret = be->dai_link->be_hw_params_fixup(be,
-                                       &dpcm->hw_params);
-                       if (ret < 0) {
-                               dev_err(be->dev,
-                                       "ASoC: hw_params BE fixup failed %d\n",
-                                       ret);
-                               goto unwind;
-                       }
-               }
+               ret = snd_soc_link_be_hw_params_fixup(be, &dpcm->hw_params);
+               if (ret < 0)
+                       goto unwind;
 
                /* copy the fixed-up hw params for BE dai */
                memcpy(&be->dpcm[stream].hw_params, &dpcm->hw_params,