]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
qtnfmac: flexible regulatory domain registration logic
authorIgor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Wed, 20 Mar 2019 10:03:55 +0000 (10:03 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 4 Apr 2019 09:57:27 +0000 (12:57 +0300)
Use REGULATORY_CUSTOM_REG flag only if firmware advertised a custom
regulatory domain prior to wiphy registration. Use REGULATORY_STRICT_REG
flag only if firmware knows its regulatory domain.

Signed-off-by: Igor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/quantenna/qtnfmac/cfg80211.c

index ae08b37d81d2ab523129a4044a33f05362180554..3131ced8801fa890589d180e67fee7a34915a03c 100644 (file)
@@ -1073,6 +1073,7 @@ int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac)
        struct wiphy *wiphy = priv_to_wiphy(mac);
        struct qtnf_mac_info *macinfo = &mac->macinfo;
        int ret;
+       bool regdomain_is_known;
 
        if (!wiphy) {
                pr_err("invalid wiphy pointer\n");
@@ -1144,11 +1145,20 @@ int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac)
                wiphy->wowlan = macinfo->wowlan;
 #endif
 
+       regdomain_is_known = isalpha(hw_info->rd->alpha2[0]) &&
+               isalpha(hw_info->rd->alpha2[1]);
+
        if (hw_info->hw_capab & QLINK_HW_CAPAB_REG_UPDATE) {
-               wiphy->regulatory_flags |= REGULATORY_STRICT_REG |
-                       REGULATORY_CUSTOM_REG;
                wiphy->reg_notifier = qtnf_cfg80211_reg_notifier;
-               wiphy_apply_custom_regulatory(wiphy, hw_info->rd);
+
+               if (hw_info->rd->alpha2[0] == '9' &&
+                   hw_info->rd->alpha2[1] == '9') {
+                       wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG |
+                               REGULATORY_STRICT_REG;
+                       wiphy_apply_custom_regulatory(wiphy, hw_info->rd);
+               } else if (regdomain_is_known) {
+                       wiphy->regulatory_flags |= REGULATORY_STRICT_REG;
+               }
        } else {
                wiphy->regulatory_flags |= REGULATORY_WIPHY_SELF_MANAGED;
        }
@@ -1172,8 +1182,7 @@ int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac)
 
        if (wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED)
                ret = regulatory_set_wiphy_regd(wiphy, hw_info->rd);
-       else if (isalpha(hw_info->rd->alpha2[0]) &&
-                isalpha(hw_info->rd->alpha2[1]))
+       else if (regdomain_is_known)
                ret = regulatory_hint(wiphy, hw_info->rd->alpha2);
 
 out: