unsigned long scan_start;
        unsigned long scan_pass_start;
        unsigned long scan_start_tsf;
+       unsigned long last_internal_scan_jiffies;
        void *scan;
        int scan_bands;
        struct cfg80211_scan_request *scan_request;
 
                       le32_to_cpu(notif->tsf_low) - priv->scan_start_tsf);
 #endif
 
-       priv->next_scan_jiffies = 0;
+       if (!priv->is_internal_short_scan)
+               priv->next_scan_jiffies = 0;
 }
 
 /* Service SCAN_COMPLETE_NOTIFICATION (0x84) */
                        goto reschedule;
        }
 
-       priv->next_scan_jiffies = 0;
+       if (!priv->is_internal_short_scan)
+               priv->next_scan_jiffies = 0;
+       else
+               priv->last_internal_scan_jiffies = jiffies;
+
        IWL_DEBUG_INFO(priv, "Setting scan to off\n");
 
        clear_bit(STATUS_SCANNING, &priv->status);
  * internal short scan, this function should only been called while associated.
  * It will reset and tune the radio to prevent possible RF related problem
  */
+#define IWL_DELAY_NEXT_INTERNAL_SCAN (HZ*1)
+
 int iwl_internal_short_hw_scan(struct iwl_priv *priv)
 {
        int ret = 0;
                ret = -EAGAIN;
                goto out;
        }
+       if (priv->last_internal_scan_jiffies &&
+           time_after(priv->last_internal_scan_jiffies +
+                      IWL_DELAY_NEXT_INTERNAL_SCAN, jiffies)) {
+               IWL_DEBUG_SCAN(priv, "internal scan rejected\n");
+               goto out;
+       }
+
        priv->scan_bands = 0;
        if (priv->band == IEEE80211_BAND_5GHZ)
                priv->scan_bands |= BIT(IEEE80211_BAND_5GHZ);