mac80211: sync some rt2x00 patches with wireless-next
[openwrt/staging/blocktrron.git] / package / kernel / mac80211 / patches / rt2x00 / 994-rt2x00-import-support-for-external-LNA-on-MT7620.patch
index 634b677722f82fbe473634b877955777dd4ef93d..3e48eab5d20225109876b04bbe292c4529b779ef 100644 (file)
@@ -27,7 +27,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -304,6 +304,24 @@ static void rt2800_rf_write(struct rt2x0
+@@ -305,6 +305,24 @@ static void rt2800_rf_write(struct rt2x0
        mutex_unlock(&rt2x00dev->csr_mutex);
  }
  
@@ -52,67 +52,27 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = {
        [EEPROM_CHIP_ID]                = 0x0000,
        [EEPROM_VERSION]                = 0x0001,
-@@ -4469,6 +4487,29 @@ static void rt2800_config_channel(struct
-                       rt2800_register_write(rt2x00dev, TX1_RF_GAIN_ATTEN,
-                                             0x6C6C6B6C);
-               }
-+
-+              if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
-+                      reg = rt2800_register_read(rt2x00dev, RF_CONTROL3);
-+                      reg |= 0x00000101;
-+                      rt2800_register_write(rt2x00dev, RF_CONTROL3, reg);
-+
-+                      reg = rt2800_register_read(rt2x00dev, RF_BYPASS3);
-+                      reg |= 0x00000101;
-+                      rt2800_register_write(rt2x00dev, RF_BYPASS3, reg);
-+
-+                      rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x66);
-+                      rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x20);
-+                      rt2800_rfcsr_write_chanreg(rt2x00dev, 18, 0x42);
-+                      rt2800_bbp_write(rt2x00dev, 75, 0x68);
-+                      rt2800_bbp_write(rt2x00dev, 76, 0x4C);
-+                      rt2800_bbp_write(rt2x00dev, 79, 0x1C);
-+                      rt2800_bbp_write(rt2x00dev, 80, 0x0C);
-+                      rt2800_bbp_write(rt2x00dev, 82, 0xB6);
-+                      /* bank 0 RF reg 42 and glrt BBP reg 141 will be set in
-+                       * config channel function in dependence of channel and
-+                       * HT20/HT40 so don't touch it
-+                       */
-+              }
-       }
+@@ -10407,8 +10425,10 @@ static void rt2800_calibration_rt6352(st
+       u32 reg;
  
-       bbp = rt2800_bbp_read(rt2x00dev, 4);
-@@ -10581,6 +10622,7 @@ static void rt2800_init_rfcsr_6352(struc
-       rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
-       rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
+       if (rt2x00_has_cap_external_pa(rt2x00dev) ||
+-          rt2x00_has_cap_external_lna_bg(rt2x00dev))
++          rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
++              rt6352_enable_pa_pin(rt2x00dev, 0);
+               rt2800_restore_rf_bbp_rt6352(rt2x00dev);
++      }
  
-+      rt6352_enable_pa_pin(rt2x00dev, 0);
        rt2800_r_calibration(rt2x00dev);
        rt2800_rf_self_txdc_cal(rt2x00dev);
-       rt2800_rxdcoc_calibration(rt2x00dev);
-@@ -10588,6 +10630,22 @@ static void rt2800_init_rfcsr_6352(struc
-       rt2800_bw_filter_calibration(rt2x00dev, false);
-       rt2800_loft_iq_calibration(rt2x00dev);
-       rt2800_rxiq_calibration(rt2x00dev);
+@@ -10426,6 +10446,8 @@ static void rt2800_calibration_rt6352(st
+           !rt2x00_has_cap_external_lna_bg(rt2x00dev))
+               return;
 +      rt6352_enable_pa_pin(rt2x00dev, 1);
 +
-+      if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
-+              rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x66);
-+              rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x20);
-+              rt2800_rfcsr_write_chanreg(rt2x00dev, 18, 0x42);
-+              rt2800_bbp_write(rt2x00dev, 75, 0x68);
-+              rt2800_bbp_write(rt2x00dev, 76, 0x4C);
-+              rt2800_bbp_write(rt2x00dev, 79, 0x1C);
-+              rt2800_bbp_write(rt2x00dev, 80, 0x0C);
-+              rt2800_bbp_write(rt2x00dev, 82, 0xB6);
-+              /* bank 0 RF reg 42 and glrt BBP reg 141 will be set in config
-+               * channel function in dependence of channel and HT20/HT40,
-+               * so don't touch them here.
-+               */
-+      }
- }
- static void rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
+       if (rt2x00_has_cap_external_pa(rt2x00dev)) {
+               reg = rt2800_register_read(rt2x00dev, RF_CONTROL3);
+               reg |= 0x00000101;
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
 @@ -28,6 +28,7 @@
@@ -123,7 +83,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  #include <linux/rt2x00_platform.h>
  
  #include <net/mac80211.h>
-@@ -1024,6 +1025,11 @@ struct rt2x00_dev {
+@@ -1027,6 +1028,11 @@ struct rt2x00_dev {
  
        /* Clock for System On Chip devices. */
        struct clk *clk;