/* callbacks */
        int (*set_bias_level)(struct snd_soc_card *,
+                             struct snd_soc_dapm_context *dapm,
                              enum snd_soc_bias_level level);
        int (*set_bias_level_post)(struct snd_soc_card *,
+                                  struct snd_soc_dapm_context *dapm,
                                   enum snd_soc_bias_level level);
 
        long pmdown_time;
 
 };
 
 static int at91sam9g20ek_set_bias_level(struct snd_soc_card *card,
+                                       struct snd_soc_dapm_context *dapm,
                                        enum snd_soc_bias_level level)
 {
        static int mclk_on;
 
 
 /* Board specific codec bias level control */
 static int ams_delta_set_bias_level(struct snd_soc_card *card,
-                                       enum snd_soc_bias_level level)
+                                   struct snd_soc_dapm_context *dapm,
+                                   enum snd_soc_bias_level level)
 {
        struct snd_soc_codec *codec = card->rtd->codec;
 
 
 #define WM8915_HPSEL_GPIO 214
 
 static int speyside_set_bias_level(struct snd_soc_card *card,
+                                  struct snd_soc_dapm_context *dapm,
                                   enum snd_soc_bias_level level)
 {
        struct snd_soc_dai *codec_dai = card->rtd[0].codec_dai;
        int ret;
 
+       if (dapm->dev != codec_dai->dev)
+               return 0;
+
        switch (level) {
        case SND_SOC_BIAS_STANDBY:
                ret = snd_soc_dai_set_sysclk(codec_dai, WM8915_SYSCLK_MCLK2,
 
        trace_snd_soc_bias_level_start(card, level);
 
        if (card && card->set_bias_level)
-               ret = card->set_bias_level(card, level);
+               ret = card->set_bias_level(card, dapm, level);
        if (ret != 0)
                goto out;
 
                goto out;
 
        if (card && card->set_bias_level_post)
-               ret = card->set_bias_level_post(card, level);
+               ret = card->set_bias_level_post(card, dapm, level);
 out:
        trace_snd_soc_bias_level_done(card, level);