From: Ping-Ke Shih <pkshih@realtek.com>
To: <linux-wireless@vger.kernel.org>
Cc: <leo.li@realtek.com>, <gary.chang@realtek.com>,
<echuang@realtek.com>, <wenjie.tsai@realtek.com>,
<phhuang@realtek.com>, <isaiah@realtek.com>,
<kevin_yang@realtek.com>, <mh_chen@realtek.com>
Subject: [PATCH rtw-next 15/16] wifi: rtw89: chan: introduce new helper to get entity current configuration
Date: Mon, 20 Apr 2026 11:40:50 +0800 [thread overview]
Message-ID: <20260420034051.17666-16-pkshih@realtek.com> (raw)
In-Reply-To: <20260420034051.17666-1-pkshih@realtek.com>
From: Zong-Zhe Yang <kevin_yang@realtek.com>
The original helper can only queries target channel, but cannot determine
current role's status, e.g. is it MLD or not. These things should be a set.
Adding more and more helpers to query them individually without synchronous
doesn't seem right. Introduce a new helper to query current channel set and
role status.
Besides, when single channel, e.g. MLO_2_PLUS_0_1RF and MLO_0_PLUS_2_1RF,
the target channel pointer will be duplicated to fill the returned channel
set. So, some callers can save trivial things for these cases. The returned
channels will be non-NULL, so callers don't need trivial NULL check either.
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
drivers/net/wireless/realtek/rtw89/chan.c | 90 +++++++++++--------
drivers/net/wireless/realtek/rtw89/chan.h | 21 ++---
drivers/net/wireless/realtek/rtw89/core.c | 20 ++---
drivers/net/wireless/realtek/rtw89/phy.c | 12 ++-
drivers/net/wireless/realtek/rtw89/phy_be.c | 8 +-
.../net/wireless/realtek/rtw89/rtw8852b_rfk.c | 6 +-
.../wireless/realtek/rtw89/rtw8852bt_rfk.c | 6 +-
drivers/net/wireless/realtek/rtw89/rtw8922a.c | 17 +---
.../net/wireless/realtek/rtw89/rtw8922a_rfk.c | 22 +----
drivers/net/wireless/realtek/rtw89/rtw8922d.c | 30 +++++--
.../net/wireless/realtek/rtw89/rtw8922d_rfk.c | 22 +----
11 files changed, 129 insertions(+), 125 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw89/chan.c b/drivers/net/wireless/realtek/rtw89/chan.c
index ceb399fc2b94..cd846cb81f0c 100644
--- a/drivers/net/wireless/realtek/rtw89/chan.c
+++ b/drivers/net/wireless/realtek/rtw89/chan.c
@@ -398,43 +398,6 @@ static u8 rtw89_entity_role_get_index(struct rtw89_dev *rtwdev)
}
}
-const struct rtw89_chan *__rtw89_mgnt_chan_get(struct rtw89_dev *rtwdev,
- const char *caller_message,
- u8 link_index, bool nullchk)
-{
- struct rtw89_hal *hal = &rtwdev->hal;
- struct rtw89_entity_mgnt *mgnt = &hal->entity_mgnt;
- enum rtw89_chanctx_idx chanctx_idx;
- u8 role_index;
-
- lockdep_assert_wiphy(rtwdev->hw->wiphy);
-
- if (unlikely(link_index >= __RTW89_MLD_MAX_LINK_NUM)) {
- WARN(1, "link index %u is invalid (max link inst num: %d)\n",
- link_index, __RTW89_MLD_MAX_LINK_NUM);
- goto dflt;
- }
-
- role_index = rtw89_entity_role_get_index(rtwdev);
-
- chanctx_idx = mgnt->chanctx_tbl[role_index][link_index];
- if (chanctx_idx == RTW89_CHANCTX_IDLE)
- goto dflt;
-
- return rtw89_chan_get(rtwdev, chanctx_idx);
-
-dflt:
- if (unlikely(nullchk))
- return NULL;
-
- rtw89_debug(rtwdev, RTW89_DBG_CHAN,
- "%s (%s): prefetch NULL on link index %u\n",
- __func__, caller_message ?: "", link_index);
-
- return rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
-}
-EXPORT_SYMBOL(__rtw89_mgnt_chan_get);
-
bool rtw89_entity_check_hw(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
{
switch (rtwdev->mlo_dbcc_mode) {
@@ -457,6 +420,59 @@ void rtw89_entity_force_hw(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
rtw89_debug(rtwdev, RTW89_DBG_CHAN, "%s: (none)\n", __func__);
}
+void rtw89_entity_get_conf(struct rtw89_dev *rtwdev, struct rtw89_entity_conf *conf)
+{
+ struct rtw89_entity_mgnt *mgnt = &rtwdev->hal.entity_mgnt;
+ enum rtw89_chanctx_idx idxes[ARRAY_SIZE(conf->chans)];
+ struct rtw89_vif *role;
+ u8 ridx;
+ int i;
+
+ lockdep_assert_wiphy(rtwdev->hw->wiphy);
+
+ memset(conf, 0, sizeof(*conf));
+
+ ridx = rtw89_entity_role_get_index(rtwdev);
+ role = mgnt->active_roles[ridx];
+ if (role) {
+ struct ieee80211_vif *vif = rtwvif_to_vif(role);
+
+ conf->is_mld = ieee80211_vif_is_mld(vif);
+ conf->en_emlsr = role->mlo_mode == RTW89_MLO_MODE_EMLSR;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(idxes); i++)
+ idxes[i] = RTW89_CHANCTX_IDLE;
+
+ switch (rtwdev->mlo_dbcc_mode) {
+ default:
+ case MLO_2_PLUS_0_1RF:
+ set_bit(0, conf->hw_bitmap);
+ idxes[0] = mgnt->chanctx_tbl[ridx][0];
+ idxes[1] = idxes[0];
+ break;
+ case MLO_0_PLUS_2_1RF:
+ set_bit(1, conf->hw_bitmap);
+ idxes[1] = mgnt->chanctx_tbl[ridx][1];
+ idxes[0] = idxes[1];
+ break;
+ case MLO_1_PLUS_1_1RF:
+ set_bit(0, conf->hw_bitmap);
+ set_bit(1, conf->hw_bitmap);
+ idxes[0] = mgnt->chanctx_tbl[ridx][0];
+ idxes[1] = mgnt->chanctx_tbl[ridx][1];
+ break;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(idxes); i++) {
+ if (idxes[i] == RTW89_CHANCTX_IDLE)
+ idxes[i] = RTW89_CHANCTX_0;
+
+ conf->chans[i] = rtw89_chan_get(rtwdev, idxes[i]);
+ }
+}
+EXPORT_SYMBOL(rtw89_entity_get_conf);
+
static enum rtw89_mlo_dbcc_mode
rtw89_entity_sel_mlo_dbcc_mode(struct rtw89_dev *rtwdev, u8 active_hws)
{
diff --git a/drivers/net/wireless/realtek/rtw89/chan.h b/drivers/net/wireless/realtek/rtw89/chan.h
index c797cda2e763..a9a5f1b307a2 100644
--- a/drivers/net/wireless/realtek/rtw89/chan.h
+++ b/drivers/net/wireless/realtek/rtw89/chan.h
@@ -116,6 +116,13 @@ struct rtw89_entity_weight {
unsigned int active_roles;
};
+struct rtw89_entity_conf {
+ bool is_mld;
+ bool en_emlsr;
+ DECLARE_BITMAP(hw_bitmap, __RTW89_MLD_MAX_LINK_NUM);
+ const struct rtw89_chan *chans[__RTW89_MLD_MAX_LINK_NUM];
+};
+
static inline bool rtw89_get_entity_state(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx)
{
@@ -168,6 +175,7 @@ void rtw89_entity_init(struct rtw89_dev *rtwdev);
enum rtw89_entity_mode rtw89_entity_recalc(struct rtw89_dev *rtwdev);
bool rtw89_entity_check_hw(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
void rtw89_entity_force_hw(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
+void rtw89_entity_get_conf(struct rtw89_dev *rtwdev, struct rtw89_entity_conf *conf);
void rtw89_chanctx_work(struct wiphy *wiphy, struct wiphy_work *work);
void rtw89_queue_chanctx_work(struct rtw89_dev *rtwdev);
void rtw89_queue_chanctx_change(struct rtw89_dev *rtwdev,
@@ -180,19 +188,6 @@ void rtw89_chanctx_pause(struct rtw89_dev *rtwdev,
void rtw89_chanctx_proceed(struct rtw89_dev *rtwdev,
const struct rtw89_chanctx_cb_parm *cb_parm);
-const struct rtw89_chan *__rtw89_mgnt_chan_get(struct rtw89_dev *rtwdev,
- const char *caller_message,
- u8 link_index, bool nullchk);
-
-#define rtw89_mgnt_chan_get(rtwdev, link_index) \
- __rtw89_mgnt_chan_get(rtwdev, __func__, link_index, false)
-
-static inline const struct rtw89_chan *
-rtw89_mgnt_chan_get_or_null(struct rtw89_dev *rtwdev, u8 link_index)
-{
- return __rtw89_mgnt_chan_get(rtwdev, NULL, link_index, true);
-}
-
struct rtw89_mcc_links_info {
struct rtw89_vif_link *links[NUM_OF_RTW89_MCC_ROLES];
};
diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c
index 41eefe901ab2..aeeba52b8c5e 100644
--- a/drivers/net/wireless/realtek/rtw89/core.c
+++ b/drivers/net/wireless/realtek/rtw89/core.c
@@ -474,16 +474,16 @@ static void __rtw89_core_set_chip_txpwr(struct rtw89_dev *rtwdev,
void rtw89_core_set_chip_txpwr(struct rtw89_dev *rtwdev)
{
- const struct rtw89_chan *chan;
+ struct rtw89_entity_conf conf;
+
+ rtw89_entity_get_conf(rtwdev, &conf);
- chan = rtw89_mgnt_chan_get(rtwdev, 0);
- __rtw89_core_set_chip_txpwr(rtwdev, chan, RTW89_PHY_0);
+ __rtw89_core_set_chip_txpwr(rtwdev, conf.chans[0], RTW89_PHY_0);
if (rtwdev->chip->chip_gen == RTW89_CHIP_AX)
return;
- chan = rtw89_mgnt_chan_get(rtwdev, 1);
- __rtw89_core_set_chip_txpwr(rtwdev, chan, RTW89_PHY_1);
+ __rtw89_core_set_chip_txpwr(rtwdev, conf.chans[1], RTW89_PHY_1);
}
void rtw89_chip_rfk_channel(struct rtw89_dev *rtwdev,
@@ -562,7 +562,7 @@ static void __rtw89_set_channel(struct rtw89_dev *rtwdev,
int rtw89_set_channel(struct rtw89_dev *rtwdev)
{
- const struct rtw89_chan *chan;
+ struct rtw89_entity_conf conf;
enum rtw89_entity_mode mode;
mode = rtw89_entity_recalc(rtwdev);
@@ -571,14 +571,14 @@ int rtw89_set_channel(struct rtw89_dev *rtwdev)
return -EINVAL;
}
- chan = rtw89_mgnt_chan_get(rtwdev, 0);
- __rtw89_set_channel(rtwdev, chan, RTW89_MAC_0, RTW89_PHY_0);
+ rtw89_entity_get_conf(rtwdev, &conf);
+
+ __rtw89_set_channel(rtwdev, conf.chans[0], RTW89_MAC_0, RTW89_PHY_0);
if (rtwdev->chip->chip_gen == RTW89_CHIP_AX)
return 0;
- chan = rtw89_mgnt_chan_get(rtwdev, 1);
- __rtw89_set_channel(rtwdev, chan, RTW89_MAC_1, RTW89_PHY_1);
+ __rtw89_set_channel(rtwdev, conf.chans[1], RTW89_MAC_1, RTW89_PHY_1);
return 0;
}
diff --git a/drivers/net/wireless/realtek/rtw89/phy.c b/drivers/net/wireless/realtek/rtw89/phy.c
index 5065326d8c53..45c31ef45198 100644
--- a/drivers/net/wireless/realtek/rtw89/phy.c
+++ b/drivers/net/wireless/realtek/rtw89/phy.c
@@ -6839,11 +6839,15 @@ static void rtw89_phy_dig_update_rssi_info(struct rtw89_dev *rtwdev,
static void rtw89_phy_dig_update_para(struct rtw89_dev *rtwdev,
struct rtw89_bb_ctx *bb)
{
- const struct rtw89_chan *chan = rtw89_mgnt_chan_get(rtwdev, bb->phy_idx);
struct rtw89_dig_info *dig = &bb->dig;
bool is_linked = rtwdev->total_sta_assoc > 0;
+ struct rtw89_entity_conf conf;
+ const struct rtw89_chan *chan;
const u16 *fa_th_src = NULL;
+ rtw89_entity_get_conf(rtwdev, &conf);
+ chan = conf.chans[bb->phy_idx];
+
switch (chan->band_type) {
case RTW89_BAND_2G:
dig->lna_gain = dig->lna_gain_g;
@@ -7173,14 +7177,18 @@ static void rtw89_phy_dig_dyn_pd_th(struct rtw89_dev *rtwdev,
struct rtw89_bb_ctx *bb,
u8 rssi, bool enable)
{
- const struct rtw89_chan *chan = rtw89_mgnt_chan_get(rtwdev, bb->phy_idx);
const struct rtw89_dig_regs *dig_regs = rtwdev->chip->dig_regs;
struct rtw89_dig_info *dig = &bb->dig;
struct rtw89_hal *hal = &rtwdev->hal;
u8 final_rssi, under_region = dig->pd_low_th_ofst;
+ struct rtw89_entity_conf conf;
+ const struct rtw89_chan *chan;
s8 cck_cca_th;
u32 pd_val;
+ rtw89_entity_get_conf(rtwdev, &conf);
+ chan = conf.chans[bb->phy_idx];
+
if (hal->disabled_dm_bitmap & BIT(RTW89_DM_DIG_PD)) {
pd_val = hal->fixed_dig_pd_th;
diff --git a/drivers/net/wireless/realtek/rtw89/phy_be.c b/drivers/net/wireless/realtek/rtw89/phy_be.c
index 929fac1b10d2..25f1b068daa2 100644
--- a/drivers/net/wireless/realtek/rtw89/phy_be.c
+++ b/drivers/net/wireless/realtek/rtw89/phy_be.c
@@ -865,6 +865,7 @@ static void rtw89_phy_bb_wrap_tx_rfsi_ctrl_init(struct rtw89_dev *rtwdev,
{
enum rtw89_phy_idx phy_idx = mac_idx != RTW89_MAC_0 ? RTW89_PHY_1 : RTW89_PHY_0;
enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id;
+ struct rtw89_entity_conf conf;
const struct rtw89_chan *chan;
if (chip_id != RTL8922D)
@@ -879,9 +880,10 @@ static void rtw89_phy_bb_wrap_tx_rfsi_ctrl_init(struct rtw89_dev *rtwdev,
rtw89_phy_bb_wrap_set_rfsi_ct_opt(rtwdev, phy_idx);
- chan = rtw89_mgnt_chan_get(rtwdev, phy_idx);
- if (chan)
- rtw89_phy_bb_wrap_set_rfsi_bandedge_ch(rtwdev, chan, phy_idx);
+ rtw89_entity_get_conf(rtwdev, &conf);
+ chan = conf.chans[phy_idx];
+
+ rtw89_phy_bb_wrap_set_rfsi_bandedge_ch(rtwdev, chan, phy_idx);
}
static void rtw89_phy_bb_wrap_ul_pwr(struct rtw89_dev *rtwdev)
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852b_rfk.c b/drivers/net/wireless/realtek/rtw89/rtw8852b_rfk.c
index 70b1515c00fa..0d443edfe259 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852b_rfk.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852b_rfk.c
@@ -4167,11 +4167,15 @@ void rtw8852b_set_channel_rf(struct rtw89_dev *rtwdev,
void rtw8852b_mcc_get_ch_info(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
{
- const struct rtw89_chan *chan = rtw89_mgnt_chan_get(rtwdev, 0);
struct rtw89_rfk_mcc_info_data *rfk_mcc = rtwdev->rfk_mcc.data;
struct rtw89_rfk_chan_desc desc[__RTW89_RFK_CHS_NR_V0] = {};
+ struct rtw89_entity_conf conf;
+ const struct rtw89_chan *chan;
u8 idx;
+ rtw89_entity_get_conf(rtwdev, &conf);
+ chan = conf.chans[0];
+
for (idx = 0; idx < ARRAY_SIZE(desc); idx++) {
struct rtw89_rfk_chan_desc *p = &desc[idx];
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852bt_rfk.c b/drivers/net/wireless/realtek/rtw89/rtw8852bt_rfk.c
index 961b26ba2d3c..433807e712e4 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852bt_rfk.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852bt_rfk.c
@@ -4234,11 +4234,15 @@ void rtw8852bt_set_channel_rf(struct rtw89_dev *rtwdev,
void rtw8852bt_mcc_get_ch_info(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
{
- const struct rtw89_chan *chan = rtw89_mgnt_chan_get(rtwdev, 0);
struct rtw89_rfk_mcc_info_data *rfk_mcc = rtwdev->rfk_mcc.data;
struct rtw89_rfk_chan_desc desc[__RTW89_RFK_CHS_NR_V0] = {};
+ struct rtw89_entity_conf conf;
+ const struct rtw89_chan *chan;
u8 idx;
+ rtw89_entity_get_conf(rtwdev, &conf);
+ chan = conf.chans[0];
+
for (idx = 0; idx < ARRAY_SIZE(desc); idx++) {
struct rtw89_rfk_chan_desc *p = &desc[idx];
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922a.c b/drivers/net/wireless/realtek/rtw89/rtw8922a.c
index d2ff55b23f95..ca6c24c6a153 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8922a.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8922a.c
@@ -1860,7 +1860,7 @@ static void rtw8922a_digital_pwr_comp(struct rtw89_dev *rtwdev,
static int rtw8922a_ctrl_mlo(struct rtw89_dev *rtwdev, enum rtw89_mlo_dbcc_mode mode)
{
- const struct rtw89_chan *chan0, *chan1;
+ struct rtw89_entity_conf conf;
if (mode == MLO_1_PLUS_1_1RF || mode == DBCC_LEGACY) {
rtw89_phy_write32_mask(rtwdev, R_DBCC, B_DBCC_EN, 0x1);
@@ -1873,19 +1873,10 @@ static int rtw8922a_ctrl_mlo(struct rtw89_dev *rtwdev, enum rtw89_mlo_dbcc_mode
return -EOPNOTSUPP;
}
- if (mode == MLO_1_PLUS_1_1RF) {
- chan0 = rtw89_mgnt_chan_get(rtwdev, 0);
- chan1 = rtw89_mgnt_chan_get(rtwdev, 1);
- } else if (mode == MLO_0_PLUS_2_1RF) {
- chan1 = rtw89_mgnt_chan_get(rtwdev, 1);
- chan0 = chan1;
- } else {
- chan0 = rtw89_mgnt_chan_get(rtwdev, 0);
- chan1 = chan0;
- }
+ rtw89_entity_get_conf(rtwdev, &conf);
- rtw8922a_ctrl_afe_dac(rtwdev, chan0->band_width, RF_PATH_A);
- rtw8922a_ctrl_afe_dac(rtwdev, chan1->band_width, RF_PATH_B);
+ rtw8922a_ctrl_afe_dac(rtwdev, conf.chans[0]->band_width, RF_PATH_A);
+ rtw8922a_ctrl_afe_dac(rtwdev, conf.chans[1]->band_width, RF_PATH_B);
rtw89_phy_write32_mask(rtwdev, R_EMLSR, B_EMLSR_PARM, 0x6180);
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922a_rfk.c b/drivers/net/wireless/realtek/rtw89/rtw8922a_rfk.c
index 98f14b31cf52..1e2b563f2bca 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8922a_rfk.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8922a_rfk.c
@@ -278,27 +278,13 @@ static u8 rtw8922a_chlk_reload_sel_tbl(struct rtw89_dev *rtwdev,
static void rtw8922a_chlk_reload(struct rtw89_dev *rtwdev)
{
- const struct rtw89_chan *chan0, *chan1;
+ struct rtw89_entity_conf conf;
u8 s0_tbl, s1_tbl;
- switch (rtwdev->mlo_dbcc_mode) {
- default:
- case MLO_2_PLUS_0_1RF:
- chan0 = rtw89_mgnt_chan_get(rtwdev, 0);
- chan1 = chan0;
- break;
- case MLO_0_PLUS_2_1RF:
- chan1 = rtw89_mgnt_chan_get(rtwdev, 1);
- chan0 = chan1;
- break;
- case MLO_1_PLUS_1_1RF:
- chan0 = rtw89_mgnt_chan_get(rtwdev, 0);
- chan1 = rtw89_mgnt_chan_get(rtwdev, 1);
- break;
- }
+ rtw89_entity_get_conf(rtwdev, &conf);
- s0_tbl = rtw8922a_chlk_reload_sel_tbl(rtwdev, chan0, 0);
- s1_tbl = rtw8922a_chlk_reload_sel_tbl(rtwdev, chan1, 1);
+ s0_tbl = rtw8922a_chlk_reload_sel_tbl(rtwdev, conf.chans[0], 0);
+ s1_tbl = rtw8922a_chlk_reload_sel_tbl(rtwdev, conf.chans[1], 1);
rtw8922a_chlk_ktbl_sel(rtwdev, RF_A, s0_tbl);
rtw8922a_chlk_ktbl_sel(rtwdev, RF_B, s1_tbl);
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922d.c b/drivers/net/wireless/realtek/rtw89/rtw8922d.c
index 564d4baa59e7..f0c9d8661e57 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8922d.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8922d.c
@@ -1943,10 +1943,19 @@ static void rtw8922d_set_digital_pwr_comp(struct rtw89_dev *rtwdev,
static void rtw8922d_digital_pwr_comp(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx)
{
- const struct rtw89_chan *chan0 = rtw89_mgnt_chan_get(rtwdev, 0);
- const struct rtw89_chan *chan1 = rtw89_mgnt_chan_get(rtwdev, 1);
-
- if (rtwdev->mlo_dbcc_mode == MLO_1_PLUS_1_1RF) {
+ const struct rtw89_chan *chan0, *chan1;
+ struct rtw89_entity_conf conf;
+
+ rtw89_entity_get_conf(rtwdev, &conf);
+ chan0 = conf.chans[0];
+ chan1 = conf.chans[1];
+
+ if (conf.en_emlsr) {
+ rtw8922d_set_digital_pwr_comp(rtwdev, chan0, 1, RF_PATH_A, RTW89_PHY_0);
+ rtw8922d_set_digital_pwr_comp(rtwdev, chan0, 1, RF_PATH_B, RTW89_PHY_0);
+ rtw8922d_set_digital_pwr_comp(rtwdev, chan1, 1, RF_PATH_A, RTW89_PHY_1);
+ rtw8922d_set_digital_pwr_comp(rtwdev, chan1, 1, RF_PATH_B, RTW89_PHY_1);
+ } else if (rtwdev->mlo_dbcc_mode == MLO_1_PLUS_1_1RF) {
rtw8922d_set_digital_pwr_comp(rtwdev, chan0, 0, RF_PATH_A, RTW89_PHY_0);
rtw8922d_set_digital_pwr_comp(rtwdev, chan1, 0, RF_PATH_B, RTW89_PHY_1);
} else {
@@ -1958,7 +1967,6 @@ static void rtw8922d_digital_pwr_comp(struct rtw89_dev *rtwdev,
static int rtw8922d_ctrl_mlo(struct rtw89_dev *rtwdev, enum rtw89_mlo_dbcc_mode mode,
bool pwr_comp)
{
- const struct rtw89_chan *chan1;
u32 reg0, reg1;
u8 cck_phy_idx;
@@ -2016,8 +2024,10 @@ static int rtw8922d_ctrl_mlo(struct rtw89_dev *rtwdev, enum rtw89_mlo_dbcc_mode
rtw89_write32_mask(rtwdev, reg0, B_BBWRAP_ELMSR_EN_BE4, 0);
rtw89_write32_mask(rtwdev, reg1, B_BBWRAP_ELMSR_EN_BE4, 0);
} else if ((mode == MLO_1_PLUS_1_1RF) || (mode == DBCC_LEGACY)) {
- chan1 = rtw89_mgnt_chan_get(rtwdev, 1);
- cck_phy_idx = chan1->band_type == RTW89_BAND_2G ?
+ struct rtw89_entity_conf conf;
+
+ rtw89_entity_get_conf(rtwdev, &conf);
+ cck_phy_idx = conf.chans[1]->band_type == RTW89_BAND_2G ?
RTW89_PHY_1 : RTW89_PHY_0;
rtw89_phy_write32_mask(rtwdev, R_SYS_DBCC_BE4,
@@ -2475,9 +2485,11 @@ static void rtw8922d_set_txpwr(struct rtw89_dev *rtwdev,
static void rtw8922d_set_txpwr_ctrl(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx)
{
- const struct rtw89_chan *chan = rtw89_mgnt_chan_get(rtwdev, phy_idx);
+ struct rtw89_entity_conf conf;
- rtw8922d_set_txpwr_ref(rtwdev, chan, phy_idx);
+ rtw89_entity_get_conf(rtwdev, &conf);
+
+ rtw8922d_set_txpwr_ref(rtwdev, conf.chans[phy_idx], phy_idx);
}
static void rtw8922d_ctrl_trx_path(struct rtw89_dev *rtwdev,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922d_rfk.c b/drivers/net/wireless/realtek/rtw89/rtw8922d_rfk.c
index 4e6a8e88a71e..7957f7b2d8e5 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8922d_rfk.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8922d_rfk.c
@@ -187,27 +187,13 @@ static u8 rtw8922d_chlk_reload_sel_tbl(struct rtw89_dev *rtwdev,
static void rtw8922d_chlk_reload(struct rtw89_dev *rtwdev)
{
- const struct rtw89_chan *chan0, *chan1;
+ struct rtw89_entity_conf conf;
u8 s0_tbl, s1_tbl;
- switch (rtwdev->mlo_dbcc_mode) {
- default:
- case MLO_2_PLUS_0_1RF:
- chan0 = rtw89_mgnt_chan_get(rtwdev, 0);
- chan1 = chan0;
- break;
- case MLO_0_PLUS_2_1RF:
- chan1 = rtw89_mgnt_chan_get(rtwdev, 1);
- chan0 = chan1;
- break;
- case MLO_1_PLUS_1_1RF:
- chan0 = rtw89_mgnt_chan_get(rtwdev, 0);
- chan1 = rtw89_mgnt_chan_get(rtwdev, 1);
- break;
- }
+ rtw89_entity_get_conf(rtwdev, &conf);
- s0_tbl = rtw8922d_chlk_reload_sel_tbl(rtwdev, chan0, 0);
- s1_tbl = rtw8922d_chlk_reload_sel_tbl(rtwdev, chan1, 1);
+ s0_tbl = rtw8922d_chlk_reload_sel_tbl(rtwdev, conf.chans[0], 0);
+ s1_tbl = rtw8922d_chlk_reload_sel_tbl(rtwdev, conf.chans[1], 1);
rtw8922d_chlk_ktbl_sel(rtwdev, RF_A, s0_tbl);
rtw8922d_chlk_ktbl_sel(rtwdev, RF_B, s1_tbl);
--
2.25.1
next prev parent reply other threads:[~2026-04-20 3:42 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-20 3:40 [PATCH rtw-next 00/16] wifi: rtw89: add USB IO offload and some refactors Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 01/16] wifi: rtw89: 8922d: fix typo rx_freq_frome_ie Ping-Ke Shih
2026-04-29 5:24 ` Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 02/16] wifi: rtw89: 8852a: refine power save to lower latency Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 03/16] wifi: rtw89: debug: disable hw_scan for latency-sensitive scenarios Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 04/16] wifi: rtw89: debug: disable inactive power save to reduce bus overhead Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 05/16] wifi: rtw89: phy: support static PD level setting Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 06/16] wifi: rtw89: Correct data type for scan index to avoid infinite loop Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 07/16] wifi: rtw89: 8852bt: configure support_noise field explicitly Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 08/16] wifi: rtw89: add IO offload support via firmware Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 09/16] wifi: rtw89: offload DMAC and CMAC init IO to firmware Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 10/16] wifi: rtw89: use firmware offload for PHY and RF batch register writes Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 11/16] wifi: rtw89: 8832cu: Add ID 2c7c:8206 for RTL8832CU Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 12/16] wifi: rtw89: use struct to fill C2H recv ack Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 13/16] wifi: rtw89: check scan C2H event recv ack instead of C2H event done ack Ping-Ke Shih
2026-04-20 3:40 ` [PATCH rtw-next 14/16] wifi: rtw89: suspend DIG when remain-on-channel Ping-Ke Shih
2026-04-20 3:40 ` Ping-Ke Shih [this message]
2026-04-20 3:40 ` [PATCH rtw-next 16/16] wifi: rtw89: 8922d: update RF calibration flow for MLD Ping-Ke Shih
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260420034051.17666-16-pkshih@realtek.com \
--to=pkshih@realtek.com \
--cc=echuang@realtek.com \
--cc=gary.chang@realtek.com \
--cc=isaiah@realtek.com \
--cc=kevin_yang@realtek.com \
--cc=leo.li@realtek.com \
--cc=linux-wireless@vger.kernel.org \
--cc=mh_chen@realtek.com \
--cc=phhuang@realtek.com \
--cc=wenjie.tsai@realtek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.