Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / ath / ath9k / init.c
index af932c9444def08a14e8826948936ba33e73342c..3be2eb0da84a42d5056e512de489beb4d2757bea 100644 (file)
@@ -319,6 +319,10 @@ static void ath9k_reg_notifier(struct wiphy *wiphy,
                ath9k_ps_wakeup(sc);
                ath9k_hw_set_txpowerlimit(ah, sc->config.txpowlimit, false);
                sc->curtxpow = ath9k_hw_regulatory(ah)->power_limit;
+               /* synchronize DFS detector if regulatory domain changed */
+               if (sc->dfs_detector != NULL)
+                       sc->dfs_detector->set_dfs_domain(sc->dfs_detector,
+                                                        request->dfs_region);
                ath9k_ps_restore(sc);
        }
 }
@@ -727,12 +731,28 @@ static const struct ieee80211_iface_limit if_limits[] = {
                                 BIT(NL80211_IFTYPE_P2P_GO) },
 };
 
-static const struct ieee80211_iface_combination if_comb = {
-       .limits = if_limits,
-       .n_limits = ARRAY_SIZE(if_limits),
-       .max_interfaces = 2048,
-       .num_different_channels = 1,
-       .beacon_int_infra_match = true,
+
+static const struct ieee80211_iface_limit if_dfs_limits[] = {
+       { .max = 1,     .types = BIT(NL80211_IFTYPE_AP) },
+};
+
+static const struct ieee80211_iface_combination if_comb[] = {
+       {
+               .limits = if_limits,
+               .n_limits = ARRAY_SIZE(if_limits),
+               .max_interfaces = 2048,
+               .num_different_channels = 1,
+               .beacon_int_infra_match = true,
+       },
+       {
+               .limits = if_dfs_limits,
+               .n_limits = ARRAY_SIZE(if_dfs_limits),
+               .max_interfaces = 1,
+               .num_different_channels = 1,
+               .beacon_int_infra_match = true,
+               .radar_detect_widths =  BIT(NL80211_CHAN_NO_HT) |
+                                       BIT(NL80211_CHAN_HT20),
+       }
 };
 
 void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
@@ -763,8 +783,8 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
                BIT(NL80211_IFTYPE_ADHOC) |
                BIT(NL80211_IFTYPE_MESH_POINT);
 
-       hw->wiphy->iface_combinations = &if_comb;
-       hw->wiphy->n_iface_combinations = 1;
+       hw->wiphy->iface_combinations = if_comb;
+       hw->wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
 
        if (AR_SREV_5416(sc->sc_ah))
                hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;