diff options
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/iwmc3200top/iwmc3200top.h | 4 | ||||
-rw-r--r-- | drivers/misc/iwmc3200top/main.c | 14 |
2 files changed, 6 insertions, 12 deletions
diff --git a/drivers/misc/iwmc3200top/iwmc3200top.h b/drivers/misc/iwmc3200top/iwmc3200top.h index 740ff0738ea8..620973ed8bf9 100644 --- a/drivers/misc/iwmc3200top/iwmc3200top.h +++ b/drivers/misc/iwmc3200top/iwmc3200top.h | |||
@@ -183,9 +183,7 @@ struct iwmct_priv { | |||
183 | u32 barker; | 183 | u32 barker; |
184 | struct iwmct_dbg dbg; | 184 | struct iwmct_dbg dbg; |
185 | 185 | ||
186 | /* drivers work queue */ | 186 | /* drivers work items */ |
187 | struct workqueue_struct *wq; | ||
188 | struct workqueue_struct *bus_rescan_wq; | ||
189 | struct work_struct bus_rescan_worker; | 187 | struct work_struct bus_rescan_worker; |
190 | struct work_struct isr_worker; | 188 | struct work_struct isr_worker; |
191 | 189 | ||
diff --git a/drivers/misc/iwmc3200top/main.c b/drivers/misc/iwmc3200top/main.c index c73cef2c3c5e..727af07f1fbd 100644 --- a/drivers/misc/iwmc3200top/main.c +++ b/drivers/misc/iwmc3200top/main.c | |||
@@ -89,7 +89,7 @@ static void op_top_message(struct iwmct_priv *priv, struct top_msg *msg) | |||
89 | switch (msg->hdr.opcode) { | 89 | switch (msg->hdr.opcode) { |
90 | case OP_OPR_ALIVE: | 90 | case OP_OPR_ALIVE: |
91 | LOG_INFO(priv, FW_MSG, "Got ALIVE from device, wake rescan\n"); | 91 | LOG_INFO(priv, FW_MSG, "Got ALIVE from device, wake rescan\n"); |
92 | queue_work(priv->bus_rescan_wq, &priv->bus_rescan_worker); | 92 | schedule_work(&priv->bus_rescan_worker); |
93 | break; | 93 | break; |
94 | default: | 94 | default: |
95 | LOG_INFO(priv, FW_MSG, "Received msg opcode 0x%X\n", | 95 | LOG_INFO(priv, FW_MSG, "Received msg opcode 0x%X\n", |
@@ -360,7 +360,7 @@ static void iwmct_irq(struct sdio_func *func) | |||
360 | /* clear the function's interrupt request bit (write 1 to clear) */ | 360 | /* clear the function's interrupt request bit (write 1 to clear) */ |
361 | sdio_writeb(func, 1, IWMC_SDIO_INTR_CLEAR_ADDR, &ret); | 361 | sdio_writeb(func, 1, IWMC_SDIO_INTR_CLEAR_ADDR, &ret); |
362 | 362 | ||
363 | queue_work(priv->wq, &priv->isr_worker); | 363 | schedule_work(&priv->isr_worker); |
364 | 364 | ||
365 | LOG_TRACE(priv, IRQ, "exit iwmct_irq\n"); | 365 | LOG_TRACE(priv, IRQ, "exit iwmct_irq\n"); |
366 | 366 | ||
@@ -506,10 +506,6 @@ static int iwmct_probe(struct sdio_func *func, | |||
506 | priv->func = func; | 506 | priv->func = func; |
507 | sdio_set_drvdata(func, priv); | 507 | sdio_set_drvdata(func, priv); |
508 | 508 | ||
509 | |||
510 | /* create drivers work queue */ | ||
511 | priv->wq = create_workqueue(DRV_NAME "_wq"); | ||
512 | priv->bus_rescan_wq = create_workqueue(DRV_NAME "_rescan_wq"); | ||
513 | INIT_WORK(&priv->bus_rescan_worker, iwmct_rescan_worker); | 509 | INIT_WORK(&priv->bus_rescan_worker, iwmct_rescan_worker); |
514 | INIT_WORK(&priv->isr_worker, iwmct_irq_read_worker); | 510 | INIT_WORK(&priv->isr_worker, iwmct_irq_read_worker); |
515 | 511 | ||
@@ -604,9 +600,9 @@ static void iwmct_remove(struct sdio_func *func) | |||
604 | sdio_release_irq(func); | 600 | sdio_release_irq(func); |
605 | sdio_release_host(func); | 601 | sdio_release_host(func); |
606 | 602 | ||
607 | /* Safely destroy osc workqueue */ | 603 | /* Make sure works are finished */ |
608 | destroy_workqueue(priv->bus_rescan_wq); | 604 | flush_work_sync(&priv->bus_rescan_worker); |
609 | destroy_workqueue(priv->wq); | 605 | flush_work_sync(&priv->isr_worker); |
610 | 606 | ||
611 | sdio_claim_host(func); | 607 | sdio_claim_host(func); |
612 | sdio_disable_func(func); | 608 | sdio_disable_func(func); |