]> www.infradead.org Git - linux.git/commitdiff
wifi: rtw89: 8851b: use right chanctx whenever possible in RFK flow
authorZong-Zhe Yang <kevin_yang@realtek.com>
Mon, 19 Aug 2024 09:17:18 +0000 (17:17 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 27 Aug 2024 02:54:41 +0000 (10:54 +0800)
No longer access chan with hard-code RTW89_CHANCTX_X whenever possible.
Instead, obtain the right chanctx from somewhere and use it in RTL8851B
RFK (RF calibration) related code.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20240819091724.33730-3-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/rtw8851b.c
drivers/net/wireless/realtek/rtw89/rtw8851b_rfk.c
drivers/net/wireless/realtek/rtw89/rtw8851b_rfk.h

index d5e42b2ad9ace2b4f5c645e2e497457bb167f28f..c2fa8e270a4bba028dfeedf78b69a16ed3063de8 100644 (file)
@@ -1587,30 +1587,31 @@ static void rtw8851b_rfk_init(struct rtw89_dev *rtwdev)
        rtw8851b_aack(rtwdev);
        rtw8851b_rck(rtwdev);
        rtw8851b_dack(rtwdev);
-       rtw8851b_rx_dck(rtwdev, RTW89_PHY_0);
+       rtw8851b_rx_dck(rtwdev, RTW89_PHY_0, RTW89_CHANCTX_0);
 }
 
 static void rtw8851b_rfk_channel(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
 {
+       enum rtw89_chanctx_idx chanctx_idx = rtwvif->chanctx_idx;
        enum rtw89_phy_idx phy_idx = rtwvif->phy_idx;
 
-       rtw8851b_rx_dck(rtwdev, phy_idx);
-       rtw8851b_iqk(rtwdev, phy_idx);
-       rtw8851b_tssi(rtwdev, phy_idx, true);
-       rtw8851b_dpk(rtwdev, phy_idx);
+       rtw8851b_rx_dck(rtwdev, phy_idx, chanctx_idx);
+       rtw8851b_iqk(rtwdev, phy_idx, chanctx_idx);
+       rtw8851b_tssi(rtwdev, phy_idx, true, chanctx_idx);
+       rtw8851b_dpk(rtwdev, phy_idx, chanctx_idx);
 }
 
 static void rtw8851b_rfk_band_changed(struct rtw89_dev *rtwdev,
                                      enum rtw89_phy_idx phy_idx,
                                      const struct rtw89_chan *chan)
 {
-       rtw8851b_tssi_scan(rtwdev, phy_idx);
+       rtw8851b_tssi_scan(rtwdev, phy_idx, chan);
 }
 
 static void rtw8851b_rfk_scan(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
                              bool start)
 {
-       rtw8851b_wifi_scan_notify(rtwdev, start, rtwvif->phy_idx);
+       rtw8851b_wifi_scan_notify(rtwdev, start, rtwvif->phy_idx, rtwvif->chanctx_idx);
 }
 
 static void rtw8851b_rfk_track(struct rtw89_dev *rtwdev)
index 7942f334066cdbf2aa2b39aadc93f259086fb58e..364e3635422569d6acf58302e92d322408fab3df 100644 (file)
@@ -521,9 +521,10 @@ static void _dac_cal(struct rtw89_dev *rtwdev, bool force)
 }
 
 static void _rx_dck_info(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                        enum rtw89_rf_path path, bool is_afe)
+                        enum rtw89_rf_path path, bool is_afe,
+                        enum rtw89_chanctx_idx chanctx_idx)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
 
        rtw89_debug(rtwdev, RTW89_DBG_RFK,
                    "[RX_DCK] ==== S%d RX DCK (%s / CH%d / %s / by %s)====\n", path,
@@ -574,7 +575,8 @@ static void _set_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, u8 rf
        _rxbb_ofst_swap(rtwdev, path, rf_mode);
 }
 
-static void _rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool is_afe)
+static void _rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool is_afe,
+                   enum rtw89_chanctx_idx chanctx_idx)
 {
        u32 rf_reg5;
        u8 path;
@@ -584,7 +586,7 @@ static void _rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool is_af
                    0x2, rtwdev->hal.cv);
 
        for (path = 0; path < RF_PATH_NUM_8851B; path++) {
-               _rx_dck_info(rtwdev, phy, path, is_afe);
+               _rx_dck_info(rtwdev, phy, path, is_afe, chanctx_idx);
 
                rf_reg5 = rtw89_read_rf(rtwdev, path, RR_RSV1, RFREG_MASK);
 
@@ -1481,9 +1483,9 @@ static void _rfk_restore_rf_reg(struct rtw89_dev *rtwdev,
 }
 
 static void _iqk_get_ch_info(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                            u8 path)
+                            u8 path, enum rtw89_chanctx_idx chanctx_idx)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        struct rtw89_iqk_info *iqk_info = &rtwdev->iqk;
        u8 idx = 0;
 
@@ -1586,10 +1588,11 @@ static void _iqk_init(struct rtw89_dev *rtwdev)
 }
 
 static void _doiqk(struct rtw89_dev *rtwdev, bool force,
-                  enum rtw89_phy_idx phy_idx, u8 path)
+                  enum rtw89_phy_idx phy_idx, u8 path,
+                  enum rtw89_chanctx_idx chanctx_idx)
 {
        struct rtw89_iqk_info *iqk_info = &rtwdev->iqk;
-       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, RF_AB, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, RF_AB, chanctx_idx);
        u32 backup_rf_val[RTW8851B_IQK_SS][BACKUP_RF_REGS_NR];
        u32 backup_bb_val[BACKUP_BB_REGS_NR];
 
@@ -1602,7 +1605,7 @@ static void _doiqk(struct rtw89_dev *rtwdev, bool force,
        iqk_info->version = RTW8851B_IQK_VER;
 
        rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]Test Ver 0x%x\n", iqk_info->version);
-       _iqk_get_ch_info(rtwdev, phy_idx, path);
+       _iqk_get_ch_info(rtwdev, phy_idx, path, chanctx_idx);
 
        _rfk_backup_bb_reg(rtwdev, &backup_bb_val[0]);
        _rfk_backup_rf_reg(rtwdev, &backup_rf_val[path][0], path);
@@ -1618,9 +1621,10 @@ static void _doiqk(struct rtw89_dev *rtwdev, bool force,
                              BTC_WRFK_ONESHOT_STOP);
 }
 
-static void _iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx, bool force)
+static void _iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                bool force, enum rtw89_chanctx_idx chanctx_idx)
 {
-       _doiqk(rtwdev, force, phy_idx, RF_PATH_A);
+       _doiqk(rtwdev, force, phy_idx, RF_PATH_A, chanctx_idx);
 }
 
 static void _dpk_bkup_kip(struct rtw89_dev *rtwdev, const u32 *reg,
@@ -1746,9 +1750,9 @@ static void _dpk_init(struct rtw89_dev *rtwdev, enum rtw89_rf_path path)
 }
 
 static void _dpk_information(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                            enum rtw89_rf_path path)
+                            enum rtw89_rf_path path, enum rtw89_chanctx_idx chanctx_idx)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        struct rtw89_dpk_info *dpk = &rtwdev->dpk;
 
        u8 kidx = dpk->cur_idx[path];
@@ -2449,7 +2453,8 @@ _error:
 }
 
 static void _dpk_cal_select(struct rtw89_dev *rtwdev, bool force,
-                           enum rtw89_phy_idx phy, u8 kpath)
+                           enum rtw89_phy_idx phy, u8 kpath,
+                           enum rtw89_chanctx_idx chanctx_idx)
 {
        struct rtw89_dpk_info *dpk = &rtwdev->dpk;
        u32 kip_bkup[RF_PATH_NUM_8851B][DPK_KIP_REG_NUM_8851B] = {};
@@ -2465,7 +2470,7 @@ static void _dpk_cal_select(struct rtw89_dev *rtwdev, bool force,
                        continue;
                _dpk_bkup_kip(rtwdev, dpk_kip_reg, kip_bkup, path);
                _dpk_bkup_rf(rtwdev, dpk_rf_reg, rf_bkup, path);
-               _dpk_information(rtwdev, phy, path);
+               _dpk_information(rtwdev, phy, path, chanctx_idx);
                _dpk_init(rtwdev, path);
 
                if (rtwdev->is_tssi_mode[path])
@@ -2505,13 +2510,14 @@ static void _dpk_cal_select(struct rtw89_dev *rtwdev, bool force,
        _dpk_kip_pwr_clk_onoff(rtwdev, false);
 }
 
-static void _dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool force)
+static void _dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool force,
+                enum rtw89_chanctx_idx chanctx_idx)
 {
        rtw89_debug(rtwdev, RTW89_DBG_RFK,
                    "[DPK] ****** 8851B DPK Start (Ver: 0x%x, Cv: %d) ******\n",
                    DPK_VER_8851B, rtwdev->hal.cv);
 
-       _dpk_cal_select(rtwdev, force, phy, _kpath(rtwdev, phy));
+       _dpk_cal_select(rtwdev, force, phy, _kpath(rtwdev, phy), chanctx_idx);
 }
 
 static void _dpk_track(struct rtw89_dev *rtwdev)
@@ -2617,9 +2623,8 @@ static void _rck(struct rtw89_dev *rtwdev, enum rtw89_rf_path path)
 }
 
 static void _tssi_set_sys(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                         enum rtw89_rf_path path)
+                         enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        enum rtw89_band band = chan->band_type;
 
        rtw89_rfk_parser(rtwdev, &rtw8851b_tssi_sys_defs_tbl);
@@ -2650,7 +2655,7 @@ static void _tssi_set_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
 }
 
 static void _tssi_set_tmeter_tbl(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                                enum rtw89_rf_path path)
+                                enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
 #define RTW8851B_TSSI_GET_VAL(ptr, idx)                        \
 ({                                                     \
@@ -2664,7 +2669,6 @@ static void _tssi_set_tmeter_tbl(struct rtw89_dev *rtwdev, enum rtw89_phy_idx ph
        __val;                                          \
 })
        struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        u8 ch = chan->channel;
        u8 subband = chan->subband_type;
        const s8 *thm_up_a = NULL;
@@ -2755,9 +2759,8 @@ static void _tssi_set_dac_gain_tbl(struct rtw89_dev *rtwdev, enum rtw89_phy_idx
 }
 
 static void _tssi_slope_cal_org(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                               enum rtw89_rf_path path)
+                               enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        enum rtw89_band band = chan->band_type;
 
        rtw89_rfk_parser_by_cond(rtwdev, band == RTW89_BAND_2G,
@@ -2766,9 +2769,9 @@ static void _tssi_slope_cal_org(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy
 }
 
 static void _tssi_alignment_default(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                                   enum rtw89_rf_path path, bool all)
+                                   enum rtw89_rf_path path, bool all,
+                                   const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        enum rtw89_band band = chan->band_type;
 
        rtw89_rfk_parser_by_cond(rtwdev, band == RTW89_BAND_2G,
@@ -2944,10 +2947,9 @@ static u32 _tssi_get_trim_group(struct rtw89_dev *rtwdev, u8 ch)
 }
 
 static s8 _tssi_get_ofdm_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                           enum rtw89_rf_path path)
+                           enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
        struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        u32 gidx, gidx_1st, gidx_2nd;
        u8 ch = chan->channel;
        s8 de_1st;
@@ -2980,10 +2982,9 @@ static s8 _tssi_get_ofdm_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
 }
 
 static s8 _tssi_get_ofdm_trim_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                                enum rtw89_rf_path path)
+                                enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
        struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        u32 tgidx, tgidx_1st, tgidx_2nd;
        u8 ch = chan->channel;
        s8 tde_1st;
@@ -3017,10 +3018,10 @@ static s8 _tssi_get_ofdm_trim_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx ph
        return val;
 }
 
-static void _tssi_set_efuse_to_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy)
+static void _tssi_set_efuse_to_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                                 const struct rtw89_chan *chan)
 {
        struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        u8 ch = chan->channel;
        u8 gidx;
        s8 ofdm_de;
@@ -3033,7 +3034,7 @@ static void _tssi_set_efuse_to_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx p
 
        for (i = RF_PATH_A; i < RTW8851B_TSSI_PATH_NR; i++) {
                gidx = _tssi_get_cck_group(rtwdev, ch);
-               trim_de = _tssi_get_ofdm_trim_de(rtwdev, phy, i);
+               trim_de = _tssi_get_ofdm_trim_de(rtwdev, phy, i, chan);
                val = tssi_info->tssi_cck[i][gidx] + trim_de;
 
                rtw89_debug(rtwdev, RTW89_DBG_TSSI,
@@ -3049,8 +3050,8 @@ static void _tssi_set_efuse_to_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx p
                            rtw89_phy_read32_mask(rtwdev, _tssi_de_cck_long[i],
                                                  _TSSI_DE_MASK));
 
-               ofdm_de = _tssi_get_ofdm_de(rtwdev, phy, i);
-               trim_de = _tssi_get_ofdm_trim_de(rtwdev, phy, i);
+               ofdm_de = _tssi_get_ofdm_de(rtwdev, phy, i, chan);
+               trim_de = _tssi_get_ofdm_trim_de(rtwdev, phy, i, chan);
                val = ofdm_de + trim_de;
 
                rtw89_debug(rtwdev, RTW89_DBG_TSSI,
@@ -3096,10 +3097,10 @@ static void _tssi_alimentk_dump_result(struct rtw89_dev *rtwdev, enum rtw89_rf_p
 }
 
 static void _tssi_alimentk_done(struct rtw89_dev *rtwdev,
-                               enum rtw89_phy_idx phy, enum rtw89_rf_path path)
+                               enum rtw89_phy_idx phy, enum rtw89_rf_path path,
+                               const struct rtw89_chan *chan)
 {
        struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        u8 channel = chan->channel;
        u8 band;
 
@@ -3255,9 +3256,10 @@ void rtw8851b_dack(struct rtw89_dev *rtwdev)
        _dac_cal(rtwdev, false);
 }
 
-void rtw8851b_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+void rtw8851b_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                 enum rtw89_chanctx_idx chanctx_idx)
 {
-       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, chanctx_idx);
        u32 tx_en;
 
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_IQK, BTC_WRFK_START);
@@ -3265,30 +3267,32 @@ void rtw8851b_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
        _wait_rx_mode(rtwdev, _kpath(rtwdev, phy_idx));
 
        _iqk_init(rtwdev);
-       _iqk(rtwdev, phy_idx, false);
+       _iqk(rtwdev, phy_idx, false, chanctx_idx);
 
        rtw89_chip_resume_sch_tx(rtwdev, phy_idx, tx_en);
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_IQK, BTC_WRFK_STOP);
 }
 
-void rtw8851b_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+void rtw8851b_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                    enum rtw89_chanctx_idx chanctx_idx)
 {
-       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, chanctx_idx);
        u32 tx_en;
 
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_RXDCK, BTC_WRFK_START);
        rtw89_chip_stop_sch_tx(rtwdev, phy_idx, &tx_en, RTW89_SCH_TX_SEL_ALL);
        _wait_rx_mode(rtwdev, _kpath(rtwdev, phy_idx));
 
-       _rx_dck(rtwdev, phy_idx, false);
+       _rx_dck(rtwdev, phy_idx, false, chanctx_idx);
 
        rtw89_chip_resume_sch_tx(rtwdev, phy_idx, tx_en);
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_RXDCK, BTC_WRFK_STOP);
 }
 
-void rtw8851b_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+void rtw8851b_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                 enum rtw89_chanctx_idx chanctx_idx)
 {
-       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, chanctx_idx);
        u32 tx_en;
 
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_DPK, BTC_WRFK_START);
@@ -3297,7 +3301,7 @@ void rtw8851b_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
 
        rtwdev->dpk.is_dpk_enable = true;
        rtwdev->dpk.is_dpk_reload_en = false;
-       _dpk(rtwdev, phy_idx, false);
+       _dpk(rtwdev, phy_idx, false, chanctx_idx);
 
        rtw89_chip_resume_sch_tx(rtwdev, phy_idx, tx_en);
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_DPK, BTC_WRFK_STOP);
@@ -3308,9 +3312,11 @@ void rtw8851b_dpk_track(struct rtw89_dev *rtwdev)
        _dpk_track(rtwdev);
 }
 
-void rtw8851b_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool hwtx_en)
+void rtw8851b_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                  bool hwtx_en, enum rtw89_chanctx_idx chanctx_idx)
 {
-       u8 phy_map = rtw89_btc_phymap(rtwdev, phy, RF_A, RTW89_CHANCTX_0);
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, phy, RF_A, chanctx_idx);
        u8 i;
 
        rtw89_debug(rtwdev, RTW89_DBG_TSSI, "[TSSI] %s: phy=%d\n", __func__, phy);
@@ -3319,26 +3325,26 @@ void rtw8851b_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool hwtx_e
        _tssi_disable(rtwdev, phy);
 
        for (i = RF_PATH_A; i < RF_PATH_NUM_8851B; i++) {
-               _tssi_set_sys(rtwdev, phy, i);
+               _tssi_set_sys(rtwdev, phy, i, chan);
                _tssi_ini_txpwr_ctrl_bb(rtwdev, phy, i);
                _tssi_ini_txpwr_ctrl_bb_he_tb(rtwdev, phy, i);
                _tssi_set_dck(rtwdev, phy, i);
-               _tssi_set_tmeter_tbl(rtwdev, phy, i);
+               _tssi_set_tmeter_tbl(rtwdev, phy, i, chan);
                _tssi_set_dac_gain_tbl(rtwdev, phy, i);
-               _tssi_slope_cal_org(rtwdev, phy, i);
-               _tssi_alignment_default(rtwdev, phy, i, true);
+               _tssi_slope_cal_org(rtwdev, phy, i, chan);
+               _tssi_alignment_default(rtwdev, phy, i, true, chan);
                _tssi_set_tssi_slope(rtwdev, phy, i);
        }
 
        _tssi_enable(rtwdev, phy);
-       _tssi_set_efuse_to_de(rtwdev, phy);
+       _tssi_set_efuse_to_de(rtwdev, phy, chan);
 
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_IQK, BTC_WRFK_ONESHOT_STOP);
 }
 
-void rtw8851b_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy)
+void rtw8851b_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                       const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        u8 channel = chan->channel;
        u32 i;
 
@@ -3348,20 +3354,21 @@ void rtw8851b_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy)
        _tssi_disable(rtwdev, phy);
 
        for (i = RF_PATH_A; i < RF_PATH_NUM_8851B; i++) {
-               _tssi_set_sys(rtwdev, phy, i);
-               _tssi_set_tmeter_tbl(rtwdev, phy, i);
-               _tssi_slope_cal_org(rtwdev, phy, i);
-               _tssi_alignment_default(rtwdev, phy, i, true);
+               _tssi_set_sys(rtwdev, phy, i, chan);
+               _tssi_set_tmeter_tbl(rtwdev, phy, i, chan);
+               _tssi_slope_cal_org(rtwdev, phy, i, chan);
+               _tssi_alignment_default(rtwdev, phy, i, true, chan);
        }
 
        _tssi_enable(rtwdev, phy);
-       _tssi_set_efuse_to_de(rtwdev, phy);
+       _tssi_set_efuse_to_de(rtwdev, phy, chan);
 }
 
 static void rtw8851b_tssi_default_txagc(struct rtw89_dev *rtwdev,
-                                       enum rtw89_phy_idx phy, bool enable)
+                                       enum rtw89_phy_idx phy, bool enable,
+                                       enum rtw89_chanctx_idx chanctx_idx)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        u8 channel = chan->channel;
 
        rtw89_debug(rtwdev, RTW89_DBG_RFK, "======> %s   ch=%d\n",
@@ -3379,7 +3386,7 @@ static void rtw8851b_tssi_default_txagc(struct rtw89_dev *rtwdev,
        rtw89_phy_write32_mask(rtwdev, R_P0_TSSI_TRK, B_P0_TSSI_OFT_EN, 0x0);
        rtw89_phy_write32_mask(rtwdev, R_P0_TSSI_TRK, B_P0_TSSI_OFT_EN, 0x1);
 
-       _tssi_alimentk_done(rtwdev, phy, RF_PATH_A);
+       _tssi_alimentk_done(rtwdev, phy, RF_PATH_A, chan);
 
        rtw89_debug(rtwdev, RTW89_DBG_RFK,
                    "======>%s 2 SCAN_END Set 0x5818[7:0]=0x%x\n",
@@ -3391,12 +3398,13 @@ static void rtw8851b_tssi_default_txagc(struct rtw89_dev *rtwdev,
 }
 
 void rtw8851b_wifi_scan_notify(struct rtw89_dev *rtwdev, bool scan_start,
-                              enum rtw89_phy_idx phy_idx)
+                              enum rtw89_phy_idx phy_idx,
+                              enum rtw89_chanctx_idx chanctx_idx)
 {
        if (scan_start)
-               rtw8851b_tssi_default_txagc(rtwdev, phy_idx, true);
+               rtw8851b_tssi_default_txagc(rtwdev, phy_idx, true, chanctx_idx);
        else
-               rtw8851b_tssi_default_txagc(rtwdev, phy_idx, false);
+               rtw8851b_tssi_default_txagc(rtwdev, phy_idx, false, chanctx_idx);
 }
 
 static void _bw_setting(struct rtw89_dev *rtwdev, enum rtw89_rf_path path,
index b66a23d6d36732630579f7f0ca7df3e1bff6c3fc..ea7df628256beda72b66668999524f9dd4098594 100644 (file)
@@ -12,15 +12,21 @@ void rtw8851b_lck_init(struct rtw89_dev *rtwdev);
 void rtw8851b_lck_track(struct rtw89_dev *rtwdev);
 void rtw8851b_rck(struct rtw89_dev *rtwdev);
 void rtw8851b_dack(struct rtw89_dev *rtwdev);
-void rtw8851b_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
-void rtw8851b_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
+void rtw8851b_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                 enum rtw89_chanctx_idx chanctx_idx);
+void rtw8851b_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                    enum rtw89_chanctx_idx chanctx_idx);
 void rtw8851b_dpk_init(struct rtw89_dev *rtwdev);
-void rtw8851b_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
+void rtw8851b_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                 enum rtw89_chanctx_idx chanctx_idx);
 void rtw8851b_dpk_track(struct rtw89_dev *rtwdev);
-void rtw8851b_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool hwtx_en);
-void rtw8851b_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
+void rtw8851b_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                  bool hwtx_en, enum rtw89_chanctx_idx chanctx_idx);
+void rtw8851b_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                       const struct rtw89_chan *chan);
 void rtw8851b_wifi_scan_notify(struct rtw89_dev *rtwdev, bool scan_start,
-                              enum rtw89_phy_idx phy_idx);
+                              enum rtw89_phy_idx phy_idx,
+                              enum rtw89_chanctx_idx chanctx_idx);
 void rtw8851b_set_channel_rf(struct rtw89_dev *rtwdev,
                             const struct rtw89_chan *chan,
                             enum rtw89_phy_idx phy_idx);