diff mbox

[1/2] rt2800: fix LNA gain assignment for MT7620

Message ID 20170417193007.GA3436@makrotopia.org (mailing list archive)
State Accepted
Commit 225a644aae03ffe2ec186cd994cd5ab241130035
Delegated to: Kalle Valo
Headers show

Commit Message

Daniel Golle April 17, 2017, 7:30 p.m. UTC
The base value used for MT7620 differs from Rt5392 which resulted in
quite bad RX signal quality. Fix this by using the correct base value as
well as the LNA calibration values for HT20.

Reported-by: Tom Psyborg <pozega.tomislav@gmail.com>
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
 drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

Comments

Kalle Valo April 20, 2017, 11 a.m. UTC | #1
Daniel Golle <daniel@makrotopia.org> wrote:
> The base value used for MT7620 differs from Rt5392 which resulted in
> quite bad RX signal quality. Fix this by using the correct base value as
> well as the LNA calibration values for HT20.
> 
> Reported-by: Tom Psyborg <pozega.tomislav@gmail.com>
> Signed-off-by: Daniel Golle <daniel@makrotopia.org>

2 patches applied to wireless-drivers-next.git, thanks.

225a644aae03 rt2800: fix LNA gain assignment for MT7620
2031badabf26 rt2800: do VCO calibration after programming ALC
diff mbox

Patch

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
index ba06ac2d876d..7135519a638c 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
@@ -3806,11 +3806,25 @@  static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
 	}
 
 	if (rt2x00_rt(rt2x00dev, RT5592) || rt2x00_rt(rt2x00dev, RT6352)) {
+		reg = 0x10;
+		if (!conf_is_ht40(conf)) {
+			if (rt2x00_rt(rt2x00dev, RT6352) &&
+			    rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
+				reg |= 0x5;
+			} else {
+				reg |= 0xa;
+			}
+		}
 		rt2800_bbp_write(rt2x00dev, 195, 141);
-		rt2800_bbp_write(rt2x00dev, 196, conf_is_ht40(conf) ? 0x10 : 0x1a);
+		rt2800_bbp_write(rt2x00dev, 196, reg);
 
 		/* AGC init */
-		reg = (rf->channel <= 14 ? 0x1c : 0x24) + 2 * rt2x00dev->lna_gain;
+		if (rt2x00_rt(rt2x00dev, RT6352))
+			reg = 0x04;
+		else
+			reg = rf->channel <= 14 ? 0x1c : 0x24;
+
+		reg += 2 * rt2x00dev->lna_gain;
 		rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg);
 
 		rt2800_iq_calibrate(rt2x00dev, rf->channel);