|
@@ -82,7 +82,6 @@ struct spi_sh_data {
|
|
|
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;
|
|
@@ -380,7 +379,7 @@ static int spi_sh_transfer(struct spi_device *spi, struct spi_message *mesg)
|
|
|
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);
|
|
|
|
|
@@ -425,7 +424,7 @@ static int spi_sh_remove(struct platform_device *pdev)
|
|
|
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;
|
|
@@ -484,18 +483,11 @@ static int spi_sh_probe(struct platform_device *pdev)
|
|
|
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;
|
|
@@ -514,8 +506,6 @@ static int spi_sh_probe(struct platform_device *pdev)
|
|
|
|
|
|
error3:
|
|
|
free_irq(irq, ss);
|
|
|
- error2:
|
|
|
- destroy_workqueue(ss->workqueue);
|
|
|
error1:
|
|
|
spi_master_put(master);
|
|
|
|