diff --git a/patches/openwrt/0094-mac80211-Allow-switching-of-the-ath-regulatory-domain.patch b/patches/openwrt/0094-mac80211-Allow-switching-of-the-ath-regulatory-domain.patch new file mode 100644 index 00000000..0ded4049 --- /dev/null +++ b/patches/openwrt/0094-mac80211-Allow-switching-of-the-ath-regulatory-domain.patch @@ -0,0 +1,70 @@ +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;