]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: phy: add chip_ops to calculate RX gain from efuse to support PS mode
authorPing-Ke Shih <pkshih@realtek.com>
Sat, 17 Jan 2026 04:41:49 +0000 (12:41 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Thu, 22 Jan 2026 02:09:46 +0000 (10:09 +0800)
In PS mode, it needs to restore RX gain settings while waking up. Add to
get RX gain values from chip specific ops, and pass these data to firmware
when going to enter PS mode.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20260117044157.2392958-2-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.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

index d2eb7c66f0414c72c9f417ae8b75d8056cd7b1f5..dd99638c6e3da24672d0805f998ccecae1dd92c6 100644 (file)
@@ -23,6 +23,7 @@ struct rtw89_efuse_block_cfg;
 struct rtw89_h2c_rf_tssi;
 struct rtw89_fw_txpwr_track_cfg;
 struct rtw89_phy_rfk_log_fmt;
+struct rtw89_phy_calc_efuse_gain;
 struct rtw89_debugfs;
 struct rtw89_regd_data;
 struct rtw89_wow_cam_info;
@@ -3822,6 +3823,11 @@ struct rtw89_chip_ops {
                                       s8 pw_ofst, enum rtw89_mac_idx mac_idx);
        void (*digital_pwr_comp)(struct rtw89_dev *rtwdev,
                                 enum rtw89_phy_idx phy_idx);
+       void (*calc_rx_gain_normal)(struct rtw89_dev *rtwdev,
+                                   const struct rtw89_chan *chan,
+                                   enum rtw89_rf_path path,
+                                   enum rtw89_phy_idx phy_idx,
+                                   struct rtw89_phy_calc_efuse_gain *calc);
        int (*pwr_on_func)(struct rtw89_dev *rtwdev);
        int (*pwr_off_func)(struct rtw89_dev *rtwdev);
        void (*query_rxdesc)(struct rtw89_dev *rtwdev,
@@ -5887,6 +5893,12 @@ struct rtw89_phy_efuse_gain {
        s8 comp[RF_PATH_MAX][RTW89_SUBBAND_NR]; /* S(8, 0) */
 };
 
+struct rtw89_phy_calc_efuse_gain {
+       s8 cck_mean_gain_bias;
+       s8 cck_rpl_ofst;
+       s8 rssi_ofst;
+};
+
 #define RTW89_MAX_PATTERN_NUM             18
 #define RTW89_MAX_PATTERN_MASK_SIZE       4
 #define RTW89_MAX_PATTERN_SIZE            128
@@ -7341,6 +7353,19 @@ static inline void rtw89_chip_digital_pwr_comp(struct rtw89_dev *rtwdev,
                chip->ops->digital_pwr_comp(rtwdev, phy_idx);
 }
 
+static inline
+void rtw89_chip_calc_rx_gain_normal(struct rtw89_dev *rtwdev,
+                                   const struct rtw89_chan *chan,
+                                   enum rtw89_rf_path path,
+                                   enum rtw89_phy_idx phy_idx,
+                                   struct rtw89_phy_calc_efuse_gain *calc)
+{
+       const struct rtw89_chip_info *chip = rtwdev->chip;
+
+       if (chip->ops->calc_rx_gain_normal)
+               chip->ops->calc_rx_gain_normal(rtwdev, chan, path, phy_idx, calc);
+}
+
 static inline void rtw89_load_txpwr_table(struct rtw89_dev *rtwdev,
                                          const struct rtw89_txpwr_table *tbl)
 {
index 0383d3b5c7bc29a7b433ea55eb0515531b7c7842..d6deb44a685bbd3b264851072a269e0a59b1cf6d 100644 (file)
@@ -2530,6 +2530,7 @@ static const struct rtw89_chip_ops rtw8851b_chip_ops = {
        .cfg_txrx_path          = rtw8851b_bb_cfg_txrx_path,
        .set_txpwr_ul_tb_offset = rtw8851b_set_txpwr_ul_tb_offset,
        .digital_pwr_comp       = NULL,
+       .calc_rx_gain_normal    = NULL,
        .pwr_on_func            = rtw8851b_pwr_on_func,
        .pwr_off_func           = rtw8851b_pwr_off_func,
        .query_rxdesc           = rtw89_core_query_rxdesc,
index 329fc0a7b07b0b96fdf3ad0006b213ad76b6bdf9..5ea7a36ab5abc48519c5a0115c366a1329988c5d 100644 (file)
@@ -2224,6 +2224,7 @@ static const struct rtw89_chip_ops rtw8852a_chip_ops = {
        .cfg_txrx_path          = NULL,
        .set_txpwr_ul_tb_offset = rtw8852a_set_txpwr_ul_tb_offset,
        .digital_pwr_comp       = NULL,
+       .calc_rx_gain_normal    = NULL,
        .pwr_on_func            = NULL,
        .pwr_off_func           = NULL,
        .query_rxdesc           = rtw89_core_query_rxdesc,
index f44674a39e30dc17f1706ff1507e21d1c00741b2..197e3f5fb21b346f58a67a87484b02c911054521 100644 (file)
@@ -857,6 +857,7 @@ static const struct rtw89_chip_ops rtw8852b_chip_ops = {
        .cfg_txrx_path          = rtw8852bx_bb_cfg_txrx_path,
        .set_txpwr_ul_tb_offset = rtw8852bx_set_txpwr_ul_tb_offset,
        .digital_pwr_comp       = NULL,
+       .calc_rx_gain_normal    = NULL,
        .pwr_on_func            = rtw8852b_pwr_on_func,
        .pwr_off_func           = rtw8852b_pwr_off_func,
        .query_rxdesc           = rtw89_core_query_rxdesc,
index ab60ed389ff7f6d01f9f53b3cb71143cde8ca47b..92bbd6e5d6993b552f4017cfc0608be0097e040e 100644 (file)
@@ -703,6 +703,7 @@ static const struct rtw89_chip_ops rtw8852bt_chip_ops = {
        .cfg_txrx_path          = rtw8852bx_bb_cfg_txrx_path,
        .set_txpwr_ul_tb_offset = rtw8852bx_set_txpwr_ul_tb_offset,
        .digital_pwr_comp       = NULL,
+       .calc_rx_gain_normal    = NULL,
        .pwr_on_func            = rtw8852bt_pwr_on_func,
        .pwr_off_func           = rtw8852bt_pwr_off_func,
        .query_rxdesc           = rtw89_core_query_rxdesc,
index d2138be3640d7e91c276f8fa835b4b839925b823..de5d343f80a57933c841f2be98469eb78aaad852 100644 (file)
@@ -3065,6 +3065,7 @@ static const struct rtw89_chip_ops rtw8852c_chip_ops = {
        .cfg_txrx_path          = rtw8852c_bb_cfg_txrx_path,
        .set_txpwr_ul_tb_offset = rtw8852c_set_txpwr_ul_tb_offset,
        .digital_pwr_comp       = NULL,
+       .calc_rx_gain_normal    = NULL,
        .pwr_on_func            = rtw8852c_pwr_on_func,
        .pwr_off_func           = rtw8852c_pwr_off_func,
        .query_rxdesc           = rtw89_core_query_rxdesc,
index 6d2cd914e16e5badb6a25f977d41e67ba6c69b6b..0a3c2207dd4b0eb555b285e2e32f31b5be6abce1 100644 (file)
@@ -2838,6 +2838,7 @@ static const struct rtw89_chip_ops rtw8922a_chip_ops = {
        .cfg_txrx_path          = rtw8922a_bb_cfg_txrx_path,
        .set_txpwr_ul_tb_offset = NULL,
        .digital_pwr_comp       = rtw8922a_digital_pwr_comp,
+       .calc_rx_gain_normal    = NULL,
        .pwr_on_func            = rtw8922a_pwr_on_func,
        .pwr_off_func           = rtw8922a_pwr_off_func,
        .query_rxdesc           = rtw89_core_query_rxdesc_v2,