mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
wifi: rtw89: phy: update TSSI flow for RTL8922D
TSSI is to do TX compensation caused by temperature. The RTL8922D defines different H2C command format. Update it accordingly. Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20260117044157.2392958-7-pkshih@realtek.com
This commit is contained in:
parent
4809013c08
commit
5fe702e4b2
|
|
@ -7291,6 +7291,7 @@ int rtw89_fw_h2c_rf_pre_ntfy_mcc(struct rtw89_dev *rtwdev, enum rtw89_phy_idx ph
|
|||
int rtw89_fw_h2c_rf_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
|
||||
const struct rtw89_chan *chan, enum rtw89_tssi_mode tssi_mode)
|
||||
{
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
struct rtw89_efuse *efuse = &rtwdev->efuse;
|
||||
struct rtw89_hal *hal = &rtwdev->hal;
|
||||
struct rtw89_h2c_rf_tssi *h2c;
|
||||
|
|
@ -7311,11 +7312,15 @@ int rtw89_fw_h2c_rf_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
|
|||
h2c->ch = chan->channel;
|
||||
h2c->bw = chan->band_width;
|
||||
h2c->band = chan->band_type;
|
||||
h2c->hwtx_en = true;
|
||||
h2c->cv = hal->cv;
|
||||
h2c->tssi_mode = tssi_mode;
|
||||
h2c->rfe_type = efuse->rfe_type;
|
||||
|
||||
if (chip->chip_id == RTL8922A)
|
||||
h2c->hwtx_en = true;
|
||||
else
|
||||
h2c->hwtx_en = false;
|
||||
|
||||
rtw89_phy_rfk_tssi_fill_fwcmd_efuse_to_de(rtwdev, phy_idx, chan, h2c);
|
||||
rtw89_phy_rfk_tssi_fill_fwcmd_tmeter_tbl(rtwdev, phy_idx, chan, h2c);
|
||||
|
||||
|
|
|
|||
|
|
@ -4566,6 +4566,7 @@ void rtw89_phy_rfk_tssi_fill_fwcmd_efuse_to_de(struct rtw89_dev *rtwdev,
|
|||
const struct rtw89_chan *chan,
|
||||
struct rtw89_h2c_rf_tssi *h2c)
|
||||
{
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
|
||||
u8 ch = chan->channel;
|
||||
s8 trim_de;
|
||||
|
|
@ -4589,9 +4590,14 @@ void rtw89_phy_rfk_tssi_fill_fwcmd_efuse_to_de(struct rtw89_dev *rtwdev,
|
|||
cck_de = tssi_info->tssi_cck[i][gidx];
|
||||
val = u32_get_bits(cck_de + trim_de, 0xff);
|
||||
|
||||
h2c->curr_tssi_cck_de[i] = 0x0;
|
||||
h2c->curr_tssi_cck_de_20m[i] = val;
|
||||
h2c->curr_tssi_cck_de_40m[i] = val;
|
||||
if (chip->chip_id == RTL8922A) {
|
||||
h2c->curr_tssi_cck_de[i] = 0x0;
|
||||
h2c->curr_tssi_cck_de_20m[i] = val;
|
||||
h2c->curr_tssi_cck_de_40m[i] = val;
|
||||
} else {
|
||||
h2c->curr_tssi_cck_de[i] = val;
|
||||
}
|
||||
|
||||
h2c->curr_tssi_efuse_cck_de[i] = cck_de;
|
||||
|
||||
rtw89_debug(rtwdev, RTW89_DBG_TSSI,
|
||||
|
|
@ -4600,12 +4606,17 @@ void rtw89_phy_rfk_tssi_fill_fwcmd_efuse_to_de(struct rtw89_dev *rtwdev,
|
|||
ofdm_de = phy_tssi_get_ofdm_de(rtwdev, phy, chan, i);
|
||||
val = u32_get_bits(ofdm_de + trim_de, 0xff);
|
||||
|
||||
h2c->curr_tssi_ofdm_de[i] = 0x0;
|
||||
h2c->curr_tssi_ofdm_de_20m[i] = val;
|
||||
h2c->curr_tssi_ofdm_de_40m[i] = val;
|
||||
h2c->curr_tssi_ofdm_de_80m[i] = val;
|
||||
h2c->curr_tssi_ofdm_de_160m[i] = val;
|
||||
h2c->curr_tssi_ofdm_de_320m[i] = val;
|
||||
if (chip->chip_id == RTL8922A) {
|
||||
h2c->curr_tssi_ofdm_de[i] = 0x0;
|
||||
h2c->curr_tssi_ofdm_de_20m[i] = val;
|
||||
h2c->curr_tssi_ofdm_de_40m[i] = val;
|
||||
h2c->curr_tssi_ofdm_de_80m[i] = val;
|
||||
h2c->curr_tssi_ofdm_de_160m[i] = val;
|
||||
h2c->curr_tssi_ofdm_de_320m[i] = val;
|
||||
} else {
|
||||
h2c->curr_tssi_ofdm_de[i] = val;
|
||||
}
|
||||
|
||||
h2c->curr_tssi_efuse_ofdm_de[i] = ofdm_de;
|
||||
|
||||
rtw89_debug(rtwdev, RTW89_DBG_TSSI,
|
||||
|
|
@ -4620,10 +4631,12 @@ void rtw89_phy_rfk_tssi_fill_fwcmd_tmeter_tbl(struct rtw89_dev *rtwdev,
|
|||
{
|
||||
struct rtw89_fw_txpwr_track_cfg *trk = rtwdev->fw.elm_info.txpwr_trk;
|
||||
struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
const s8 *thm_up[RF_PATH_B + 1] = {};
|
||||
const s8 *thm_down[RF_PATH_B + 1] = {};
|
||||
u8 subband = chan->subband_type;
|
||||
s8 thm_ofst[128] = {0};
|
||||
s8 thm_ofst[128] = {};
|
||||
int multiplier;
|
||||
u8 thermal;
|
||||
u8 path;
|
||||
u8 i, j;
|
||||
|
|
@ -4687,6 +4700,11 @@ void rtw89_phy_rfk_tssi_fill_fwcmd_tmeter_tbl(struct rtw89_dev *rtwdev,
|
|||
rtw89_debug(rtwdev, RTW89_DBG_TSSI,
|
||||
"[TSSI] tmeter tbl on subband: %u\n", subband);
|
||||
|
||||
if (chip->chip_id == RTL8922A)
|
||||
multiplier = 1;
|
||||
else
|
||||
multiplier = -1;
|
||||
|
||||
for (path = RF_PATH_A; path <= RF_PATH_B; path++) {
|
||||
thermal = tssi_info->thermal[path];
|
||||
rtw89_debug(rtwdev, RTW89_DBG_TSSI,
|
||||
|
|
@ -4701,16 +4719,20 @@ void rtw89_phy_rfk_tssi_fill_fwcmd_tmeter_tbl(struct rtw89_dev *rtwdev,
|
|||
h2c->pg_thermal[path] = thermal;
|
||||
|
||||
i = 0;
|
||||
for (j = 0; j < 64; j++)
|
||||
for (j = 0; j < 64; j++) {
|
||||
thm_ofst[j] = i < DELTA_SWINGIDX_SIZE ?
|
||||
thm_up[path][i++] :
|
||||
thm_up[path][DELTA_SWINGIDX_SIZE - 1];
|
||||
thm_ofst[j] *= multiplier;
|
||||
}
|
||||
|
||||
i = 1;
|
||||
for (j = 127; j >= 64; j--)
|
||||
for (j = 127; j >= 64; j--) {
|
||||
thm_ofst[j] = i < DELTA_SWINGIDX_SIZE ?
|
||||
-thm_down[path][i++] :
|
||||
-thm_down[path][DELTA_SWINGIDX_SIZE - 1];
|
||||
thm_ofst[j] *= multiplier;
|
||||
}
|
||||
|
||||
for (i = 0; i < 128; i += 4) {
|
||||
h2c->ftable[path][i + 0] = thm_ofst[i + 3];
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user