Commit 48cefdfb authored by Igor Mitsyanko's avatar Igor Mitsyanko Committed by Kalle Valo

qtnfmac: flexible regulatory domain registration logic

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: default avatarIgor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 2c31129f
...@@ -1073,6 +1073,7 @@ int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac) ...@@ -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 wiphy *wiphy = priv_to_wiphy(mac);
struct qtnf_mac_info *macinfo = &mac->macinfo; struct qtnf_mac_info *macinfo = &mac->macinfo;
int ret; int ret;
bool regdomain_is_known;
if (!wiphy) { if (!wiphy) {
pr_err("invalid wiphy pointer\n"); pr_err("invalid wiphy pointer\n");
...@@ -1144,11 +1145,20 @@ int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac) ...@@ -1144,11 +1145,20 @@ int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac)
wiphy->wowlan = macinfo->wowlan; wiphy->wowlan = macinfo->wowlan;
#endif #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) { 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->reg_notifier = qtnf_cfg80211_reg_notifier;
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); wiphy_apply_custom_regulatory(wiphy, hw_info->rd);
} else if (regdomain_is_known) {
wiphy->regulatory_flags |= REGULATORY_STRICT_REG;
}
} else { } else {
wiphy->regulatory_flags |= REGULATORY_WIPHY_SELF_MANAGED; 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) ...@@ -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) if (wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED)
ret = regulatory_set_wiphy_regd(wiphy, hw_info->rd); ret = regulatory_set_wiphy_regd(wiphy, hw_info->rd);
else if (isalpha(hw_info->rd->alpha2[0]) && else if (regdomain_is_known)
isalpha(hw_info->rd->alpha2[1]))
ret = regulatory_hint(wiphy, hw_info->rd->alpha2); ret = regulatory_hint(wiphy, hw_info->rd->alpha2);
out: out:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment