Merge commit 'v2.6.39-rc3' into for-2.6.39
[pandora-kernel.git] / drivers / misc / iwmc3200top / main.c
index c73cef2..b1f4563 100644 (file)
@@ -89,7 +89,7 @@ static void op_top_message(struct iwmct_priv *priv, struct top_msg *msg)
        switch (msg->hdr.opcode) {
        case OP_OPR_ALIVE:
                LOG_INFO(priv, FW_MSG, "Got ALIVE from device, wake rescan\n");
-               queue_work(priv->bus_rescan_wq, &priv->bus_rescan_worker);
+               schedule_work(&priv->bus_rescan_worker);
                break;
        default:
                LOG_INFO(priv, FW_MSG, "Received msg opcode 0x%X\n",
@@ -268,7 +268,7 @@ static void iwmct_irq_read_worker(struct work_struct *ws)
                LOG_INFO(priv, IRQ, "ACK barker arrived "
                                "- starting FW download\n");
        } else { /* REBOOT barker */
-               LOG_INFO(priv, IRQ, "Recieved reboot barker: %x\n", barker);
+               LOG_INFO(priv, IRQ, "Received reboot barker: %x\n", barker);
                priv->barker = barker;
 
                if (barker & BARKER_DNLOAD_SYNC_MSK) {
@@ -360,7 +360,7 @@ static void iwmct_irq(struct sdio_func *func)
        /* clear the function's interrupt request bit (write 1 to clear) */
        sdio_writeb(func, 1, IWMC_SDIO_INTR_CLEAR_ADDR, &ret);
 
-       queue_work(priv->wq, &priv->isr_worker);
+       schedule_work(&priv->isr_worker);
 
        LOG_TRACE(priv, IRQ, "exit iwmct_irq\n");
 
@@ -506,10 +506,6 @@ static int iwmct_probe(struct sdio_func *func,
        priv->func = func;
        sdio_set_drvdata(func, priv);
 
-
-       /* create drivers work queue */
-       priv->wq = create_workqueue(DRV_NAME "_wq");
-       priv->bus_rescan_wq = create_workqueue(DRV_NAME "_rescan_wq");
        INIT_WORK(&priv->bus_rescan_worker, iwmct_rescan_worker);
        INIT_WORK(&priv->isr_worker, iwmct_irq_read_worker);
 
@@ -604,9 +600,9 @@ static void iwmct_remove(struct sdio_func *func)
        sdio_release_irq(func);
        sdio_release_host(func);
 
-       /* Safely destroy osc workqueue */
-       destroy_workqueue(priv->bus_rescan_wq);
-       destroy_workqueue(priv->wq);
+       /* Make sure works are finished */
+       flush_work_sync(&priv->bus_rescan_worker);
+       flush_work_sync(&priv->isr_worker);
 
        sdio_claim_host(func);
        sdio_disable_func(func);