mutex_lock(&local->iflist_mtx);
        chg = __ieee80211_recalc_idle(local);
        mutex_unlock(&local->iflist_mtx);
-       ieee80211_hw_config(local, chg);
+       if (chg)
+               ieee80211_hw_config(local, chg);
 }
 
 
 int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
 {
-       struct ieee80211_channel *chan;
+       struct ieee80211_channel *chan, *scan_chan;
        int ret = 0;
        int power;
        enum nl80211_channel_type channel_type;
 
        might_sleep();
 
-       if (local->sw_scanning) {
-               chan = local->scan_channel;
+       scan_chan = local->scan_channel;
+
+       if (scan_chan) {
+               chan = scan_chan;
                channel_type = NL80211_CHAN_NO_HT;
        } else {
                chan = local->oper_channel;
                changed |= IEEE80211_CONF_CHANGE_CHANNEL;
        }
 
-       if (local->sw_scanning)
+       if (scan_chan)
                power = chan->max_power;
        else
                power = local->power_constr_level ?
                if (!local->oper_channel) {
                        /* init channel we're on */
                        local->hw.conf.channel =
-                       local->oper_channel =
-                       local->scan_channel = &sband->channels[0];
+                       local->oper_channel = &sband->channels[0];
+                       local->hw.conf.channel_type = NL80211_CHAN_NO_HT;
                }
                channels += sband->n_channels;
 
 
        was_hw_scan = local->hw_scanning;
        local->hw_scanning = false;
        local->sw_scanning = false;
+       local->scan_channel = NULL;
 
        /* we only have to protect scan_req and hw/sw scan */
        mutex_unlock(&local->scan_mtx);