struct omap_mmc_platform_data *pdata;
 };
 
+static struct workqueue_struct *mmc_omap_wq;
+
 static void mmc_omap_fclk_offdelay(struct mmc_omap_slot *slot)
 {
        unsigned long tick_ns;
                host->next_slot = new_slot;
                host->mmc = new_slot->mmc;
                spin_unlock_irqrestore(&host->slot_lock, flags);
-               schedule_work(&host->slot_release_work);
+               queue_work(mmc_omap_wq, &host->slot_release_work);
                return;
        }
 
        }
 
        host->stop_data = data;
-       schedule_work(&host->send_stop_work);
+       queue_work(mmc_omap_wq, &host->send_stop_work);
 }
 
 static void
                OMAP_MMC_WRITE(host, IE, 0);
                disable_irq(host->irq);
                host->abort = 1;
-               schedule_work(&host->cmd_abort_work);
+               queue_work(mmc_omap_wq, &host->cmd_abort_work);
        }
        spin_unlock_irqrestore(&host->slot_lock, flags);
 }
                host->abort = 1;
                OMAP_MMC_WRITE(host, IE, 0);
                disable_irq_nosync(host->irq);
-               schedule_work(&host->cmd_abort_work);
+               queue_work(mmc_omap_wq, &host->cmd_abort_work);
                return IRQ_HANDLED;
        }
 
 
        tasklet_kill(&slot->cover_tasklet);
        del_timer_sync(&slot->cover_timer);
-       flush_scheduled_work();
+       flush_workqueue(mmc_omap_wq);
 
        mmc_remove_host(mmc);
        mmc_free_host(mmc);
 
 static int __init mmc_omap_init(void)
 {
-       return platform_driver_probe(&mmc_omap_driver, mmc_omap_probe);
+       int ret;
+
+       mmc_omap_wq = alloc_workqueue("mmc_omap", 0, 0);
+       if (!mmc_omap_wq)
+               return -ENOMEM;
+
+       ret = platform_driver_probe(&mmc_omap_driver, mmc_omap_probe);
+       if (ret)
+               destroy_workqueue(mmc_omap_wq);
+       return ret;
 }
 
 static void __exit mmc_omap_exit(void)
 {
        platform_driver_unregister(&mmc_omap_driver);
+       destroy_workqueue(mmc_omap_wq);
 }
 
 module_init(mmc_omap_init);