wiphy_dbg(wiphy, "info: received scan request on %s\n", dev->name);
 
-       if ((request->flags & NL80211_SCAN_FLAG_LOW_PRIORITY) &&
-           atomic_read(&priv->wmm.tx_pkts_queued) >=
-           MWIFIEX_MIN_TX_PENDING_TO_CANCEL_SCAN) {
-               dev_dbg(priv->adapter->dev, "scan rejected due to traffic\n");
-               return -EBUSY;
-       }
-
        /* Block scan request if scan operation or scan cleanup when interface
         * is disabled is in process
         */
 
        wiphy->features |= NL80211_FEATURE_HT_IBSS |
                           NL80211_FEATURE_INACTIVITY_TIMER |
-                          NL80211_FEATURE_LOW_PRIORITY_SCAN |
                           NL80211_FEATURE_NEED_OBSS_SCAN;
 
        /* Reserve space for mwifiex specific private data for BSS */
 
        memset(&adapter->arp_filter, 0, sizeof(adapter->arp_filter));
        adapter->arp_filter_size = 0;
        adapter->max_mgmt_ie_index = MAX_MGMT_IE_INDEX;
-       adapter->empty_tx_q_cnt = 0;
        adapter->ext_scan = true;
        adapter->key_api_major_ver = 0;
        adapter->key_api_minor_ver = 0;
 
 static char *cal_data_cfg;
 module_param(cal_data_cfg, charp, 0);
 
-static void scan_delay_timer_fn(unsigned long data)
-{
-       struct mwifiex_private *priv = (struct mwifiex_private *)data;
-       struct mwifiex_adapter *adapter = priv->adapter;
-       struct cmd_ctrl_node *cmd_node, *tmp_node;
-       spinlock_t *scan_q_lock = &adapter->scan_pending_q_lock;
-       unsigned long flags;
-
-       if (adapter->surprise_removed)
-               return;
-
-       if (adapter->scan_delay_cnt == MWIFIEX_MAX_SCAN_DELAY_CNT ||
-           !adapter->scan_processing) {
-               /*
-                * Abort scan operation by cancelling all pending scan
-                * commands
-                */
-               spin_lock_irqsave(scan_q_lock, flags);
-               list_for_each_entry_safe(cmd_node, tmp_node,
-                                        &adapter->scan_pending_q, list) {
-                       list_del(&cmd_node->list);
-                       mwifiex_insert_cmd_to_free_q(adapter, cmd_node);
-               }
-               spin_unlock_irqrestore(scan_q_lock, flags);
-
-               spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags);
-               adapter->scan_processing = false;
-               adapter->scan_delay_cnt = 0;
-               adapter->empty_tx_q_cnt = 0;
-               spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags);
-
-               if (priv->scan_request) {
-                       dev_dbg(adapter->dev, "info: aborting scan\n");
-                       cfg80211_scan_done(priv->scan_request, 1);
-                       priv->scan_request = NULL;
-               } else {
-                       priv->scan_aborting = false;
-                       dev_dbg(adapter->dev, "info: scan already aborted\n");
-               }
-               goto done;
-       }
-
-       if (!atomic_read(&priv->adapter->is_tx_received)) {
-               adapter->empty_tx_q_cnt++;
-               if (adapter->empty_tx_q_cnt == MWIFIEX_MAX_EMPTY_TX_Q_CNT) {
-                       /*
-                        * No Tx traffic for 200msec. Get scan command from
-                        * scan pending queue and put to cmd pending queue to
-                        * resume scan operation
-                        */
-                       adapter->scan_delay_cnt = 0;
-                       adapter->empty_tx_q_cnt = 0;
-                       spin_lock_irqsave(scan_q_lock, flags);
-
-                       if (list_empty(&adapter->scan_pending_q)) {
-                               spin_unlock_irqrestore(scan_q_lock, flags);
-                               goto done;
-                       }
-
-                       cmd_node = list_first_entry(&adapter->scan_pending_q,
-                                                   struct cmd_ctrl_node, list);
-                       list_del(&cmd_node->list);
-                       spin_unlock_irqrestore(scan_q_lock, flags);
-
-                       mwifiex_insert_cmd_to_pending_q(adapter, cmd_node,
-                                                       true);
-                       queue_work(adapter->workqueue, &adapter->main_work);
-                       goto done;
-               }
-       } else {
-               adapter->empty_tx_q_cnt = 0;
-       }
-
-       /* Delay scan operation further by 20msec */
-       mod_timer(&priv->scan_delay_timer, jiffies +
-                 msecs_to_jiffies(MWIFIEX_SCAN_DELAY_MSEC));
-       adapter->scan_delay_cnt++;
-
-done:
-       if (atomic_read(&priv->adapter->is_tx_received))
-               atomic_set(&priv->adapter->is_tx_received, false);
-
-       return;
-}
-
 /*
  * This function registers the device and performs all the necessary
  * initializations.
 
                adapter->priv[i]->adapter = adapter;
                adapter->priv_num++;
-
-               setup_timer(&adapter->priv[i]->scan_delay_timer,
-                           scan_delay_timer_fn,
-                           (unsigned long)adapter->priv[i]);
        }
        mwifiex_init_lock_list(adapter);
 
        for (i = 0; i < adapter->priv_num; i++) {
                if (adapter->priv[i]) {
                        mwifiex_free_curr_bcn(adapter->priv[i]);
-                       del_timer_sync(&adapter->priv[i]->scan_delay_timer);
                        kfree(adapter->priv[i]);
                }
        }
                                break;
 
                        if ((!adapter->scan_chan_gap_enabled &&
-                            !adapter->scan_delay_cnt &&
                             adapter->scan_processing) || adapter->data_sent ||
                            mwifiex_wmm_lists_empty(adapter)) {
                                if (adapter->cmd_sent || adapter->curr_cmd ||
                }
 
                if ((adapter->scan_chan_gap_enabled ||
-                    (!adapter->scan_processing || adapter->scan_delay_cnt)) &&
+                    !adapter->scan_processing) &&
                    !adapter->data_sent && !mwifiex_wmm_lists_empty(adapter)) {
                        mwifiex_wmm_process_tx(adapter);
                        if (adapter->hs_activated) {
        atomic_inc(&priv->adapter->tx_pending);
        mwifiex_wmm_add_buf_txqueue(priv, skb);
 
-       if (priv->adapter->scan_delay_cnt)
-               atomic_set(&priv->adapter->is_tx_received, true);
-
        queue_work(priv->adapter->workqueue, &priv->adapter->main_work);
 
        return 0;
 
 
 #define MWIFIEX_MAX_TOTAL_SCAN_TIME    (MWIFIEX_TIMER_10S - MWIFIEX_TIMER_1S)
 
-#define MWIFIEX_MAX_SCAN_DELAY_CNT                     50
-#define MWIFIEX_MAX_EMPTY_TX_Q_CNT                     10
-#define MWIFIEX_SCAN_DELAY_MSEC                                20
-
-#define MWIFIEX_MIN_TX_PENDING_TO_CANCEL_SCAN          2
-
 #define RSN_GTK_OUI_OFFSET                             2
 
 #define MWIFIEX_OUI_NOT_PRESENT                        0
        u16 proberesp_idx;
        u16 assocresp_idx;
        u16 rsn_idx;
-       struct timer_list scan_delay_timer;
        u8 ap_11n_enabled;
        u8 ap_11ac_enabled;
        u32 mgmt_frame_mask;
        spinlock_t queue_lock;          /* lock for tx queues */
        u8 country_code[IEEE80211_COUNTRY_STRING_LEN];
        u16 max_mgmt_ie_index;
-       u8 scan_delay_cnt;
-       u8 empty_tx_q_cnt;
        const struct firmware *cal_data;
        struct device_node *dt_node;
 
        u32 usr_dot_11ac_dev_cap_a;
        u32 usr_dot_11ac_mcs_support;
 
-       atomic_t is_tx_received;
        atomic_t pending_bridged_pkts;
        struct semaphore *card_sem;
        bool ext_scan;
 
 static void mwifiex_check_next_scan_command(struct mwifiex_private *priv)
 {
        struct mwifiex_adapter *adapter = priv->adapter;
-       struct cmd_ctrl_node *cmd_node;
+       struct cmd_ctrl_node *cmd_node, *tmp_node;
        unsigned long flags;
 
        spin_lock_irqsave(&adapter->scan_pending_q_lock, flags);
                        priv->scan_aborting = false;
                        dev_dbg(adapter->dev, "info: scan already aborted\n");
                }
-       } else {
-               if ((priv->scan_aborting && !priv->scan_request) ||
-                   priv->scan_block) {
-                       spin_unlock_irqrestore(&adapter->scan_pending_q_lock,
-                                              flags);
-                       adapter->scan_delay_cnt = MWIFIEX_MAX_SCAN_DELAY_CNT;
-                       mod_timer(&priv->scan_delay_timer, jiffies);
-                       dev_dbg(priv->adapter->dev,
-                               "info: %s: triggerring scan abort\n", __func__);
-               } else if (!mwifiex_wmm_lists_empty(adapter) &&
-                          (priv->scan_request && (priv->scan_request->flags &
-                                           NL80211_SCAN_FLAG_LOW_PRIORITY))) {
-                       spin_unlock_irqrestore(&adapter->scan_pending_q_lock,
-                                              flags);
-                       adapter->scan_delay_cnt = 1;
-                       mod_timer(&priv->scan_delay_timer, jiffies +
-                                 msecs_to_jiffies(MWIFIEX_SCAN_DELAY_MSEC));
-                       dev_dbg(priv->adapter->dev,
-                               "info: %s: deferring scan\n", __func__);
-               } else {
-                       /* Get scan command from scan_pending_q and put to
-                        * cmd_pending_q
-                        */
-                       cmd_node = list_first_entry(&adapter->scan_pending_q,
-                                                   struct cmd_ctrl_node, list);
+       } else if ((priv->scan_aborting && !priv->scan_request) ||
+                  priv->scan_block) {
+               list_for_each_entry_safe(cmd_node, tmp_node,
+                                        &adapter->scan_pending_q, list) {
                        list_del(&cmd_node->list);
-                       spin_unlock_irqrestore(&adapter->scan_pending_q_lock,
-                                              flags);
-                       mwifiex_insert_cmd_to_pending_q(adapter, cmd_node,
-                                                       true);
+                       mwifiex_insert_cmd_to_free_q(adapter, cmd_node);
+               }
+               spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags);
+
+               spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags);
+               adapter->scan_processing = false;
+               spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags);
+
+               if (priv->scan_request) {
+                       dev_dbg(adapter->dev, "info: aborting scan\n");
+                       cfg80211_scan_done(priv->scan_request, 1);
+                       priv->scan_request = NULL;
+               } else {
+                       priv->scan_aborting = false;
+                       dev_dbg(adapter->dev, "info: scan already aborted\n");
                }
+       } else {
+               /* Get scan command from scan_pending_q and put to
+                * cmd_pending_q
+                */
+               cmd_node = list_first_entry(&adapter->scan_pending_q,
+                                           struct cmd_ctrl_node, list);
+               list_del(&cmd_node->list);
+               spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags);
+               mwifiex_insert_cmd_to_pending_q(adapter, cmd_node, true);
        }
 
        return;