From: Sven Eckelmann Date: Fri, 6 Jan 2017 13:29:56 +0100 Subject: mac80211: Allow switching of the ath regulatory domain ath10k has to switch the regulatory domain when switching the default country when ATH_USER_REGD is enabled. This is for example important when switching from country US (FCC) to DE (ETSI). The ath implementation will use ath_reg_dyn_country_user_allow to check if this is allowed. Unfortunately, this function always seems to return false to ath_reg_notifier_apply even when ATH_USER_REGD is enabled. But it must actually always accept the requests from the user (when ATH_USER_REGD is enabled) to correctly set the conformance test limits in the ath10k binary blob. Not doing it will sometimes allow too high transmit powers on edge channels for correctly calibrated devices outside their default regulatory domain. Signed-off-by: Sven Eckelmann Forwarded: https://github.com/openwrt/openwrt/pull/306 diff --git a/package/kernel/mac80211/patches/402-ath_regd_optional.patch b/package/kernel/mac80211/patches/402-ath_regd_optional.patch index 463428371b4c96ee63b6eba1477023ff739c6129..a3572a297718f883f6126fc33aff5e14a046b9a0 100644 --- a/package/kernel/mac80211/patches/402-ath_regd_optional.patch +++ b/package/kernel/mac80211/patches/402-ath_regd_optional.patch @@ -1,6 +1,15 @@ --- a/drivers/net/wireless/ath/regd.c +++ b/drivers/net/wireless/ath/regd.c -@@ -341,6 +341,10 @@ ath_reg_apply_beaconing_flags(struct wip +@@ -188,6 +188,8 @@ static bool dynamic_country_user_possibl + + static bool ath_reg_dyn_country_user_allow(struct ath_regulatory *reg) + { ++ if (config_enabled(CPTCFG_ATH_USER_REGD)) ++ return true; + if (!config_enabled(CPTCFG_ATH_REG_DYNAMIC_USER_REG_HINTS)) + return false; + if (!dynamic_country_user_possible(reg)) +@@ -341,6 +343,10 @@ ath_reg_apply_beaconing_flags(struct wip struct ieee80211_channel *ch; unsigned int i; @@ -11,7 +20,7 @@ for (band = 0; band < NUM_NL80211_BANDS; band++) { if (!wiphy->bands[band]) continue; -@@ -374,6 +378,10 @@ ath_reg_apply_ir_flags(struct wiphy *wip +@@ -374,6 +380,10 @@ ath_reg_apply_ir_flags(struct wiphy *wip { struct ieee80211_supported_band *sband; @@ -22,7 +31,7 @@ sband = wiphy->bands[NL80211_BAND_2GHZ]; if (!sband) return; -@@ -402,6 +410,10 @@ static void ath_reg_apply_radar_flags(st +@@ -402,6 +412,10 @@ static void ath_reg_apply_radar_flags(st struct ieee80211_channel *ch; unsigned int i; @@ -33,7 +42,7 @@ if (!wiphy->bands[NL80211_BAND_5GHZ]) return; -@@ -633,6 +645,11 @@ ath_regd_init_wiphy(struct ath_regulator +@@ -633,6 +647,11 @@ ath_regd_init_wiphy(struct ath_regulator const struct ieee80211_regdomain *regd; wiphy->reg_notifier = reg_notifier;