mac80211: rt2x00: fix MT7620 LNA gain and VCO-after-ALC
This should fix issues with bad RX as well as AP not coming up and/or scanning failing. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
		| @@ -0,0 +1,54 @@ | |||||||
|  | From 0109238d62a99ea779a7e28e21868118e7b8d69d Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Golle <daniel@makrotopia.org> | ||||||
|  | Date: Mon, 10 Apr 2017 14:28:14 +0200 | ||||||
|  | Subject: [PATCH 1/2] rt2800: fix LNA gain assignment for MT7620 | ||||||
|  | To: Stanislaw Gruszka <sgruszka@redhat.com> | ||||||
|  | Cc: Helmut Schaa <helmut.schaa@googlemail.com>, | ||||||
|  |     linux-wireless@vger.kernel.org, | ||||||
|  |     Kalle Valo <kvalo@codeaurora.org> | ||||||
|  |  | ||||||
|  | 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(-) | ||||||
|  |  | ||||||
|  | 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); | ||||||
|  | --  | ||||||
|  | 2.12.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,34 @@ | |||||||
|  | From feb608c7986c14bab153f31f8e96f251072e6578 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Golle <daniel@makrotopia.org> | ||||||
|  | Date: Mon, 10 Apr 2017 15:33:20 +0200 | ||||||
|  | Subject: [PATCH 2/2] rt2800: do VCO calibration after programming ALC | ||||||
|  | To: Stanislaw Gruszka <sgruszka@redhat.com> | ||||||
|  | Cc: Helmut Schaa <helmut.schaa@googlemail.com>, | ||||||
|  |     linux-wireless@vger.kernel.org, | ||||||
|  |     Kalle Valo <kvalo@codeaurora.org> | ||||||
|  |  | ||||||
|  | Scanning fails if we don't do VCO calibration every time. | ||||||
|  | The vendor driver duplicates the VCO calibration function into the | ||||||
|  | channel switching logic, we can do the same with less duplication. | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Golle <daniel@makrotopia.org> | ||||||
|  | --- | ||||||
|  |  drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 ++ | ||||||
|  |  1 file changed, 2 insertions(+) | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
|  | index 7135519a638c..870bf315f98b 100644 | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
|  | @@ -3407,6 +3407,8 @@ static void rt2800_config_alc(struct rt2x00_dev *rt2x00dev, | ||||||
|  |  			rt2800_rfcsr_write(rt2x00dev, 42, 0x5b); | ||||||
|  |  	} | ||||||
|  |  	rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, mac_sys_ctrl); | ||||||
|  | + | ||||||
|  | +	rt2800_vco_calibration(rt2x00dev); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static void rt2800_bbp_write_with_rx_chain(struct rt2x00_dev *rt2x00dev, | ||||||
|  | --  | ||||||
|  | 2.12.2 | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user
	 Daniel Golle
					Daniel Golle