wifi: rtw89: 8852b: add chip_ops to get thermal
authorPing-Ke Shih <pkshih@realtek.com>
Sun, 9 Oct 2022 12:53:58 +0000 (20:53 +0800)
committerKalle Valo <kvalo@kernel.org>
Wed, 12 Oct 2022 04:34:56 +0000 (07:34 +0300)
Thermal value reflects temperature that will affect RF performance, so
we re-calibrate RF characteristics if delta of thermal over a threshold.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20221009125403.19662-5-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/rtw8852b.c

index f13c657f4d68d8d577f320655b64fbaba02ac5f1..09374b92f6617c9bff6372e5b92f23ee5a6aba01 100644 (file)
@@ -1397,6 +1397,23 @@ rtw8852b_init_txpwr_unit(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
        return 0;
 }
 
+static u8 rtw8852b_get_thermal(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path)
+{
+       if (rtwdev->is_tssi_mode[rf_path]) {
+               u32 addr = 0x1c10 + (rf_path << 13);
+
+               return rtw89_phy_read32_mask(rtwdev, addr, 0x3F000000);
+       }
+
+       rtw89_write_rf(rtwdev, rf_path, RR_TM, RR_TM_TRI, 0x1);
+       rtw89_write_rf(rtwdev, rf_path, RR_TM, RR_TM_TRI, 0x0);
+       rtw89_write_rf(rtwdev, rf_path, RR_TM, RR_TM_TRI, 0x1);
+
+       fsleep(200);
+
+       return rtw89_read_rf(rtwdev, rf_path, RR_TM, RR_TM_VAL);
+}
+
 static int rtw8852b_mac_enable_bb_rf(struct rtw89_dev *rtwdev)
 {
        int ret;
@@ -1463,6 +1480,7 @@ static const struct rtw89_chip_ops rtw8852b_chip_ops = {
        .set_txpwr              = rtw8852b_set_txpwr,
        .set_txpwr_ctrl         = rtw8852b_set_txpwr_ctrl,
        .init_txpwr_unit        = rtw8852b_init_txpwr_unit,
+       .get_thermal            = rtw8852b_get_thermal,
        .pwr_on_func            = rtw8852b_pwr_on_func,
        .pwr_off_func           = rtw8852b_pwr_off_func,
 };