Simple patch to correct ht20/ht40 switching. Tested with rt3290/rt3352/rt5350

Signed-off-by: Serge Vasilugin <vasilu...@yandex.ru>

diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index a394a9a..e145e0f 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -2284,6 +2284,8 @@ struct mac_iveiv_entry {
 #define RFCSR30_RX_H20M            FIELD8(0x04)
 #define RFCSR30_RX_VCM            FIELD8(0x18)
 #define RFCSR30_RF_CALIBRATION        FIELD8(0x80)
+#define RF3322_RFCSR30_TX_H20M        FIELD8(0x01)
+#define RF3322_RFCSR30_RX_H20M        FIELD8(0x02)

 /*
  * RFCSR 31:
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 893c9d5..4e4daa0 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3208,8 +3208,13 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
         rt2x00_rf(rt2x00dev, RF5390) ||
         rt2x00_rf(rt2x00dev, RF5392)) {
         rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr);
-        rt2x00_set_field8(&rfcsr, RFCSR30_TX_H20M, 0);
-        rt2x00_set_field8(&rfcsr, RFCSR30_RX_H20M, 0);
+        if(rt2x00_rf(rt2x00dev, RF3322)) {
+            rt2x00_set_field8(&rfcsr, RF3320_RFCSR30_TX_H20M, conf_is_ht40(conf));
+            rt2x00_set_field8(&rfcsr, RF3322_RFCSR30_RX_H20M, conf_is_ht40(conf));
+        else {
+            rt2x00_set_field8(&rfcsr, RFCSR30_TX_H20M, conf_is_ht40(conf));
+            rt2x00_set_field8(&rfcsr, RFCSR30_RX_H20M, conf_is_ht40(conf));
+        }
         rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);

         rt2800_rfcsr_read(rt2x00dev, 3, &rfcsr);
 
---
serge
 
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to