aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/337-ath-use-CTL-region-from-cfg80211-if-unset-in-EEPROM.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/337-ath-use-CTL-region-from-cfg80211-if-unset-in-EEPROM.patch')
-rw-r--r--package/kernel/mac80211/patches/337-ath-use-CTL-region-from-cfg80211-if-unset-in-EEPROM.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/337-ath-use-CTL-region-from-cfg80211-if-unset-in-EEPROM.patch b/package/kernel/mac80211/patches/337-ath-use-CTL-region-from-cfg80211-if-unset-in-EEPROM.patch
new file mode 100644
index 0000000000..f451912aea
--- /dev/null
+++ b/package/kernel/mac80211/patches/337-ath-use-CTL-region-from-cfg80211-if-unset-in-EEPROM.patch
@@ -0,0 +1,56 @@
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Wed, 22 Oct 2014 15:21:22 +0200
+Subject: [PATCH] ath: use CTL region from cfg80211 if unset in EEPROM
+
+Many AP devices do not have the proper regulatory domain programmed in
+EEPROM. Instead they expect the software to set the appropriate region.
+For these devices, the country code defaults to US, and the driver uses
+the US CTL tables as well.
+On devices bought in Europe this can lead to tx power being set too high
+on the band edges, even if the cfg80211 regdomain is set correctly.
+Fix this issue by taking into account the DFS region, but only when the
+EEPROM regdomain is set to default.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+---
+
+--- a/drivers/net/wireless/ath/ath.h
++++ b/drivers/net/wireless/ath/ath.h
+@@ -80,6 +80,7 @@ struct reg_dmn_pair_mapping {
+
+ struct ath_regulatory {
+ char alpha2[2];
++ enum nl80211_dfs_regions region;
+ u16 country_code;
+ u16 max_power_level;
+ u16 current_rd;
+--- a/drivers/net/wireless/ath/regd.c
++++ b/drivers/net/wireless/ath/regd.c
+@@ -515,6 +515,7 @@ void ath_reg_notifier_apply(struct wiphy
+ if (!request)
+ return;
+
++ reg->region = request->dfs_region;
+ switch (request->initiator) {
+ case NL80211_REGDOM_SET_BY_CORE:
+ /*
+@@ -779,6 +780,19 @@ u32 ath_regd_get_band_ctl(struct ath_reg
+ return SD_NO_CTL;
+ }
+
++ if (ath_regd_get_eepromRD(reg) == CTRY_DEFAULT) {
++ switch (reg->region) {
++ case NL80211_DFS_FCC:
++ return CTL_FCC;
++ case NL80211_DFS_ETSI:
++ return CTL_ETSI;
++ case NL80211_DFS_JP:
++ return CTL_MKK;
++ default:
++ break;
++ }
++ }
++
+ switch (band) {
+ case IEEE80211_BAND_2GHZ:
+ return reg->regpair->reg_2ghz_ctl;