/* close any waiting streams and save state */
        for (i = 0; i < card->num_rtd; i++) {
-               run_delayed_work(&card->rtd[i].delayed_work);
+               flush_delayed_work_sync(&card->rtd[i].delayed_work);
 -              card->rtd[i].codec->suspend_bias_level = card->rtd[i].codec->bias_level;
 +              card->rtd[i].codec->dapm.suspend_bias_level = card->rtd[i].codec->dapm.bias_level;
        }
  
        for (i = 0; i < card->num_rtd; i++) {
                /* make sure any delayed work runs */
                for (i = 0; i < card->num_rtd; i++) {
                        struct snd_soc_pcm_runtime *rtd = &card->rtd[i];
-                       run_delayed_work(&rtd->delayed_work);
+                       flush_delayed_work_sync(&rtd->delayed_work);
                }
  
 +              /* remove auxiliary devices */
 +              for (i = 0; i < card->num_aux_devs; i++)
 +                      soc_remove_aux_dev(card, i);
 +
                /* remove and free each DAI */
                for (i = 0; i < card->num_rtd; i++)
                        soc_remove_dai_link(card, i);