struct qtnf_hw_info hw_info;
        struct napi_struct mux_napi;
        struct net_device mux_dev;
-       struct completion firmware_init_complete;
        struct workqueue_struct *workqueue;
        struct work_struct fw_work;
        struct work_struct event_work;
 
                bus->fw_state = QTNF_FW_STATE_DETACHED;
        }
 
-       complete(&bus->firmware_init_complete);
        put_device(&pdev->dev);
 }
 
        pcie_priv->pdev = pdev;
        pcie_priv->tx_stopped = 0;
 
-       init_completion(&bus->firmware_init_complete);
        mutex_init(&bus->bus_lock);
        spin_lock_init(&pcie_priv->tx_lock);
        spin_lock_init(&pcie_priv->tx_reclaim_lock);
 
 void qtnf_pcie_remove(struct qtnf_bus *bus, struct qtnf_pcie_bus_priv *priv)
 {
-       wait_for_completion(&bus->firmware_init_complete);
+       cancel_work_sync(&bus->fw_work);
 
        if (bus->fw_state == QTNF_FW_STATE_ACTIVE ||
            bus->fw_state == QTNF_FW_STATE_EP_DEAD)