From 5ae9d019829980d9398cdb9d4af5eb06923f9bdc Mon Sep 17 00:00:00 2001
From: juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Sun, 8 Feb 2009 10:22:43 +0000
Subject: [package] mac80211: add rt2800 patches from the rt2x00 git rope

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@14435 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 ...304-rt2x00-Remove-unused-define-rt2800pci.patch |  24 ++
 ...305-rt2x00-Remove-unused-define-rt2800usb.patch |  24 ++
 .../306-rt2x00-Clean-header-rt2800pci.patch        |  39 ++++
 .../307-rt2x00-Clean-header-rt2800usb.patch        |  30 +++
 .../patches/308-rt2x00-uncomment-get_tsf.patch     |  40 ++++
 .../309-rt2x00-Uncomment-get_tsf-rt2800usb.patch   |  36 +++
 .../310-rt2x00-Fix-MCS-rx_mask-rt2800pci.patch     |  65 ++++++
 .../311-rt2x00-Fix-MCS-rx_mask-rt2800usb.patch     |  65 ++++++
 .../312-rt2x00-Channel-HT40-fixes-rt2800pci.patch  | 186 +++++++++++++++
 .../313-rt2x00-Channel-HT40-fixes-rt2800usb.patch  | 258 +++++++++++++++++++++
 10 files changed, 767 insertions(+)
 create mode 100644 package/mac80211/patches/304-rt2x00-Remove-unused-define-rt2800pci.patch
 create mode 100644 package/mac80211/patches/305-rt2x00-Remove-unused-define-rt2800usb.patch
 create mode 100644 package/mac80211/patches/306-rt2x00-Clean-header-rt2800pci.patch
 create mode 100644 package/mac80211/patches/307-rt2x00-Clean-header-rt2800usb.patch
 create mode 100644 package/mac80211/patches/308-rt2x00-uncomment-get_tsf.patch
 create mode 100644 package/mac80211/patches/309-rt2x00-Uncomment-get_tsf-rt2800usb.patch
 create mode 100644 package/mac80211/patches/310-rt2x00-Fix-MCS-rx_mask-rt2800pci.patch
 create mode 100644 package/mac80211/patches/311-rt2x00-Fix-MCS-rx_mask-rt2800usb.patch
 create mode 100644 package/mac80211/patches/312-rt2x00-Channel-HT40-fixes-rt2800pci.patch
 create mode 100644 package/mac80211/patches/313-rt2x00-Channel-HT40-fixes-rt2800usb.patch

(limited to 'package/mac80211/patches')

diff --git a/package/mac80211/patches/304-rt2x00-Remove-unused-define-rt2800pci.patch b/package/mac80211/patches/304-rt2x00-Remove-unused-define-rt2800pci.patch
new file mode 100644
index 000000000..b14dc2185
--- /dev/null
+++ b/package/mac80211/patches/304-rt2x00-Remove-unused-define-rt2800pci.patch
@@ -0,0 +1,24 @@
+From 811f05ec4e4ac26e1956be2a9073418e3b99a30b Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Wed, 4 Feb 2009 22:58:52 +0100
+Subject: [PATCH] rt2x00: Remove unused define (rt2800pci)
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt2800pci.h |    5 -----
+ 1 files changed, 0 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800pci.h
++++ b/drivers/net/wireless/rt2x00/rt2800pci.h
+@@ -250,11 +250,6 @@
+ #define WMM_TXOP1_CFG_AC3TXOP		FIELD32(0xffff0000)
+ 
+ /*
+- * RINGREG_DIFF
+- */
+-#define RINGREG_DIFF			0x0010
+-
+-/*
+  * GPIO_CTRL_CFG:
+  */
+ #define GPIO_CTRL_CFG			0x0228
diff --git a/package/mac80211/patches/305-rt2x00-Remove-unused-define-rt2800usb.patch b/package/mac80211/patches/305-rt2x00-Remove-unused-define-rt2800usb.patch
new file mode 100644
index 000000000..144791d01
--- /dev/null
+++ b/package/mac80211/patches/305-rt2x00-Remove-unused-define-rt2800usb.patch
@@ -0,0 +1,24 @@
+From a2cdea8b8b14160b17a208ceacdbeaff8b71e99a Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Wed, 4 Feb 2009 22:59:27 +0100
+Subject: [PATCH] rt2x00: Remove unused define (rt2800usb)
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt2800usb.h |    5 -----
+ 1 files changed, 0 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800usb.h
++++ b/drivers/net/wireless/rt2x00/rt2800usb.h
+@@ -229,11 +229,6 @@
+ #define WMM_TXOP1_CFG_AC3TXOP		FIELD32(0xffff0000)
+ 
+ /*
+- * RINGREG_DIFF
+- */
+-#define RINGREG_DIFF			0x0010
+-
+-/*
+  * GPIO_CTRL_CFG:
+  */
+ #define GPIO_CTRL_CFG			0x0228
diff --git a/package/mac80211/patches/306-rt2x00-Clean-header-rt2800pci.patch b/package/mac80211/patches/306-rt2x00-Clean-header-rt2800pci.patch
new file mode 100644
index 000000000..b913306f1
--- /dev/null
+++ b/package/mac80211/patches/306-rt2x00-Clean-header-rt2800pci.patch
@@ -0,0 +1,39 @@
+From f335adbc7a8fdd3a856be2d0e45d2d7a74e64a3a Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Thu, 5 Feb 2009 22:43:50 +0100
+Subject: [PATCH] rt2x00: Clean header (rt2800pci)
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt2800pci.h |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800pci.h
++++ b/drivers/net/wireless/rt2x00/rt2800pci.h
+@@ -342,7 +342,7 @@
+ #define PBF_SYS_CTRL_HOST_RAM_WRITE	FIELD32(0x00010000)
+ 
+ /*
+- * PBF  registers
++ * PBF registers
+  * Most are for debug. Driver doesn't touch PBF register.
+  */
+ #define PBF_CFG				0x0408
+@@ -370,7 +370,7 @@
+ #define BCN_OFFSET1_BCN7		FIELD32(0xff000000)
+ 
+ /*
+- * PBF  registers
++ * PBF registers
+  * Most are for debug. Driver doesn't touch PBF register.
+  */
+ #define TXRXQ_PCNT			0x0438
+@@ -1630,7 +1630,7 @@ struct mac_iveiv_entry {
+ #define EEPROM_TXPOWER_DELTA_TXPOWER	FIELD16(0x0080)
+ 
+ /*
+- * EEPROM TXPOWER 802.11G
++ * EEPROM TXPOWER 802.11BG
+  */
+ #define	EEPROM_TXPOWER_BG1		0x0029
+ #define	EEPROM_TXPOWER_BG2		0x0030
diff --git a/package/mac80211/patches/307-rt2x00-Clean-header-rt2800usb.patch b/package/mac80211/patches/307-rt2x00-Clean-header-rt2800usb.patch
new file mode 100644
index 000000000..0a4f4dadd
--- /dev/null
+++ b/package/mac80211/patches/307-rt2x00-Clean-header-rt2800usb.patch
@@ -0,0 +1,30 @@
+From 620724c1db862bbb09824855a19a8d1836752be2 Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Thu, 5 Feb 2009 22:44:30 +0100
+Subject: [PATCH] rt2x00: Clean header (rt2800usb)
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt2800usb.h |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800usb.h
++++ b/drivers/net/wireless/rt2x00/rt2800usb.h
+@@ -1213,7 +1213,7 @@
+  * TX_STA_FIFO: TX Result for specific PID status fifo register
+  */
+ #define TX_STA_FIFO			0x1718
+-#define TX_STA_FIFO_B_VALID		FIELD32(0x00000001)
++#define TX_STA_FIFO_VALID		FIELD32(0x00000001)
+ #define TX_STA_FIFO_PID_TYPE		FIELD32(0x0000001e)
+ #define TX_STA_FIFO_TX_SUCCESS		FIELD32(0x00000020)
+ #define TX_STA_FIFO_TX_AGGRE		FIELD32(0x00000040)
+@@ -1436,7 +1436,7 @@ struct mac_iveiv_entry {
+ /*
+  * HW_BEACON_BASE
+  * In order to support maximum 8 MBSS and its maximum length
+- *	is 512 bytes for each beacon
++ * is 512 bytes for each beacon
+  * Three section discontinue memory segments will be used.
+  * 1. The original region for BCN 0~3
+  * 2. Extract memory from FCE table for BCN 4~5
diff --git a/package/mac80211/patches/308-rt2x00-uncomment-get_tsf.patch b/package/mac80211/patches/308-rt2x00-uncomment-get_tsf.patch
new file mode 100644
index 000000000..de007cea2
--- /dev/null
+++ b/package/mac80211/patches/308-rt2x00-uncomment-get_tsf.patch
@@ -0,0 +1,40 @@
+From 6ad5c6dd7471b066e5f83aeec3919296c1fd817a Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Sat, 7 Feb 2009 15:21:48 +0100
+Subject: [PATCH] rt2x00: uncomment get_tsf
+
+The atomic requirement for get_tsf() has been removed
+by mac80211. This means the USB drivers can add support
+for the callback function again.
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt73usb.c |   10 ----------
+ 1 files changed, 0 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt73usb.c
++++ b/drivers/net/wireless/rt2x00/rt73usb.c
+@@ -2241,13 +2241,6 @@ static int rt73usb_conf_tx(struct ieee80
+ 	return 0;
+ }
+ 
+-#if 0
+-/*
+- * Mac80211 demands get_tsf must be atomic.
+- * This is not possible for rt73usb since all register access
+- * functions require sleeping. Untill mac80211 no longer needs
+- * get_tsf to be atomic, this function should be disabled.
+- */
+ static u64 rt73usb_get_tsf(struct ieee80211_hw *hw)
+ {
+ 	struct rt2x00_dev *rt2x00dev = hw->priv;
+@@ -2261,9 +2254,6 @@ static u64 rt73usb_get_tsf(struct ieee80
+ 
+ 	return tsf;
+ }
+-#else
+-#define rt73usb_get_tsf	NULL
+-#endif
+ 
+ static const struct ieee80211_ops rt73usb_mac80211_ops = {
+ 	.tx			= rt2x00mac_tx,
diff --git a/package/mac80211/patches/309-rt2x00-Uncomment-get_tsf-rt2800usb.patch b/package/mac80211/patches/309-rt2x00-Uncomment-get_tsf-rt2800usb.patch
new file mode 100644
index 000000000..da3e819af
--- /dev/null
+++ b/package/mac80211/patches/309-rt2x00-Uncomment-get_tsf-rt2800usb.patch
@@ -0,0 +1,36 @@
+From 0779847f2c13b0170e4905138a61f7f98164a41e Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Sat, 7 Feb 2009 15:22:52 +0100
+Subject: [PATCH] rt2x00: Uncomment get_tsf (rt2800usb)
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt2800usb.c |   10 ----------
+ 1 files changed, 0 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800usb.c
++++ b/drivers/net/wireless/rt2x00/rt2800usb.c
+@@ -2696,13 +2696,6 @@ static int rt2800usb_conf_tx(struct ieee
+ 	return 0;
+ }
+ 
+-#if 0
+-/*
+- * Mac80211 demands get_tsf must be atomic.
+- * This is not possible for rt2800usb since all register access
+- * functions require sleeping. Untill mac80211 no longer needs
+- * get_tsf to be atomic, this function should be disabled.
+- */
+ static u64 rt2800usb_get_tsf(struct ieee80211_hw *hw)
+ {
+ 	struct rt2x00_dev *rt2x00dev = hw->priv;
+@@ -2716,9 +2709,6 @@ static u64 rt2800usb_get_tsf(struct ieee
+ 
+ 	return tsf;
+ }
+-#else
+-#define rt2800usb_get_tsf	NULL
+-#endif
+ 
+ static const struct ieee80211_ops rt2800usb_mac80211_ops = {
+ 	.tx			= rt2x00mac_tx,
diff --git a/package/mac80211/patches/310-rt2x00-Fix-MCS-rx_mask-rt2800pci.patch b/package/mac80211/patches/310-rt2x00-Fix-MCS-rx_mask-rt2800pci.patch
new file mode 100644
index 000000000..31da8534c
--- /dev/null
+++ b/package/mac80211/patches/310-rt2x00-Fix-MCS-rx_mask-rt2800pci.patch
@@ -0,0 +1,65 @@
+From 4009f1317cb51ac89f37241de48970f2ee6a8ec5 Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Sat, 7 Feb 2009 17:18:03 +0100
+Subject: [PATCH] rt2x00: Fix MCS rx_mask (rt2800pci)
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt2800pci.c |   22 ++++++++++++++++++++--
+ 1 files changed, 20 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800pci.c
++++ b/drivers/net/wireless/rt2x00/rt2800pci.c
+@@ -2193,6 +2193,13 @@ static int rt2800pci_validate_eeprom(str
+ 		rt2x00_set_field16(&word, EEPROM_ANTENNA_RF_TYPE, RF2820);
+ 		rt2x00_eeprom_write(rt2x00dev, EEPROM_ANTENNA, word);
+ 		EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word);
++	} else if (rt2x00_rev(&rt2x00dev->chip) < RT2883_VERSION) {
++		/*
++		 * There is a max of 2 RX streams for RT2860 series
++		 */
++		if (rt2x00_get_field16(word, EEPROM_ANTENNA_RXPATH) > 2)
++			rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2);
++		rt2x00_eeprom_write(rt2x00dev, EEPROM_ANTENNA, word);
+ 	}
+ 
+ 	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &word);
+@@ -2416,6 +2423,7 @@ static int rt2800pci_probe_hw_mode(struc
+ 	char *tx_power1;
+ 	char *tx_power2;
+ 	unsigned int i;
++	u16 eeprom;
+ 
+ 	/*
+ 	 * Initialize all hw fields.
+@@ -2432,6 +2440,8 @@ static int rt2800pci_probe_hw_mode(struc
+ 				rt2x00_eeprom_addr(rt2x00dev,
+ 						   EEPROM_MAC_ADDR_0));
+ 
++	rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
++
+ 	/*
+ 	 * Initialize hw_mode information.
+ 	 */
+@@ -2463,11 +2473,19 @@ static int rt2800pci_probe_hw_mode(struc
+ 	    IEEE80211_HT_CAP_PSMP_SUPPORT;
+ 	spec->ht.ampdu_factor = 3;
+ 	spec->ht.ampdu_density = 4;
+-	spec->ht.mcs.rx_mask[0] = 0xff;
+-	spec->ht.mcs.rx_mask[1] = 0xff;
+ 	spec->ht.mcs.tx_params =
+ 	    IEEE80211_HT_MCS_TX_DEFINED;
+ 
++	switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH)) {
++	case 3:
++		spec->ht.mcs.rx_mask[2] = 0xff;
++	case 2:
++		spec->ht.mcs.rx_mask[1] = 0xff;
++	case 1:
++		spec->ht.mcs.rx_mask[0] = 0xff;
++		break;
++	}
++
+ 	/*
+ 	 * Create channel information array
+ 	 */
diff --git a/package/mac80211/patches/311-rt2x00-Fix-MCS-rx_mask-rt2800usb.patch b/package/mac80211/patches/311-rt2x00-Fix-MCS-rx_mask-rt2800usb.patch
new file mode 100644
index 000000000..4e27c01ca
--- /dev/null
+++ b/package/mac80211/patches/311-rt2x00-Fix-MCS-rx_mask-rt2800usb.patch
@@ -0,0 +1,65 @@
+From 583272d9d8fba6f8d36c5f99b176f5225560b151 Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Sat, 7 Feb 2009 17:18:34 +0100
+Subject: [PATCH] rt2x00: Fix MCS rx_mask (rt2800usb)
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt2800usb.c |   22 ++++++++++++++++++++--
+ 1 files changed, 20 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800usb.c
++++ b/drivers/net/wireless/rt2x00/rt2800usb.c
+@@ -2215,6 +2215,13 @@ static int rt2800usb_validate_eeprom(str
+ 		rt2x00_set_field16(&word, EEPROM_ANTENNA_RF_TYPE, RF2820);
+ 		rt2x00_eeprom_write(rt2x00dev, EEPROM_ANTENNA, word);
+ 		EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word);
++	} else if (rt2x00_rev(&rt2x00dev->chip) < RT2883_VERSION) {
++		/*
++		 * There is a max of 2 RX streams for RT2860 series
++		 */
++		if (rt2x00_get_field16(word, EEPROM_ANTENNA_RXPATH) > 2)
++			rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2);
++		rt2x00_eeprom_write(rt2x00dev, EEPROM_ANTENNA, word);
+ 	}
+ 
+ 	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &word);
+@@ -2465,6 +2472,7 @@ static int rt2800usb_probe_hw_mode(struc
+ 	char *tx_power1;
+ 	char *tx_power2;
+ 	unsigned int i;
++	u16 eeprom;
+ 
+ 	/*
+ 	 * Initialize all hw fields.
+@@ -2481,6 +2489,8 @@ static int rt2800usb_probe_hw_mode(struc
+ 				rt2x00_eeprom_addr(rt2x00dev,
+ 						   EEPROM_MAC_ADDR_0));
+ 
++	rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
++
+ 	/*
+ 	 * Initialize HT information.
+ 	 */
+@@ -2495,11 +2505,19 @@ static int rt2800usb_probe_hw_mode(struc
+ 	    IEEE80211_HT_CAP_PSMP_SUPPORT;
+ 	spec->ht.ampdu_factor = 3;
+ 	spec->ht.ampdu_density = 4;
+-	spec->ht.mcs.rx_mask[0] = 0xff;
+-	spec->ht.mcs.rx_mask[1] = 0xff;
+ 	spec->ht.mcs.tx_params =
+ 	    IEEE80211_HT_MCS_TX_DEFINED;
+ 
++	switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH)) {
++	case 3:
++		spec->ht.mcs.rx_mask[2] = 0xff;
++	case 2:
++		spec->ht.mcs.rx_mask[1] = 0xff;
++	case 1:
++		spec->ht.mcs.rx_mask[0] = 0xff;
++		break;
++	}
++
+ 	/*
+ 	 * Initialize hw_mode information.
+ 	 */
diff --git a/package/mac80211/patches/312-rt2x00-Channel-HT40-fixes-rt2800pci.patch b/package/mac80211/patches/312-rt2x00-Channel-HT40-fixes-rt2800pci.patch
new file mode 100644
index 000000000..8edcbc790
--- /dev/null
+++ b/package/mac80211/patches/312-rt2x00-Channel-HT40-fixes-rt2800pci.patch
@@ -0,0 +1,186 @@
+From 1dabaea63944d04d03f29817f7641bcb3ed22014 Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Sun, 8 Feb 2009 00:08:37 +0100
+Subject: [PATCH] rt2x00: Channel HT40+/- fixes (rt2800pci)
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt2800pci.c |   69 +++++++++++++++----------------
+ drivers/net/wireless/rt2x00/rt2800pci.h |    3 +-
+ 2 files changed, 36 insertions(+), 36 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800pci.c
++++ b/drivers/net/wireless/rt2x00/rt2800pci.c
+@@ -603,7 +603,7 @@ static void rt2800pci_config_ant(struct 
+ 		rt2x00_set_field8(&r3, BBP3_RX_ANTENNA, 0);
+ 		break;
+ 	case 2:
+-		rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 16);
++		rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 2);
+ 		break;
+ 	case 3:
+ 		/* Do nothing */
+@@ -653,6 +653,7 @@ static void rt2800pci_config_lna_gain(st
+ }
+ 
+ static void rt2800pci_config_channel(struct rt2x00_dev *rt2x00dev,
++				     struct ieee80211_conf *conf,
+ 				     struct rf_channel *rf,
+ 				     struct channel_info *info)
+ {
+@@ -660,34 +661,20 @@ static void rt2800pci_config_channel(str
+ 	unsigned int tx_pin;
+ 	u16 eeprom;
+ 
+-	tx_pin = 0;
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G1_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A0_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G0_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1);
+-
+ 	rt2x00_set_field32(&rf->rf4, RF4_FREQ_OFFSET, rt2x00dev->freq_offset);
+ 
+ 	/*
+ 	 * Determine antenna settings from EEPROM
+ 	 */
+ 	rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
++
+ 	if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) == 1) {
+ 		rt2x00_set_field32(&rf->rf2, RF2_ANTENNA_TX1, 1);
+-		/* Turn off unused PA or LNA when only 1T or 1R */
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A1_EN, 0);
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G1_EN, 0);
+ 	}
+ 
+ 	if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH) == 1) {
+ 		rt2x00_set_field32(&rf->rf2, RF2_ANTENNA_RX1, 1);
+ 		rt2x00_set_field32(&rf->rf2, RF2_ANTENNA_RX2, 1);
+-		/* Turn off unused PA or LNA when only 1T or 1R */
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN, 0);
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN, 0);
+ 	} else if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH) == 2)
+ 		rt2x00_set_field32(&rf->rf2, RF2_ANTENNA_RX2, 1);
+ 
+@@ -715,19 +702,14 @@ static void rt2800pci_config_channel(str
+ 
+ 		rt2x00_set_field32(&rf->rf4, RF4_TXPOWER_A,
+ 				   TXPOWER_A_TO_DEV(info->tx_power2));
+-
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A0_EN, 1);
+ 	} else {
+ 		rt2x00_set_field32(&rf->rf3, RF3_TXPOWER_G,
+ 				   TXPOWER_G_TO_DEV(info->tx_power1));
+ 		rt2x00_set_field32(&rf->rf4, RF4_TXPOWER_G,
+ 				   TXPOWER_G_TO_DEV(info->tx_power2));
+-
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G0_EN, 1);
+ 	}
+ 
+-	rt2x00_set_field32(&rf->rf4, RF4_BW40,
+-			   test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags));
++	rt2x00_set_field32(&rf->rf4, RF4_HT40, conf_is_ht40(conf));
+ 
+ 	rt2800pci_rf_write(rt2x00dev, 1, rf->rf1);
+ 	rt2800pci_rf_write(rt2x00dev, 2, rf->rf2);
+@@ -764,11 +746,6 @@ static void rt2800pci_config_channel(str
+ 			rt2800pci_bbp_write(rt2x00dev, 82, 0x84);
+ 			rt2800pci_bbp_write(rt2x00dev, 75, 0x50);
+ 		}
+-
+-		rt2x00pci_register_read(rt2x00dev, TX_BAND_CFG, &reg);
+-		rt2x00_set_field32(&rf->rf3, TX_BAND_CFG_A, 0);
+-		rt2x00_set_field32(&rf->rf3, TX_BAND_CFG_BG, 1);
+-		rt2x00pci_register_write(rt2x00dev, TX_BAND_CFG, reg);
+ 	} else {
+ 		rt2800pci_bbp_write(rt2x00dev, 82, 0xf2);
+ 
+@@ -776,13 +753,35 @@ static void rt2800pci_config_channel(str
+ 			rt2800pci_bbp_write(rt2x00dev, 75, 0x46);
+ 		else
+ 			rt2800pci_bbp_write(rt2x00dev, 75, 0x50);
++	}
+ 
+-		rt2x00pci_register_read(rt2x00dev, TX_BAND_CFG, &reg);
+-		rt2x00_set_field32(&rf->rf3, TX_BAND_CFG_A, 1);
+-		rt2x00_set_field32(&rf->rf3, TX_BAND_CFG_BG, 0);
+-		rt2x00pci_register_write(rt2x00dev, TX_BAND_CFG, reg);
++	rt2x00pci_register_read(rt2x00dev, TX_BAND_CFG, &reg);
++	rt2x00_set_field32(&reg, TX_BAND_CFG_HT40_PLUS, conf_is_ht40_plus(conf));
++	rt2x00_set_field32(&reg, TX_BAND_CFG_A, rf->channel > 14);
++	rt2x00_set_field32(&reg, TX_BAND_CFG_BG, rf->channel <= 14);
++	rt2x00pci_register_write(rt2x00dev, TX_BAND_CFG, reg);
++
++	tx_pin = 0;
++
++	/* Turn on unused PA or LNA when not using 1T or 1R */
++	if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) != 1) {
++		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A1_EN, 1);
++		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G1_EN, 1);
++	}
++
++	/* Turn on unused PA or LNA when not using 1T or 1R */
++	if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH) != 1) {
++		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN, 1);
++		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN, 1);
+ 	}
+ 
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A0_EN, 1);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G0_EN, 1);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G0_EN, rf->channel <= 14);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A0_EN, rf->channel > 14);
++
+ 	rt2x00pci_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
+ 
+ 	msleep(1);
+@@ -917,8 +916,8 @@ static void rt2800pci_config(struct rt2x
+ 	rt2800pci_config_lna_gain(rt2x00dev, libconf);
+ 
+ 	if (flags & IEEE80211_CONF_CHANGE_CHANNEL)
+-		rt2800pci_config_channel(rt2x00dev, &libconf->rf,
+-					 &libconf->channel);
++		rt2800pci_config_channel(rt2x00dev, libconf->conf,
++					 &libconf->rf, &libconf->channel);
+ 	if (flags & IEEE80211_CONF_CHANGE_POWER)
+ 		rt2800pci_config_txpower(rt2x00dev, libconf->conf->power_level);
+ 	if (flags & IEEE80211_CONF_CHANGE_RETRY_LIMITS)
+@@ -2724,14 +2723,14 @@ static const struct rt2x00lib_ops rt2800
+ 
+ static const struct data_queue_desc rt2800pci_queue_rx = {
+ 	.entry_num		= RX_ENTRIES,
+-	.data_size		= DATA_FRAME_SIZE,
++	.data_size		= AGGREGATION_SIZE,
+ 	.desc_size		= RXD_DESC_SIZE,
+ 	.priv_size		= sizeof(struct queue_entry_priv_pci),
+ };
+ 
+ static const struct data_queue_desc rt2800pci_queue_tx = {
+ 	.entry_num		= TX_ENTRIES,
+-	.data_size		= DATA_FRAME_SIZE,
++	.data_size		= AGGREGATION_SIZE,
+ 	.desc_size		= TXD_DESC_SIZE,
+ 	.priv_size		= sizeof(struct queue_entry_priv_pci),
+ };
+--- a/drivers/net/wireless/rt2x00/rt2800pci.h
++++ b/drivers/net/wireless/rt2x00/rt2800pci.h
+@@ -791,6 +791,7 @@
+  * TX_BAND_CFG: 0x1 use upper 20MHz, 0x0 use lower 20MHz
+  */
+ #define TX_BAND_CFG			0x132c
++#define TX_BAND_CFG_HT40_PLUS		FIELD32(0x00000001)
+ #define TX_BAND_CFG_A			FIELD32(0x00000002)
+ #define TX_BAND_CFG_BG			FIELD32(0x00000004)
+ 
+@@ -1496,7 +1497,7 @@ struct mac_iveiv_entry {
+ #define RF4_TXPOWER_A_7DBM_BOOST	FIELD32(0x00000040)
+ #define RF4_TXPOWER_A			FIELD32(0x00000780)
+ #define RF4_FREQ_OFFSET			FIELD32(0x001f8000)
+-#define RF4_BW40			FIELD32(0x00200000)
++#define RF4_HT40			FIELD32(0x00200000)
+ 
+ /*
+  * EEPROM content.
diff --git a/package/mac80211/patches/313-rt2x00-Channel-HT40-fixes-rt2800usb.patch b/package/mac80211/patches/313-rt2x00-Channel-HT40-fixes-rt2800usb.patch
new file mode 100644
index 000000000..14191c2a7
--- /dev/null
+++ b/package/mac80211/patches/313-rt2x00-Channel-HT40-fixes-rt2800usb.patch
@@ -0,0 +1,258 @@
+From c2288ea288283cea727dfa547339d245458071fc Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <IvDoorn@gmail.com>
+Date: Sun, 8 Feb 2009 00:09:22 +0100
+Subject: [PATCH] rt2x00: Channel HT40+/- fixes (rt2800usb)
+
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+---
+ drivers/net/wireless/rt2x00/rt2800usb.c |  107 ++++++++++++++++--------------
+ drivers/net/wireless/rt2x00/rt2800usb.h |    5 +-
+ 2 files changed, 61 insertions(+), 51 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800usb.c
++++ b/drivers/net/wireless/rt2x00/rt2800usb.c
+@@ -641,7 +641,7 @@ static void rt2800usb_config_ant(struct 
+ 		rt2x00_set_field8(&r3, BBP3_RX_ANTENNA, 0);
+ 		break;
+ 	case 2:
+-		rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 16);
++		rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 2);
+ 		break;
+ 	case 3:
+ 		/* Do nothing */
+@@ -691,6 +691,7 @@ static void rt2800usb_config_lna_gain(st
+ }
+ 
+ static void rt2800usb_config_channel_rt2x(struct rt2x00_dev *rt2x00dev,
++					  struct ieee80211_conf *conf,
+ 					  struct rf_channel *rf,
+ 					  struct channel_info *info)
+ {
+@@ -702,6 +703,7 @@ static void rt2800usb_config_channel_rt2
+ 	 * Determine antenna settings from EEPROM
+ 	 */
+ 	rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
++
+ 	if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) == 1)
+ 		rt2x00_set_field32(&rf->rf2, RF2_ANTENNA_TX1, 1);
+ 
+@@ -742,8 +744,7 @@ static void rt2800usb_config_channel_rt2
+ 				   TXPOWER_G_TO_DEV(info->tx_power2));
+ 	}
+ 
+-	rt2x00_set_field32(&rf->rf4, RF4_BW40,
+-			   test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags));
++	rt2x00_set_field32(&rf->rf4, RF4_HT40, conf_is_ht40(conf));
+ 
+ 	rt2800usb_rf_write(rt2x00dev, 1, rf->rf1);
+ 	rt2800usb_rf_write(rt2x00dev, 2, rf->rf2);
+@@ -766,6 +767,7 @@ static void rt2800usb_config_channel_rt2
+ }
+ 
+ static void rt2800usb_config_channel_rt3x(struct rt2x00_dev *rt2x00dev,
++					  struct ieee80211_conf *conf,
+ 					  struct rf_channel *rf,
+ 					  struct channel_info *info)
+ {
+@@ -787,10 +789,12 @@ static void rt2800usb_config_channel_rt3
+ 	rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
+ 	rt2800usb_rfcsr_write(rt2x00dev, 23, rfcsr);
+ 
+-	if (test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
+-		rt2800usb_rfcsr_write(rt2x00dev, 24, rt2x00dev->calibration_bw40);
++	if (conf_is_ht40(conf))
++		rt2800usb_rfcsr_write(rt2x00dev, 24,
++				      rt2x00dev->calibration_bw40);
+ 	else
+-		rt2800usb_rfcsr_write(rt2x00dev, 24, rt2x00dev->calibration_bw20);
++		rt2800usb_rfcsr_write(rt2x00dev, 24,
++				      rt2x00dev->calibration_bw20);
+ 
+ 	rt2800usb_rfcsr_read(rt2x00dev, 23, &rfcsr);
+ 	rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
+@@ -798,46 +802,24 @@ static void rt2800usb_config_channel_rt3
+ }
+ 
+ static void rt2800usb_config_channel(struct rt2x00_dev *rt2x00dev,
++				     struct ieee80211_conf *conf,
+ 				     struct rf_channel *rf,
+ 				     struct channel_info *info)
+ {
+ 	u32 reg;
+ 	unsigned int tx_pin;
+ 	u16 eeprom;
++	u8 bbp;
+ 
+-	if (rt2x00_rev(&rt2x00dev->chip) != RT3070_VERSION)
+-		rt2800usb_config_channel_rt2x(rt2x00dev, rf, info);
+-	else
+-		rt2800usb_config_channel_rt3x(rt2x00dev, rf, info);
+-
+-	tx_pin = 0;
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G1_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A0_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G0_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1);
+-	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1);
+-
++	/*
++	 * Determine antenna settings from EEPROM
++	 */
+ 	rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
+ 
+-	/* Turn off unused PA or LNA when only 1T or 1R */
+-	if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) == 1) {
+-		
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A1_EN, 0);
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G1_EN, 0);
+-	}
+-
+-	/* Turn off unused PA or LNA when only 1T or 1R */
+-	if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH) == 1) {
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN, 0);
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN, 0);
+-	}
+-
+-	if (rf->channel > 14)
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A0_EN, 1);
++	if (rt2x00_rev(&rt2x00dev->chip) != RT3070_VERSION)
++		rt2800usb_config_channel_rt2x(rt2x00dev, conf, rf, info);
+ 	else
+-		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G0_EN, 1);
++		rt2800usb_config_channel_rt3x(rt2x00dev, conf, rf, info);
+ 
+ 	/*
+ 	 * Change BBP settings
+@@ -855,11 +837,6 @@ static void rt2800usb_config_channel(str
+ 			rt2800usb_bbp_write(rt2x00dev, 82, 0x84);
+ 			rt2800usb_bbp_write(rt2x00dev, 75, 0x50);
+ 		}
+-
+-		rt2x00usb_register_read(rt2x00dev, TX_BAND_CFG, &reg);
+-		rt2x00_set_field32(&rf->rf3, TX_BAND_CFG_A, 0);
+-		rt2x00_set_field32(&rf->rf3, TX_BAND_CFG_BG, 1);
+-		rt2x00usb_register_write(rt2x00dev, TX_BAND_CFG, reg);
+ 	} else {
+ 		rt2800usb_bbp_write(rt2x00dev, 82, 0xf2);
+ 
+@@ -867,15 +844,45 @@ static void rt2800usb_config_channel(str
+ 			rt2800usb_bbp_write(rt2x00dev, 75, 0x46);
+ 		else
+ 			rt2800usb_bbp_write(rt2x00dev, 75, 0x50);
++	}
++
++	rt2x00usb_register_read(rt2x00dev, TX_BAND_CFG, &reg);
++	rt2x00_set_field32(&reg, TX_BAND_CFG_HT40_PLUS, conf_is_ht40_plus(conf));
++	rt2x00_set_field32(&reg, TX_BAND_CFG_A, rf->channel > 14);
++	rt2x00_set_field32(&reg, TX_BAND_CFG_BG, rf->channel <= 14);
++	rt2x00usb_register_write(rt2x00dev, TX_BAND_CFG, reg);
++
++	tx_pin = 0;
++
++	/* Turn on unused PA or LNA when not using 1T or 1R */
++	if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) != 1) {
++		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A1_EN, 1);
++		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G1_EN, 1);
++	}
+ 
+-		rt2x00usb_register_read(rt2x00dev, TX_BAND_CFG, &reg);
+-		rt2x00_set_field32(&rf->rf3, TX_BAND_CFG_A, 1);
+-		rt2x00_set_field32(&rf->rf3, TX_BAND_CFG_BG, 0);
+-		rt2x00usb_register_write(rt2x00dev, TX_BAND_CFG, reg);
++	/* Turn on unused PA or LNA when not using 1T or 1R */
++	if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH) != 1) {
++		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN, 1);
++		rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN, 1);
+ 	}
+ 
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A0_EN, 1);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G0_EN, 1);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G0_EN, rf->channel <= 14);
++	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A0_EN, rf->channel > 14);
++
+ 	rt2x00usb_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
+ 
++	rt2800usb_bbp_read(rt2x00dev, 4, &bbp);
++	rt2x00_set_field8(&bbp, BBP4_BANDWIDTH, 2 * conf_is_ht40(conf));
++	rt2800usb_bbp_write(rt2x00dev, 4, bbp);
++
++	rt2800usb_bbp_read(rt2x00dev, 3, &bbp);
++	rt2x00_set_field8(&bbp, BBP3_HT40_PLUS, conf_is_ht40_plus(conf));
++	rt2800usb_bbp_write(rt2x00dev, 3, bbp);
++
+ 	msleep(1);
+ }
+ 
+@@ -1008,8 +1015,8 @@ static void rt2800usb_config(struct rt2x
+ 	rt2800usb_config_lna_gain(rt2x00dev, libconf);
+ 
+ 	if (flags & IEEE80211_CONF_CHANGE_CHANNEL)
+-		rt2800usb_config_channel(rt2x00dev, &libconf->rf,
+-					 &libconf->channel);
++		rt2800usb_config_channel(rt2x00dev, libconf->conf,
++					 &libconf->rf, &libconf->channel);
+ 	if (flags & IEEE80211_CONF_CHANGE_POWER)
+ 		rt2800usb_config_txpower(rt2x00dev, libconf->conf->power_level);
+ 	if (flags & IEEE80211_CONF_CHANGE_RETRY_LIMITS)
+@@ -1643,7 +1650,7 @@ static u8 rt2800usb_init_rx_filter(struc
+ 
+ 	if (bw40) {
+ 		rt2800usb_bbp_read(rt2x00dev, 4, &bbp);
+-		rt2x00_set_field8(&bbp, BBP4_BANDWIDTH, 0x10);
++		rt2x00_set_field8(&bbp, BBP4_BANDWIDTH, 2);
+ 		rt2800usb_bbp_write(rt2x00dev, 4, bbp);
+ 	}
+ 
+@@ -2777,14 +2784,14 @@ static const struct rt2x00lib_ops rt2800
+ 
+ static const struct data_queue_desc rt2800usb_queue_rx = {
+ 	.entry_num		= RX_ENTRIES,
+-	.data_size		= DATA_FRAME_SIZE,
++	.data_size		= AGGREGATION_SIZE,
+ 	.desc_size		= RXD_DESC_SIZE + RXWI_DESC_SIZE,
+ 	.priv_size		= sizeof(struct queue_entry_priv_usb),
+ };
+ 
+ static const struct data_queue_desc rt2800usb_queue_tx = {
+ 	.entry_num		= TX_ENTRIES,
+-	.data_size		= DATA_FRAME_SIZE,
++	.data_size		= AGGREGATION_SIZE,
+ 	.desc_size		= TXINFO_DESC_SIZE + TXWI_DESC_SIZE,
+ 	.priv_size		= sizeof(struct queue_entry_priv_usb),
+ };
+--- a/drivers/net/wireless/rt2x00/rt2800usb.h
++++ b/drivers/net/wireless/rt2x00/rt2800usb.h
+@@ -803,6 +803,7 @@
+  * TX_BAND_CFG: 0x1 use upper 20MHz, 0x0 use lower 20MHz
+  */
+ #define TX_BAND_CFG			0x132c
++#define TX_BAND_CFG_HT40_PLUS		FIELD32(0x00000001)
+ #define TX_BAND_CFG_A			FIELD32(0x00000002)
+ #define TX_BAND_CFG_BG			FIELD32(0x00000004)
+ 
+@@ -1482,10 +1483,12 @@ struct mac_iveiv_entry {
+  * BBP 3: RX Antenna
+  */
+ #define BBP3_RX_ANTENNA			FIELD8(0x18)
++#define BBP3_HT40_PLUS			FIELD8(0x20)
+ 
+ /*
+  * BBP 4: Bandwidth
+  */
++#define BBP4_TX_BF			FIELD8(0x01)
+ #define BBP4_BANDWIDTH			FIELD8(0x18)
+ 
+ /*
+@@ -1548,7 +1551,7 @@ struct mac_iveiv_entry {
+ #define RF4_TXPOWER_A_7DBM_BOOST	FIELD32(0x00000040)
+ #define RF4_TXPOWER_A			FIELD32(0x00000780)
+ #define RF4_FREQ_OFFSET			FIELD32(0x001f8000)
+-#define RF4_BW40			FIELD32(0x00200000)
++#define RF4_HT40			FIELD32(0x00200000)
+ 
+ /*
+  * EEPROM content.
-- 
cgit v1.2.3