| From db8f61d31362a4d83fc2b12a617a7e47e3d4b3a6 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 26 Apr 2021 09:32:52 +0800 |
| Subject: rtw88: 8822c: fix lc calibration timing |
| |
| From: Po-Hao Huang <phhuang@realtek.com> |
| |
| [ 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 | 22 ++++++++++--------- |
| 1 file changed, 12 insertions(+), 10 deletions(-) |
| |
| diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c |
| index b718f5d810be..79ad6232dce8 100644 |
| --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c |
| +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c |
| @@ -3510,26 +3510,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); |
| } |
| |
| @@ -3540,12 +3542,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) |
| -- |
| 2.30.2 |
| |