]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: phy: define BB wrap data for RTL8922D variants
authorPing-Ke Shih <pkshih@realtek.com>
Mon, 11 May 2026 07:01:38 +0000 (15:01 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 19 May 2026 03:03:19 +0000 (11:03 +0800)
The BB wrap is a hardware block to control TX power. Since RTL8922D has
many variants with different CID and RFE types, prepare flow and dummy
struct adopt to configuration functions for coming patches.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20260511070148.25257-2-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.c
drivers/net/wireless/realtek/rtw89/core.h
drivers/net/wireless/realtek/rtw89/phy.h
drivers/net/wireless/realtek/rtw89/rtw8851b.c
drivers/net/wireless/realtek/rtw89/rtw8852a.c
drivers/net/wireless/realtek/rtw89/rtw8852b.c
drivers/net/wireless/realtek/rtw89/rtw8852bt.c
drivers/net/wireless/realtek/rtw89/rtw8852c.c
drivers/net/wireless/realtek/rtw89/rtw8922a.c
drivers/net/wireless/realtek/rtw89/rtw8922d.c

index 432d46dfd26a61a65e20eb5a9ca7877aefa7f94a..7b26aedc088340ac7991207efa5cbf4ec72074e9 100644 (file)
@@ -7312,6 +7312,10 @@ int rtw89_chip_info_setup(struct rtw89_dev *rtwdev)
        if (ret)
                goto out;
 
+       ret = rtw89_chip_data_setup(rtwdev);
+       if (ret)
+               goto out;
+
        rtw89_core_setup_rfe_parms(rtwdev);
        rtwdev->ps_mode = rtw89_update_ps_mode(rtwdev);
 
index a6dee97d99f2da54795be6294673b3ebf7f78392..75237fb23a9983a5692d1f23a146c8ab0db4baa5 100644 (file)
@@ -29,6 +29,7 @@ struct rtw89_phy_sts_ie10;
 struct rtw89_debugfs;
 struct rtw89_regd_data;
 struct rtw89_wow_cam_info;
+struct rtw89_bb_wrap_data;
 struct rtw89_fw_cmd_ofld_info;
 
 extern const struct ieee80211_ops rtw89_ops;
@@ -3851,6 +3852,7 @@ struct rtw89_chip_ops {
                          enum rtw89_efuse_block block);
        int (*read_phycap)(struct rtw89_dev *rtwdev, u8 *phycap_map);
        void (*fem_setup)(struct rtw89_dev *rtwdev);
+       int (*data_setup)(struct rtw89_dev *rtwdev);
        void (*rfe_gpio)(struct rtw89_dev *rtwdev);
        void (*rfk_hw_init)(struct rtw89_dev *rtwdev);
        void (*rfk_init)(struct rtw89_dev *rtwdev);
@@ -4597,6 +4599,7 @@ struct rtw89_bb_stat_cfg {
 };
 
 struct rtw89_phy_info {
+       const struct rtw89_bb_wrap_data *bb_wrap_data;
        struct rtw89_bb_stat_cfg bb_stat_cfg;
 };
 
@@ -7484,6 +7487,16 @@ static inline void rtw89_chip_fem_setup(struct rtw89_dev *rtwdev)
                chip->ops->fem_setup(rtwdev);
 }
 
+static inline int rtw89_chip_data_setup(struct rtw89_dev *rtwdev)
+{
+       const struct rtw89_chip_info *chip = rtwdev->chip;
+
+       if (!chip->ops->data_setup)
+               return 0;
+
+       return chip->ops->data_setup(rtwdev);
+}
+
 static inline void rtw89_chip_rfe_gpio(struct rtw89_dev *rtwdev)
 {
        const struct rtw89_chip_info *chip = rtwdev->chip;
index b4b818f786df79945332150c58bc3671c9dea8dc..eabaf46f4f4b258ce7a72149aaa2bad303f4f1b2 100644 (file)
@@ -572,6 +572,9 @@ struct rtw89_phy_rfk_log_fmt {
        const struct rtw89_fw_element_hdr *elm[RTW89_PHY_C2H_RFK_LOG_FUNC_NUM];
 };
 
+struct rtw89_bb_wrap_data {
+};
+
 struct rtw89_phy_gen_def {
        u32 cr_base;
        u32 physt_bmp_start;
index e047e716d9e3ea242de4eeb01868871b0337215f..2fb54e1fc7ab23bc8a8f79deba5a23c2855d7b95 100644 (file)
@@ -2556,6 +2556,7 @@ static const struct rtw89_chip_ops rtw8851b_chip_ops = {
        .read_efuse             = rtw8851b_read_efuse,
        .read_phycap            = rtw8851b_read_phycap,
        .fem_setup              = NULL,
+       .data_setup             = NULL,
        .rfe_gpio               = rtw8851b_rfe_gpio,
        .rfk_hw_init            = NULL,
        .rfk_init               = rtw8851b_rfk_init,
index 686e489d42f2266f5b3ca1b60614a3c849479222..d3b6e8a7f5bdba76cc7d47c05ba719b070d463d9 100644 (file)
@@ -2302,6 +2302,7 @@ static const struct rtw89_chip_ops rtw8852a_chip_ops = {
        .read_efuse             = rtw8852a_read_efuse,
        .read_phycap            = rtw8852a_read_phycap,
        .fem_setup              = rtw8852a_fem_setup,
+       .data_setup             = NULL,
        .rfe_gpio               = NULL,
        .rfk_hw_init            = NULL,
        .rfk_init               = rtw8852a_rfk_init,
index 6ab99f72fda7524c3b94f5c919d68884192de3e2..989ac38fe3598f51923bbafeddd1d644c19ed07b 100644 (file)
@@ -883,6 +883,7 @@ static const struct rtw89_chip_ops rtw8852b_chip_ops = {
        .read_efuse             = rtw8852bx_read_efuse,
        .read_phycap            = rtw8852bx_read_phycap,
        .fem_setup              = NULL,
+       .data_setup             = NULL,
        .rfe_gpio               = NULL,
        .rfk_hw_init            = NULL,
        .rfk_init               = rtw8852b_rfk_init,
index 83de2627310000cb265ceaad66a81721f94c819e..b58561e141cbcc2372c6d003380ac44e5f052800 100644 (file)
@@ -729,6 +729,7 @@ static const struct rtw89_chip_ops rtw8852bt_chip_ops = {
        .read_efuse             = rtw8852bx_read_efuse,
        .read_phycap            = rtw8852bx_read_phycap,
        .fem_setup              = NULL,
+       .data_setup             = NULL,
        .rfe_gpio               = NULL,
        .rfk_hw_init            = NULL,
        .rfk_init               = rtw8852bt_rfk_init,
index cc278587b5320b3c5a901e661bcc70e551560fdf..9ecd140dcdd582c09475d9bba6d0dddd50a5790e 100644 (file)
@@ -3091,6 +3091,7 @@ static const struct rtw89_chip_ops rtw8852c_chip_ops = {
        .read_efuse             = rtw8852c_read_efuse,
        .read_phycap            = rtw8852c_read_phycap,
        .fem_setup              = NULL,
+       .data_setup             = NULL,
        .rfe_gpio               = NULL,
        .rfk_hw_init            = NULL,
        .rfk_init               = rtw8852c_rfk_init,
index e6f15ee2a86b1b785d63c930bcc861bd2842af53..07270e83b778d59671fb7fbb0ab4c7638dd748e6 100644 (file)
@@ -3086,6 +3086,7 @@ static const struct rtw89_chip_ops rtw8922a_chip_ops = {
        .read_efuse             = rtw8922a_read_efuse,
        .read_phycap            = rtw8922a_read_phycap,
        .fem_setup              = NULL,
+       .data_setup             = NULL,
        .rfe_gpio               = NULL,
        .rfk_hw_init            = rtw8922a_rfk_hw_init,
        .rfk_init               = rtw8922a_rfk_init,
index b8b75fca0a1bdfcf1ca378695ab4e0129837c3d6..66b05aedcf11c724f2d92dcc0310672631636a45 100644 (file)
@@ -286,6 +286,15 @@ static const struct rtw89_efuse_block_cfg rtw8922d_efuse_blocks[] = {
        [RTW89_EFUSE_BLOCK_ADIE]                = {.offset = 0x70000, .size = 0x10},
 };
 
+static const struct rtw89_bb_wrap_data rtw8922d_bb_wrap_data_7025_default = {
+};
+
+static const struct rtw89_bb_wrap_data rtw8922d_bb_wrap_data_7090_default = {
+};
+
+static const struct rtw89_bb_wrap_data rtw8922d_bb_wrap_data_7090_rfe35_41_44 = {
+};
+
 static void rtw8922d_sel_bt_rx_path(struct rtw89_dev *rtwdev, u8 val,
                                    enum rtw89_rf_path rx_path)
 {
@@ -918,6 +927,34 @@ static void rtw8922d_power_trim(struct rtw89_dev *rtwdev)
        rtw8922d_pad_bias_trim(rtwdev);
 }
 
+static int rtw8922d_data_setup(struct rtw89_dev *rtwdev)
+{
+       const struct rtw89_bb_wrap_data *data;
+       struct rtw89_hal *hal = &rtwdev->hal;
+       bool rfe35_41_44 = false;
+
+       switch (rtwdev->efuse.rfe_type) {
+       case 35:
+       case 41:
+       case 44:
+               rfe35_41_44 = true;
+               break;
+       }
+
+       if (hal->cid == RTL8922D_CID7025) {
+               data = &rtw8922d_bb_wrap_data_7025_default;
+       } else {
+               if (rfe35_41_44)
+                       data = &rtw8922d_bb_wrap_data_7090_rfe35_41_44;
+               else
+                       data = &rtw8922d_bb_wrap_data_7090_default;
+       }
+
+       rtwdev->phy_info.bb_wrap_data = data;
+
+       return 0;
+}
+
 static void rtw8922d_set_channel_mac(struct rtw89_dev *rtwdev,
                                     const struct rtw89_chan *chan,
                                     u8 mac_idx)
@@ -2933,6 +2970,7 @@ static const struct rtw89_chip_ops rtw8922d_chip_ops = {
        .read_efuse             = rtw8922d_read_efuse,
        .read_phycap            = rtw8922d_read_phycap,
        .fem_setup              = NULL,
+       .data_setup             = rtw8922d_data_setup,
        .rfe_gpio               = NULL,
        .rfk_hw_init            = rtw8922d_rfk_hw_init,
        .rfk_init               = rtw8922d_rfk_init,