int irq;
        struct spi_master *master;
        struct list_head queue;
-       struct workqueue_struct *workqueue;
        struct work_struct ws;
        unsigned long cr1;
        wait_queue_head_t wait;
        spi_sh_clear_bit(ss, SPI_SH_SSA, SPI_SH_CR1);
 
        list_add_tail(&mesg->queue, &ss->queue);
-       queue_work(ss->workqueue, &ss->ws);
+       schedule_work(&ss->ws);
 
        spin_unlock_irqrestore(&ss->lock, flags);
 
        struct spi_sh_data *ss = platform_get_drvdata(pdev);
 
        spi_unregister_master(ss->master);
-       destroy_workqueue(ss->workqueue);
+       flush_work(&ss->ws);
        free_irq(ss->irq, ss);
 
        return 0;
        spin_lock_init(&ss->lock);
        INIT_WORK(&ss->ws, spi_sh_work);
        init_waitqueue_head(&ss->wait);
-       ss->workqueue = create_singlethread_workqueue(
-                                       dev_name(master->dev.parent));
-       if (ss->workqueue == NULL) {
-               dev_err(&pdev->dev, "create workqueue error\n");
-               ret = -EBUSY;
-               goto error1;
-       }
 
        ret = request_irq(irq, spi_sh_irq, 0, "spi_sh", ss);
        if (ret < 0) {
                dev_err(&pdev->dev, "request_irq error\n");
-               goto error2;
+               goto error1;
        }
 
        master->num_chipselect = 2;
 
  error3:
        free_irq(irq, ss);
- error2:
-       destroy_workqueue(ss->workqueue);
  error1:
        spi_master_put(master);