| From ad3f993a0857ad3b792e7463828eb0d90cdd6f4d Mon Sep 17 00:00:00 2001 |
| From: Stanislaw Gruszka <sgruszka@redhat.com> |
| Date: Thu, 25 Oct 2018 18:18:33 +0200 |
| Subject: mt76x0: use band parameter for LC calibration |
| |
| From: Stanislaw Gruszka <sgruszka@redhat.com> |
| |
| commit ad3f993a0857ad3b792e7463828eb0d90cdd6f4d upstream. |
| |
| We use always 1 as band parameter for MCU_CAL_LC, this break 2GHz, |
| we should use 0 for this band instead. |
| |
| Patch fixes problems happened sometimes when try to associate with 2GHz |
| AP and manifest by errors like below: |
| |
| [14680.920823] wlan0: authenticate with 18:31:bf:c0:51:b0 |
| [14681.109506] wlan0: send auth to 18:31:bf:c0:51:b0 (try 1/3) |
| [14681.310454] wlan0: send auth to 18:31:bf:c0:51:b0 (try 2/3) |
| [14681.518469] wlan0: send auth to 18:31:bf:c0:51:b0 (try 3/3) |
| [14681.726499] wlan0: authentication with 18:31:bf:c0:51:b0 timed out |
| |
| Fixes: 9aec146d0f6b ("mt76x0: pci: introduce mt76x0_phy_calirate routine") |
| Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> |
| Signed-off-by: Felix Fietkau <nbd@nbd.name> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/wireless/mediatek/mt76/mt76x0/phy.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c |
| +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c |
| @@ -585,6 +585,7 @@ void mt76x0_phy_set_txpower(struct mt76x |
| void mt76x0_phy_calibrate(struct mt76x02_dev *dev, bool power_on) |
| { |
| struct ieee80211_channel *chan = dev->mt76.chandef.chan; |
| + int is_5ghz = (chan->band == NL80211_BAND_5GHZ) ? 1 : 0; |
| u32 val, tx_alc, reg_val; |
| |
| if (power_on) { |
| @@ -602,7 +603,7 @@ void mt76x0_phy_calibrate(struct mt76x02 |
| reg_val = mt76_rr(dev, MT_BBP(IBI, 9)); |
| mt76_wr(dev, MT_BBP(IBI, 9), 0xffffff7e); |
| |
| - if (chan->band == NL80211_BAND_5GHZ) { |
| + if (is_5ghz) { |
| if (chan->hw_value < 100) |
| val = 0x701; |
| else if (chan->hw_value < 140) |
| @@ -615,7 +616,7 @@ void mt76x0_phy_calibrate(struct mt76x02 |
| |
| mt76x02_mcu_calibrate(dev, MCU_CAL_FULL, val, false); |
| msleep(350); |
| - mt76x02_mcu_calibrate(dev, MCU_CAL_LC, 1, false); |
| + mt76x02_mcu_calibrate(dev, MCU_CAL_LC, is_5ghz, false); |
| usleep_range(15000, 20000); |
| |
| mt76_wr(dev, MT_BBP(IBI, 9), reg_val); |