diff --git a/package/kernel/mt76/Makefile b/package/kernel/mt76/Makefile
index 05d710387c431187c289bbf3887fe34e333fd4fb..810ee4c3d43314b8bcc3a4f9f4ce43ed28c08150 100644
--- a/package/kernel/mt76/Makefile
+++ b/package/kernel/mt76/Makefile
@@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
 
 PKG_SOURCE_URL:=https://github.com/openwrt/mt76
 PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2021-01-27
-PKG_SOURCE_VERSION:=8696919d9aae9b673f916bca41c5e1671eec5b0e
-PKG_MIRROR_HASH:=82675e11f537eaa2fe2c1029880f7993ed4401d0d59b12faf6dbe96ac3eb8308
+PKG_SOURCE_DATE:=2021-02-14
+PKG_SOURCE_VERSION:=289cd7804587dc48f776d450db9cd3762692a370
+PKG_MIRROR_HASH:=91885feca9d935586c6e33a8e3734bfa61991d869bf42ac0d1c8c3b19bfa9653
 
 PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
 PKG_BUILD_PARALLEL:=1
@@ -143,11 +143,19 @@ define KernelPackage/mt7603
   AUTOLOAD:=$(call AutoProbe,mt7603e)
 endef
 
+define KernelPackage/mt76-connac
+  $(KernelPackage/mt76-default)
+  TITLE:=MediaTek MT7615/MT79xx wireless driver common code
+  HIDDEN:=1
+  DEPENDS+=+kmod-mt76-core
+  FILES:= $(PKG_BUILD_DIR)/mt76-connac-lib.ko
+endef
+
 define KernelPackage/mt7615-common
   $(KernelPackage/mt76-default)
   TITLE:=MediaTek MT7615 wireless driver common code
   HIDDEN:=1
-  DEPENDS+=@PCI_SUPPORT +kmod-mt76-core
+  DEPENDS+=@PCI_SUPPORT +kmod-mt76-core +kmod-mt76-connac
   FILES:= $(PKG_BUILD_DIR)/mt7615/mt7615-common.ko
 endef
 
@@ -210,6 +218,14 @@ define KernelPackage/mt7915e
   AUTOLOAD:=$(call AutoProbe,mt7915e)
 endef
 
+define KernelPackage/mt7921e
+  $(KernelPackage/mt76-default)
+  TITLE:=MediaTek MT7921e wireless driver
+  DEPENDS+=@PCI_SUPPORT +kmod-mt76-connac
+  FILES:= $(PKG_BUILD_DIR)/mt7921/mt7921e.ko
+  AUTOLOAD:=$(call AutoProbe,mt7921e)
+endef
+
 define Package/mt76-test
   SECTION:=devel
   CATEGORY:=Development
@@ -267,6 +283,9 @@ endif
 ifdef CONFIG_PACKAGE_kmod-mt7603
   PKG_MAKE_FLAGS += CONFIG_MT7603E=m
 endif
+ifdef CONFIG_PACKAGE_kmod-mt76-connac
+  PKG_MAKE_FLAGS += CONFIG_MT76_CONNAC_LIB=m
+endif
 ifdef CONFIG_PACKAGE_kmod-mt7615-common
   PKG_MAKE_FLAGS += CONFIG_MT7615_COMMON=m
 endif
@@ -290,6 +309,9 @@ endif
 ifdef CONFIG_PACKAGE_kmod-mt7915e
   PKG_MAKE_FLAGS += CONFIG_MT7915E=m
 endif
+ifdef CONFIG_PACKAGE_kmod-mt7921e
+  PKG_MAKE_FLAGS += CONFIG_MT7921E=m
+endif
 
 define Build/Compile
 	+$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \
@@ -400,6 +422,7 @@ $(eval $(call KernelPackage,mt76x2-common))
 $(eval $(call KernelPackage,mt76x2u))
 $(eval $(call KernelPackage,mt76x2))
 $(eval $(call KernelPackage,mt7603))
+$(eval $(call KernelPackage,mt76-connac))
 $(eval $(call KernelPackage,mt7615-common))
 $(eval $(call KernelPackage,mt7615-firmware))
 $(eval $(call KernelPackage,mt7615e))
@@ -409,5 +432,6 @@ $(eval $(call KernelPackage,mt7663-usb-sdio))
 $(eval $(call KernelPackage,mt7663u))
 $(eval $(call KernelPackage,mt7663s))
 $(eval $(call KernelPackage,mt7915e))
+$(eval $(call KernelPackage,mt7921e))
 $(eval $(call KernelPackage,mt76))
 $(eval $(call BuildPackage,mt76-test))
diff --git a/package/kernel/mt76/patches/100-mac80211-5.10.patch b/package/kernel/mt76/patches/100-mac80211-5.10.patch
deleted file mode 100644
index b7b5a5691c11727ed9d4156e64467bda20b36382..0000000000000000000000000000000000000000
--- a/package/kernel/mt76/patches/100-mac80211-5.10.patch
+++ /dev/null
@@ -1,82 +0,0 @@
---- a/mt7615/mcu.c
-+++ b/mt7615/mcu.c
-@@ -730,12 +730,12 @@ mt7615_mcu_add_beacon_offload(struct mt7
- 	memcpy(req.pkt + MT_TXD_SIZE, skb->data, skb->len);
- 	req.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
- 	req.tim_ie_pos = cpu_to_le16(MT_TXD_SIZE + offs.tim_offset);
--	if (offs.csa_counter_offs[0]) {
-+	if (offs.cntdwn_counter_offs[0]) {
- 		u16 csa_offs;
- 
--		csa_offs = MT_TXD_SIZE + offs.csa_counter_offs[0] - 4;
-+		csa_offs = MT_TXD_SIZE + offs.cntdwn_counter_offs[0] - 4;
- 		req.csa_ie_pos = cpu_to_le16(csa_offs);
--		req.csa_cnt = skb->data[offs.csa_counter_offs[0]];
-+		req.csa_cnt = skb->data[offs.cntdwn_counter_offs[0]];
- 	}
- 	dev_kfree_skb(skb);
- 
-@@ -1801,10 +1801,10 @@ mt7615_mcu_uni_add_beacon_offload(struct
- 	req.beacon_tlv.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
- 	req.beacon_tlv.tim_ie_pos = cpu_to_le16(MT_TXD_SIZE + offs.tim_offset);
- 
--	if (offs.csa_counter_offs[0]) {
-+	if (offs.cntdwn_counter_offs[0]) {
- 		u16 csa_offs;
- 
--		csa_offs = MT_TXD_SIZE + offs.csa_counter_offs[0] - 4;
-+		csa_offs = MT_TXD_SIZE + offs.cntdwn_counter_offs[0] - 4;
- 		req.beacon_tlv.csa_ie_pos = cpu_to_le16(csa_offs);
- 	}
- 	dev_kfree_skb(skb);
---- a/mt7915/mcu.c
-+++ b/mt7915/mcu.c
-@@ -2358,7 +2358,7 @@ mt7915_mcu_beacon_csa(struct sk_buff *rs
- 		      struct bss_info_bcn *bcn,
- 		      struct ieee80211_mutable_offsets *offs)
- {
--	if (offs->csa_counter_offs[0]) {
-+	if (offs->cntdwn_counter_offs[0]) {
- 		struct tlv *tlv;
- 		struct bss_info_bcn_csa *csa;
- 
-@@ -2366,7 +2366,7 @@ mt7915_mcu_beacon_csa(struct sk_buff *rs
- 						   sizeof(*csa), &bcn->sub_ntlv,
- 						   &bcn->len);
- 		csa = (struct bss_info_bcn_csa *)tlv;
--		csa->cnt = skb->data[offs->csa_counter_offs[0]];
-+		csa->cnt = skb->data[offs->cntdwn_counter_offs[0]];
- 	}
- }
- 
-@@ -2388,8 +2388,8 @@ mt7915_mcu_beacon_cont(struct mt7915_dev
- 	cont->pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
- 	cont->tim_ofs = cpu_to_le16(offs->tim_offset);
- 
--	if (offs->csa_counter_offs[0])
--		cont->csa_ofs = cpu_to_le16(offs->csa_counter_offs[0] - 4);
-+	if (offs->cntdwn_counter_offs[0])
-+		cont->csa_ofs = cpu_to_le16(offs->cntdwn_counter_offs[0] - 4);
- 
- 	buf = (u8 *)tlv + sizeof(*cont);
- 	mt7915_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, NULL,
---- a/mac80211.c
-+++ b/mac80211.c
-@@ -1082,7 +1082,7 @@ EXPORT_SYMBOL_GPL(mt76_get_txpower);
- static void
- __mt76_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
- {
--	if (vif->csa_active && ieee80211_csa_is_complete(vif))
-+	if (vif->csa_active && ieee80211_beacon_cntdwn_is_complete(vif))
- 		ieee80211_csa_finish(vif);
- }
- 
-@@ -1107,7 +1107,7 @@ __mt76_csa_check(void *priv, u8 *mac, st
- 	if (!vif->csa_active)
- 		return;
- 
--	dev->csa_complete |= ieee80211_csa_is_complete(vif);
-+	dev->csa_complete |= ieee80211_beacon_cntdwn_is_complete(vif);
- }
- 
- void mt76_csa_check(struct mt76_dev *dev)