int snd_soc_link_trigger(struct snd_pcm_substream *substream, int cmd);
 
 int snd_soc_link_compr_startup(struct snd_compr_stream *cstream);
+void snd_soc_link_compr_shutdown(struct snd_compr_stream *cstream);
 
 #endif /* __SOC_LINK_H */
 
        if (!snd_soc_dai_active(codec_dai))
                codec_dai->rate = 0;
 
-       if (rtd->dai_link->compr_ops && rtd->dai_link->compr_ops->shutdown)
-               rtd->dai_link->compr_ops->shutdown(cstream);
+       snd_soc_link_compr_shutdown(cstream);
 
        soc_compr_components_free(cstream, NULL);
 
 
        fe->dpcm[stream].runtime = NULL;
 
-       if (fe->dai_link->compr_ops && fe->dai_link->compr_ops->shutdown)
-               fe->dai_link->compr_ops->shutdown(cstream);
+       snd_soc_link_compr_shutdown(cstream);
 
        soc_compr_components_free(cstream, NULL);
 
 
        return soc_link_ret(rtd, ret);
 }
 EXPORT_SYMBOL_GPL(snd_soc_link_compr_startup);
+
+void snd_soc_link_compr_shutdown(struct snd_compr_stream *cstream)
+{
+       struct snd_soc_pcm_runtime *rtd = cstream->private_data;
+
+       if (rtd->dai_link->compr_ops &&
+           rtd->dai_link->compr_ops->shutdown)
+               rtd->dai_link->compr_ops->shutdown(cstream);
+}
+EXPORT_SYMBOL_GPL(snd_soc_link_compr_shutdown);