diff --git a/package/kernel/mwlwifi/Makefile b/package/kernel/mwlwifi/Makefile
index d8dc067a6c9d85479dad13ad8c1ba38a02eb9007..bec27328bece6c74577935495c1d2c20c0985918 100644
--- a/package/kernel/mwlwifi/Makefile
+++ b/package/kernel/mwlwifi/Makefile
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mwlwifi
-PKG_VERSION:=10.3.0.8-20150819
+PKG_VERSION:=10.3.0.12-20151029
 PKG_RELEASE=1
 
 PKG_LICENSE:=ISC
@@ -17,7 +17,7 @@ PKG_LICENSE_FILES:=
 PKG_SOURCE_URL:=https://github.com/kaloz/mwlwifi
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=59e0d3d167a5bc2c03010df4ed54cc0653b5ae58
+PKG_SOURCE_VERSION:=30e6b06de659f1d5e46d1dd3bf590caf3529bb65
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
 
 PKG_MAINTAINER:=Imre Kaloz <kaloz@openwrt.org>
diff --git a/package/kernel/mwlwifi/patches/100-api_update.patch b/package/kernel/mwlwifi/patches/100-drop_old_api.patch
similarity index 54%
rename from package/kernel/mwlwifi/patches/100-api_update.patch
rename to package/kernel/mwlwifi/patches/100-drop_old_api.patch
index 09d65d2df3aa126c8408e511f024b439c143440f..1ab161544d9b9fac675767370ef7f46c1c74aa3c 100644
--- a/package/kernel/mwlwifi/patches/100-api_update.patch
+++ b/package/kernel/mwlwifi/patches/100-drop_old_api.patch
@@ -1,27 +1,36 @@
 --- a/main.c
 +++ b/main.c
-@@ -476,7 +476,7 @@ static void mwl_set_ht_caps(struct mwl_p
+@@ -414,11 +414,7 @@ static void mwl_set_ht_caps(struct mwl_p
  	band->ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
  	band->ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
  
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
 -	hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
-+	ieee80211_hw_set(hw, AMPDU_AGGREGATION);
+-#else
+ 	ieee80211_hw_set(hw, AMPDU_AGGREGATION);
+-#endif
  	band->ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
  	band->ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_4;
  
-@@ -578,12 +578,13 @@ static int mwl_wl_init(struct mwl_priv *
+@@ -520,21 +516,13 @@ static int mwl_wl_init(struct mwl_priv *
  	hw->queues = SYSADPT_TX_WMM_QUEUES;
  
  	/* Set rssi values to dBm */
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
 -	hw->flags |= IEEE80211_HW_SIGNAL_DBM | IEEE80211_HW_HAS_RATE_CONTROL;
-+	ieee80211_hw_set(hw, SIGNAL_DBM);
-+	ieee80211_hw_set(hw, HAS_RATE_CONTROL);
+-#else
+ 	ieee80211_hw_set(hw, SIGNAL_DBM);
+ 	ieee80211_hw_set(hw, HAS_RATE_CONTROL);
+-#endif
  
- 	/* Ask mac80211 to not to trigger PS mode
+ 	/* Ask mac80211 not to trigger PS mode
  	 * based on PM bit of incoming frames.
  	 */
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
 -	hw->flags |= IEEE80211_HW_AP_LINK_PS;
-+	ieee80211_hw_set(hw, AP_LINK_PS);
+-#else
+ 	ieee80211_hw_set(hw, AP_LINK_PS);
+-#endif
  
  	hw->vif_data_size = sizeof(struct mwl_vif);
  	hw->sta_data_size = sizeof(struct mwl_sta);