OSDN Git Service

rtw88: 8822c: fix lc calibration timing
authorPo-Hao Huang <phhuang@realtek.com>
Mon, 26 Apr 2021 01:32:52 +0000 (09:32 +0800)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 22 Jun 2021 15:18:16 +0000 (18:18 +0300)
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
drivers/net/wireless/realtek/rtw88/rtw8822c.c

index b6b4365..436347f 100644 (file)
@@ -4395,26 +4395,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);
 }
 
@@ -4425,12 +4427,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)