]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
rtw88: 8822c: fix lc calibration timing
authorPo-Hao Huang <phhuang@realtek.com>
Mon, 26 Apr 2021 01:32:52 +0000 (09:32 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 14 Jul 2021 14:59:59 +0000 (16:59 +0200)
[ Upstream commit 05684fd583e1acc34dddea283838fbfbed4904a0 ]

Before this patch, we use value from 2 seconds ago to decide
whether we should do lc calibration.
Although this don't happen frequently, fix flow to the way it should be.

Fixes: 7ae7784ec2a8 ("rtw88: 8822c: add LC calibration for RTL8822C")
Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210426013252.5665-3-pkshih@realtek.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/realtek/rtw88/rtw8822c.c

index 448922cb2e63daea43843b866aec9508de8aaeef..10bb3b5a8c22a4aa7b8d27ae6d60c5f31f1eb38b 100644 (file)
@@ -3529,26 +3529,28 @@ static void rtw8822c_pwrtrack_set(struct rtw_dev *rtwdev, u8 rf_path)
        }
 }
 
-static void rtw8822c_pwr_track_path(struct rtw_dev *rtwdev,
-                                   struct rtw_swing_table *swing_table,
-                                   u8 path)
+static void rtw8822c_pwr_track_stats(struct rtw_dev *rtwdev, u8 path)
 {
-       struct rtw_dm_info *dm_info = &rtwdev->dm_info;
-       u8 thermal_value, delta;
+       u8 thermal_value;
 
        if (rtwdev->efuse.thermal_meter[path] == 0xff)
                return;
 
        thermal_value = rtw_read_rf(rtwdev, path, RF_T_METER, 0x7e);
-
        rtw_phy_pwrtrack_avg(rtwdev, thermal_value, path);
+}
 
-       delta = rtw_phy_pwrtrack_get_delta(rtwdev, path);
+static void rtw8822c_pwr_track_path(struct rtw_dev *rtwdev,
+                                   struct rtw_swing_table *swing_table,
+                                   u8 path)
+{
+       struct rtw_dm_info *dm_info = &rtwdev->dm_info;
+       u8 delta;
 
+       delta = rtw_phy_pwrtrack_get_delta(rtwdev, path);
        dm_info->delta_power_index[path] =
                rtw_phy_pwrtrack_get_pwridx(rtwdev, swing_table, path, path,
                                            delta);
-
        rtw8822c_pwrtrack_set(rtwdev, path);
 }
 
@@ -3559,12 +3561,12 @@ static void __rtw8822c_pwr_track(struct rtw_dev *rtwdev)
 
        rtw_phy_config_swing_table(rtwdev, &swing_table);
 
+       for (i = 0; i < rtwdev->hal.rf_path_num; i++)
+               rtw8822c_pwr_track_stats(rtwdev, i);
        if (rtw_phy_pwrtrack_need_lck(rtwdev))
                rtw8822c_do_lck(rtwdev);
-
        for (i = 0; i < rtwdev->hal.rf_path_num; i++)
                rtw8822c_pwr_track_path(rtwdev, &swing_table, i);
-
 }
 
 static void rtw8822c_pwr_track(struct rtw_dev *rtwdev)