summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPing-Ke Shih <pkshih@realtek.com>2026-05-20 15:38:20 +0300
committerPing-Ke Shih <pkshih@realtek.com>2026-05-27 11:28:23 +0300
commit89ab7535e428afe31d48fd2edd39fee5badb2456 (patch)
tree87115c0aa2b93a8e8456ea9c6573d40486c0aca9
parentc77a155c96d7818626ad24b49aa50bc376af547b (diff)
downloadlinux-89ab7535e428afe31d48fd2edd39fee5badb2456.tar.xz
wifi: rtw89: fw: load TX compensation element by RFE type
Originally driver uses TX compensation element by AID, and now tables are by RFE type. Add the logic accordingly. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20260520123823.1792954-5-pkshih@realtek.com
-rw-r--r--drivers/net/wireless/realtek/rtw89/fw.c6
-rw-r--r--drivers/net/wireless/realtek/rtw89/fw.h5
2 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index 3e6161743015..d6a594b75ab2 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -1423,12 +1423,18 @@ int rtw89_build_tx_comp_from_elm(struct rtw89_dev *rtwdev,
const union rtw89_fw_element_arg arg)
{
struct rtw89_fw_elm_info *elm_info = &rtwdev->fw.elm_info;
+ struct rtw89_efuse *efuse = &rtwdev->efuse;
struct rtw89_hal *hal = &rtwdev->hal;
+ u8 rfe_type;
u16 aid;
aid = le16_to_cpu(elm->aid);
+ rfe_type = elm->u.tx_comp.rfe_type;
+
if (aid && aid != hal->aid)
return 1; /* ignore if aid not matched */
+ else if (rfe_type && rfe_type != efuse->rfe_type)
+ return 1; /* ignore if rfe_type not matched */
else if (elm_info->tx_comp)
return 1; /* ignore if an element is existing */
diff --git a/drivers/net/wireless/realtek/rtw89/fw.h b/drivers/net/wireless/realtek/rtw89/fw.h
index cde8fd34723b..20721d5209aa 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.h
+++ b/drivers/net/wireless/realtek/rtw89/fw.h
@@ -4548,6 +4548,11 @@ struct rtw89_fw_element_hdr {
u8 rsvd[4];
u8 rules_and_msgs[];
} __packed diag_mac;
+ struct {
+ u8 rfe_type;
+ u8 priv[7];
+ u8 contents[];
+ } __packed tx_comp;
struct __rtw89_fw_txpwr_element txpwr;
struct __rtw89_fw_regd_element regd;
} __packed u;