Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / mwl8k.c
index aaaf10d48f7dec1b5b8f17dd2ccfbbe58415ad71..956c1084ebf13ade0959fff0ad894a4910b60108 100644 (file)
@@ -232,6 +232,7 @@ struct mwl8k_priv {
        u16 num_mcaddrs;
        u8 hw_rev;
        u32 fw_rev;
+       u32 caps;
 
        /*
         * Running count of TX packets in flight, to avoid
@@ -2410,6 +2411,9 @@ mwl8k_set_caps(struct ieee80211_hw *hw, u32 caps)
 {
        struct mwl8k_priv *priv = hw->priv;
 
+       if (priv->caps)
+               return;
+
        if ((caps & MWL8K_CAP_2GHZ4) || !(caps & MWL8K_CAP_BAND_MASK)) {
                mwl8k_setup_2ghz_band(hw);
                if (caps & MWL8K_CAP_MIMO)
@@ -2421,6 +2425,8 @@ mwl8k_set_caps(struct ieee80211_hw *hw, u32 caps)
                if (caps & MWL8K_CAP_MIMO)
                        mwl8k_set_ht_caps(hw, &priv->band_50, caps);
        }
+
+       priv->caps = caps;
 }
 
 static int mwl8k_cmd_get_hw_spec_sta(struct ieee80211_hw *hw)
@@ -4801,16 +4807,14 @@ static int mwl8k_config(struct ieee80211_hw *hw, u32 changed)
        struct mwl8k_priv *priv = hw->priv;
        int rc;
 
-       if (conf->flags & IEEE80211_CONF_IDLE) {
-               mwl8k_cmd_radio_disable(hw);
-               return 0;
-       }
-
        rc = mwl8k_fw_lock(hw);
        if (rc)
                return rc;
 
-       rc = mwl8k_cmd_radio_enable(hw);
+       if (conf->flags & IEEE80211_CONF_IDLE)
+               rc = mwl8k_cmd_radio_disable(hw);
+       else
+               rc = mwl8k_cmd_radio_enable(hw);
        if (rc)
                goto out;