mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt76x2u: phy: run phy_channel_calibrate after channel switch
Perform channel calibration after each channel switch and not only after connection establishment since NetworkManager perform multiple frequency scanning if RSSI in lower a given threshold Signed-off-by: Lorenzo Bianconi <[email protected]>
This commit is contained in:
committed by
Felix Fietkau
parent
f75efd81f8
commit
c1d67b47d4
@@ -43,7 +43,6 @@ int mt76x2u_mac_stop(struct mt76x02_dev *dev);
|
||||
int mt76x2u_phy_set_channel(struct mt76x02_dev *dev,
|
||||
struct cfg80211_chan_def *chandef);
|
||||
void mt76x2u_phy_calibrate(struct work_struct *work);
|
||||
void mt76x2u_phy_channel_calibrate(struct mt76x02_dev *dev);
|
||||
|
||||
void mt76x2u_mcu_complete_urb(struct urb *urb);
|
||||
int mt76x2u_mcu_init(struct mt76x02_dev *dev);
|
||||
|
||||
@@ -91,11 +91,6 @@ mt76x2u_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
|
||||
mutex_lock(&dev->mt76.mutex);
|
||||
|
||||
if (changed & BSS_CHANGED_ASSOC) {
|
||||
mt76x2u_phy_channel_calibrate(dev);
|
||||
mt76x2_apply_gain_adj(dev);
|
||||
}
|
||||
|
||||
if (changed & BSS_CHANGED_BSSID) {
|
||||
mt76_wr(dev, MT_MAC_BSSID_DW0,
|
||||
get_unaligned_le32(info->bssid));
|
||||
|
||||
+15
-3
@@ -18,15 +18,20 @@
|
||||
#include "eeprom.h"
|
||||
#include "../mt76x02_phy.h"
|
||||
|
||||
void mt76x2u_phy_channel_calibrate(struct mt76x02_dev *dev)
|
||||
static void
|
||||
mt76x2u_phy_channel_calibrate(struct mt76x02_dev *dev, bool mac_stopped)
|
||||
{
|
||||
struct ieee80211_channel *chan = dev->mt76.chandef.chan;
|
||||
bool is_5ghz = chan->band == NL80211_BAND_5GHZ;
|
||||
|
||||
if (dev->cal.channel_cal_done)
|
||||
return;
|
||||
|
||||
if (mt76x2_channel_silent(dev))
|
||||
return;
|
||||
|
||||
mt76x2u_mac_stop(dev);
|
||||
if (!mac_stopped)
|
||||
mt76x2u_mac_stop(dev);
|
||||
|
||||
if (is_5ghz)
|
||||
mt76x02_mcu_calibrate(dev, MCU_CAL_LC, 0, false);
|
||||
@@ -37,7 +42,11 @@ void mt76x2u_phy_channel_calibrate(struct mt76x02_dev *dev)
|
||||
mt76x02_mcu_calibrate(dev, MCU_CAL_TEMP_SENSOR, 0, false);
|
||||
mt76x02_mcu_calibrate(dev, MCU_CAL_TX_SHAPING, 0, false);
|
||||
|
||||
mt76x2u_mac_resume(dev);
|
||||
if (!mac_stopped)
|
||||
mt76x2u_mac_resume(dev);
|
||||
mt76x2_apply_gain_adj(dev);
|
||||
|
||||
dev->cal.channel_cal_done = true;
|
||||
}
|
||||
|
||||
void mt76x2u_phy_calibrate(struct work_struct *work)
|
||||
@@ -45,6 +54,7 @@ void mt76x2u_phy_calibrate(struct work_struct *work)
|
||||
struct mt76x02_dev *dev;
|
||||
|
||||
dev = container_of(work, struct mt76x02_dev, cal_work.work);
|
||||
mt76x2u_phy_channel_calibrate(dev, false);
|
||||
mt76x2_phy_tssi_compensate(dev, false);
|
||||
mt76x2_phy_update_channel_gain(dev);
|
||||
|
||||
@@ -165,7 +175,9 @@ int mt76x2u_phy_set_channel(struct mt76x02_dev *dev,
|
||||
if (scan)
|
||||
return 0;
|
||||
|
||||
mt76x2u_phy_channel_calibrate(dev, true);
|
||||
mt76x02_init_agc_gain(dev);
|
||||
|
||||
if (mt76x2_tssi_enabled(dev)) {
|
||||
/* init default values for temp compensation */
|
||||
mt76_rmw_field(dev, MT_TX_ALC_CFG_1, MT_TX_ALC_CFG_1_TEMP_COMP,
|
||||
|
||||
Reference in New Issue
Block a user