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 0000000000000000000000000000000000000000..0ded404923be1a58e951dcdffbf660e6d0e539c1
--- /dev/null
+++ b/patches/openwrt/0094-mac80211-Allow-switching-of-the-ath-regulatory-domain.patch
@@ -0,0 +1,70 @@
+From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
+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 <sven.eckelmann@open-mesh.com>
+
+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;