if (priv->scan_block)
                priv->scan_block = false;
 
-       if (adapter->surprise_removed || adapter->is_cmd_timedout) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags) ||
+           test_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "%s: Ignore connection.\t"
                            "Card removed or FW in bad state\n",
 
                adapter->ps_state = PS_STATE_SLEEP_CFM;
 
        if (!le16_to_cpu(sleep_cfm_buf->resp_ctrl) &&
-           (adapter->is_hs_configured &&
+           (test_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags) &&
             !adapter->sleep_period.period)) {
                adapter->pm_wakeup_card_req = true;
                mwifiex_hs_activated_event(mwifiex_get_priv
                return -1;
        }
 
-       if (adapter->is_suspended) {
+       if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "PREP_CMD: device in suspended state\n");
                return -1;
        }
 
-       if (adapter->hs_enabling && cmd_no != HostCmd_CMD_802_11_HS_CFG_ENH) {
+       if (test_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags) &&
+           cmd_no != HostCmd_CMD_802_11_HS_CFG_ENH) {
                mwifiex_dbg(adapter, ERROR,
                            "PREP_CMD: host entering sleep state\n");
                return -1;
        }
 
-       if (adapter->surprise_removed) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "PREP_CMD: card is removed\n");
                return -1;
        }
 
-       if (adapter->is_cmd_timedout) {
+       if (test_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "PREP_CMD: FW is in bad state\n");
                return -1;
        if (priv && (host_cmd->command !=
             cpu_to_le16(HostCmd_CMD_802_11_HS_CFG_ENH))) {
                if (adapter->hs_activated) {
-                       adapter->is_hs_configured = false;
+                       clear_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                 &adapter->work_flags);
                        mwifiex_hs_activated_event(priv, false);
                }
        }
                return -1;
        }
 
-       adapter->is_cmd_timedout = 0;
+       clear_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags);
 
        resp = (struct host_cmd_ds_command *) adapter->curr_cmd->resp_skb->data;
        if (adapter->curr_cmd->cmd_flag & CMD_F_HOSTCMD) {
        struct mwifiex_adapter *adapter = from_timer(adapter, t, cmd_timer);
        struct cmd_ctrl_node *cmd_node;
 
-       adapter->is_cmd_timedout = 1;
+       set_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags);
        if (!adapter->curr_cmd) {
                mwifiex_dbg(adapter, ERROR,
                            "cmd: empty curr_cmd\n");
 
                mwifiex_dbg(adapter, MSG,
                            "is_cmd_timedout = %d\n",
-                           adapter->is_cmd_timedout);
+                           test_bit(MWIFIEX_IS_CMD_TIMEDOUT,
+                                    &adapter->work_flags));
                mwifiex_dbg(adapter, MSG,
                            "num_tx_timeout = %d\n",
                            adapter->dbg.num_tx_timeout);
 mwifiex_hs_activated_event(struct mwifiex_private *priv, u8 activated)
 {
        if (activated) {
-               if (priv->adapter->is_hs_configured) {
+               if (test_bit(MWIFIEX_IS_HS_CONFIGURED,
+                            &priv->adapter->work_flags)) {
                        priv->adapter->hs_activated = true;
                        mwifiex_update_rxreor_flags(priv->adapter,
                                                    RXREOR_FORCE_NO_DROP);
                            phs_cfg->params.hs_config.gap);
        }
        if (conditions != HS_CFG_CANCEL) {
-               adapter->is_hs_configured = true;
+               set_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
                if (adapter->iface_type == MWIFIEX_USB)
                        mwifiex_hs_activated_event(priv, true);
        } else {
-               adapter->is_hs_configured = false;
+               clear_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
                if (adapter->hs_activated)
                        mwifiex_hs_activated_event(priv, false);
        }
 
        adapter->if_ops.wakeup(adapter);
        adapter->hs_activated = false;
-       adapter->is_hs_configured = false;
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
        mwifiex_hs_activated_event(mwifiex_get_priv(adapter,
                                                    MWIFIEX_BSS_ROLE_ANY),
                                   false);
                return;
        }
        adapter->pm_wakeup_card_req = true;
-       if (adapter->is_hs_configured)
+       if (test_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags))
                mwifiex_hs_activated_event(mwifiex_get_priv
                                                (adapter, MWIFIEX_BSS_ROLE_ANY),
                                           true);
 
                              MWIFIEX_SYNC_CMD, &hscfg);
 
        mwifiex_enable_hs(priv->adapter);
-       priv->adapter->hs_enabling = false;
+       clear_bit(MWIFIEX_IS_HS_ENABLING, &priv->adapter->work_flags);
        ret = count;
 done:
        kfree(buf);
 
        adapter->event_received = false;
        adapter->data_received = false;
 
-       adapter->surprise_removed = false;
+       clear_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
 
        adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
 
 
        adapter->curr_tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
 
-       adapter->is_hs_configured = false;
+       clear_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
        adapter->hs_cfg.conditions = cpu_to_le32(HS_CFG_COND_DEF);
        adapter->hs_cfg.gpio = HS_CFG_GPIO_DEF;
        adapter->hs_cfg.gap = HS_CFG_GAP_DEF;
 
                    !skb_queue_empty(&adapter->tx_data_q)) {
                        mwifiex_process_tx_queue(adapter);
                        if (adapter->hs_activated) {
-                               adapter->is_hs_configured = false;
+                               clear_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                         &adapter->work_flags);
                                mwifiex_hs_activated_event
                                        (mwifiex_get_priv
                                        (adapter, MWIFIEX_BSS_ROLE_ANY),
                        (mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA))) {
                        mwifiex_process_bypass_tx(adapter);
                        if (adapter->hs_activated) {
-                               adapter->is_hs_configured = false;
+                               clear_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                         &adapter->work_flags);
                                mwifiex_hs_activated_event
                                        (mwifiex_get_priv
                                         (adapter, MWIFIEX_BSS_ROLE_ANY),
                        (mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA))) {
                        mwifiex_wmm_process_tx(adapter);
                        if (adapter->hs_activated) {
-                               adapter->is_hs_configured = false;
+                               clear_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                         &adapter->work_flags);
                                mwifiex_hs_activated_event
                                        (mwifiex_get_priv
                                         (adapter, MWIFIEX_BSS_ROLE_ANY),
        if (adapter->if_ops.unregister_dev)
                adapter->if_ops.unregister_dev(adapter);
 
-       adapter->surprise_removed = true;
+       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        mwifiex_terminate_workqueue(adapter);
 
        if (adapter->hw_status == MWIFIEX_HW_STATUS_READY) {
                    "data: %lu BSS(%d-%d): Data <= kernel\n",
                    jiffies, priv->bss_type, priv->bss_num);
 
-       if (priv->adapter->surprise_removed) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &priv->adapter->work_flags)) {
                kfree_skb(skb);
                priv->stats.tx_dropped++;
                return 0;
        struct mwifiex_adapter *adapter =
                container_of(work, struct mwifiex_adapter, rx_work);
 
-       if (adapter->surprise_removed)
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags))
                return;
        mwifiex_process_rx(adapter);
 }
        struct mwifiex_adapter *adapter =
                container_of(work, struct mwifiex_adapter, main_work);
 
-       if (adapter->surprise_removed)
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags))
                return;
        mwifiex_main_process(adapter);
 }
        if (adapter->if_ops.disable_int)
                adapter->if_ops.disable_int(adapter);
 
-       adapter->surprise_removed = true;
+       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        mwifiex_terminate_workqueue(adapter);
        adapter->int_status = 0;
 
                adapter->if_ops.up_dev(adapter);
 
        adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
-       adapter->surprise_removed = false;
+       clear_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        init_waitqueue_head(&adapter->init_wait_q);
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
        adapter->hs_activated = false;
-       adapter->is_cmd_timedout = 0;
+       clear_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags);
        init_waitqueue_head(&adapter->hs_activate_wait_q);
        init_waitqueue_head(&adapter->cmd_wait_q.wait);
        adapter->cmd_wait_q.status = 0;
                adapter->if_ops.unregister_dev(adapter);
 
 err_kmalloc:
-       adapter->surprise_removed = true;
+       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        mwifiex_terminate_workqueue(adapter);
        if (adapter->hw_status == MWIFIEX_HW_STATUS_READY) {
                mwifiex_dbg(adapter, ERROR,
        adapter->fw_done = fw_done;
 
        adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
-       adapter->surprise_removed = false;
+       clear_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        init_waitqueue_head(&adapter->init_wait_q);
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
        adapter->hs_activated = false;
        init_waitqueue_head(&adapter->hs_activate_wait_q);
        init_waitqueue_head(&adapter->cmd_wait_q.wait);
        if (adapter->if_ops.unregister_dev)
                adapter->if_ops.unregister_dev(adapter);
 err_registerdev:
-       adapter->surprise_removed = true;
+       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        mwifiex_terminate_workqueue(adapter);
        if (adapter->hw_status == MWIFIEX_HW_STATUS_READY) {
                pr_debug("info: %s: shutdown mwifiex\n", __func__);
 
        MWIFIEX_IFACE_WORK_CARD_RESET,
 };
 
+enum mwifiex_adapter_work_flags {
+       MWIFIEX_SURPRISE_REMOVED,
+       MWIFIEX_IS_CMD_TIMEDOUT,
+       MWIFIEX_IS_SUSPENDED,
+       MWIFIEX_IS_HS_CONFIGURED,
+       MWIFIEX_IS_HS_ENABLING,
+};
+
 struct mwifiex_band_config {
        u8 chan_band:2;
        u8 chan_width:2;
        struct device *dev;
        struct wiphy *wiphy;
        u8 perm_addr[ETH_ALEN];
-       bool surprise_removed;
+       unsigned long work_flags;
        u32 fw_release_number;
        u8 intf_hdr_len;
        u16 init_wait_q_woken;
        struct cmd_ctrl_node *curr_cmd;
        /* spin lock for command */
        spinlock_t mwifiex_cmd_lock;
-       u8 is_cmd_timedout;
        u16 last_init_cmd;
        struct timer_list cmd_timer;
        struct list_head cmd_free_q;
        u16 pps_uapsd_mode;
        u32 pm_wakeup_fw_try;
        struct timer_list wakeup_timer;
-       u8 is_hs_configured;
        struct mwifiex_hs_config_param hs_cfg;
        u8 hs_activated;
        u16 hs_activate_wait_q_woken;
        wait_queue_head_t hs_activate_wait_q;
-       bool is_suspended;
-       bool hs_enabling;
        u8 event_body[MAX_EVENT_SIZE];
        u32 hw_dot_11n_dev_cap;
        u8 hw_dev_mcs_support;
 
        if (!mwifiex_enable_hs(adapter)) {
                mwifiex_dbg(adapter, ERROR,
                            "cmd: failed to suspend\n");
-               adapter->hs_enabling = false;
+               clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
                mwifiex_disable_wake(adapter);
                return -EFAULT;
        }
        flush_workqueue(adapter->workqueue);
 
        /* Indicate device suspended */
-       adapter->is_suspended = true;
-       adapter->hs_enabling = false;
+       set_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
+       clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
 
        return 0;
 }
 
        adapter = card->adapter;
 
-       if (!adapter->is_suspended) {
+       if (!test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, WARN,
                            "Device already resumed\n");
                return 0;
        }
 
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
 
        mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA),
                          MWIFIEX_ASYNC_CMD);
        }
        adapter = card->adapter;
 
-       if (adapter->surprise_removed)
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags))
                goto exit;
 
        if (card->msix_enable)
 
                return -EBUSY;
        }
 
-       if (adapter->surprise_removed || adapter->is_cmd_timedout) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags) ||
+           test_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "Ignore scan. Card removed or firmware in bad state\n");
                return -EFAULT;
 
 
        adapter = card->adapter;
 
-       if (!adapter->is_suspended) {
+       if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, WARN,
                            "device already resumed\n");
                return 0;
        }
 
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
 
        /* Disable Host Sleep */
        mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA),
                                MWIFIEX_SDIO_BLOCK_SIZE) : pkt_len;
        u32 ioport = (port & MWIFIEX_SDIO_IO_PORT_MASK);
 
-       if (adapter->is_suspended) {
+       if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "%s: not allowed while suspended\n", __func__);
                return -1;
        if (!mwifiex_enable_hs(adapter)) {
                mwifiex_dbg(adapter, ERROR,
                            "cmd: failed to suspend\n");
-               adapter->hs_enabling = false;
+               clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
                mwifiex_disable_wake(adapter);
                return -EFAULT;
        }
        ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
 
        /* Indicate device suspended */
-       adapter->is_suspended = true;
-       adapter->hs_enabling = false;
+       set_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
+       clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
 
        return ret;
 }
 
        adapter->tx_lock_flag = false;
        adapter->pps_uapsd_mode = false;
 
-       if (adapter->is_cmd_timedout && adapter->curr_cmd)
+       if (test_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags) &&
+           adapter->curr_cmd)
                return;
        priv->media_connected = false;
        mwifiex_dbg(adapter, MSG,
 
                }
                if (hs_cfg->is_invoke_hostcmd) {
                        if (hs_cfg->conditions == HS_CFG_CANCEL) {
-                               if (!adapter->is_hs_configured)
+                               if (!test_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                             &adapter->work_flags))
                                        /* Already cancelled */
                                        break;
                                /* Save previous condition */
        memset(&hscfg, 0, sizeof(hscfg));
        hscfg.is_invoke_hostcmd = true;
 
-       adapter->hs_enabling = true;
+       set_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
        mwifiex_cancel_all_pending_cmd(adapter);
 
        if (mwifiex_set_hs_params(mwifiex_get_priv(adapter,
        else
                info->wep_status = false;
 
-       info->is_hs_configured = adapter->is_hs_configured;
+       info->is_hs_configured = test_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                         &adapter->work_flags);
        info->is_deep_sleep = adapter->is_deep_sleep;
 
        return 0;
 
        int ret;
        struct mwifiex_txinfo *tx_info = NULL;
 
-       if (adapter->surprise_removed)
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags))
                return -1;
 
        if (!priv->media_connected)
 
                atomic_dec(&card->rx_data_urb_pending);
 
        if (recv_length) {
-               if (urb->status || (adapter->surprise_removed)) {
+               if (urb->status ||
+                   test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags)) {
                        mwifiex_dbg(adapter, ERROR,
                                    "URB status is failed: %d\n", urb->status);
                        /* Do not free skb in case of command ep */
                                dev_kfree_skb_any(skb);
                }
        } else if (urb->status) {
-               if (!adapter->is_suspended) {
+               if (!test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                        mwifiex_dbg(adapter, FATAL,
                                    "Card is removed: %d\n", urb->status);
-                       adapter->surprise_removed = true;
+                       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
                }
                dev_kfree_skb_any(skb);
                return;
                return 0;
        }
 
-       if (unlikely(adapter->is_suspended))
+       if (unlikely(test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)))
                mwifiex_dbg(adapter, WARN,
                            "Device already suspended\n");
 
        if (!mwifiex_enable_hs(adapter)) {
                mwifiex_dbg(adapter, ERROR,
                            "cmd: failed to suspend\n");
-               adapter->hs_enabling = false;
+               clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
                return -EFAULT;
        }
 
 
-       /* 'is_suspended' flag indicates device is suspended.
+       /* 'MWIFIEX_IS_SUSPENDED' bit indicates device is suspended.
         * It must be set here before the usb_kill_urb() calls. Reason
         * is in the complete handlers, urb->status(= -ENOENT) and
         * this flag is used in combination to distinguish between a
         * 'suspended' state and a 'disconnect' one.
         */
-       adapter->is_suspended = true;
-       adapter->hs_enabling = false;
+       set_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
+       clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
 
        if (atomic_read(&card->rx_cmd_urb_pending) && card->rx_cmd.urb)
                usb_kill_urb(card->rx_cmd.urb);
        }
        adapter = card->adapter;
 
-       if (unlikely(!adapter->is_suspended)) {
+       if (unlikely(!test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags))) {
                mwifiex_dbg(adapter, WARN,
                            "Device already resumed\n");
                return 0;
        /* Indicate device resumed. The netdev queue will be resumed only
         * after the urbs have been re-submitted
         */
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
 
        if (!atomic_read(&card->rx_data_urb_pending))
                for (i = 0; i < MWIFIEX_RX_DATA_URB; i++)
        unsigned long flags;
        int idx, ret;
 
-       if (adapter->is_suspended) {
+       if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "%s: not allowed while suspended\n", __func__);
                return -1;
        }
 
-       if (adapter->surprise_removed) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR, "%s: device removed\n", __func__);
                return -1;
        }
 
                info->is_deep_sleep = adapter->is_deep_sleep;
                info->pm_wakeup_card_req = adapter->pm_wakeup_card_req;
                info->pm_wakeup_fw_try = adapter->pm_wakeup_fw_try;
-               info->is_hs_configured = adapter->is_hs_configured;
+               info->is_hs_configured = test_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                                 &adapter->work_flags);
                info->hs_activated = adapter->hs_activated;
-               info->is_cmd_timedout = adapter->is_cmd_timedout;
+               info->is_cmd_timedout = test_bit(MWIFIEX_IS_CMD_TIMEDOUT,
+                                                &adapter->work_flags);
                info->num_cmd_host_to_card_failure
                                = adapter->dbg.num_cmd_host_to_card_failure;
                info->num_cmd_sleep_cfm_host_to_card_failure
 
        memcpy(tos_to_tid, ac_to_tid, sizeof(tos_to_tid));
 
        if (priv->adapter->if_ops.clean_pcie_ring &&
-           !priv->adapter->surprise_removed)
+           !test_bit(MWIFIEX_SURPRISE_REMOVED, &priv->adapter->work_flags))
                priv->adapter->if_ops.clean_pcie_ring(priv->adapter);
        spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags);