The power value and enable bit fields can be not consecutive mask, but normally we expect mask argument of rtw89_mac_txpwr_write32_mask() is consecutive bit mask. Therefore, change the code accordingly. Cc: Geert Uytterhoeven Signed-off-by: Ping-Ke Shih --- drivers/net/wireless/realtek/rtw89/mac.h | 20 ++++++++++++++ drivers/net/wireless/realtek/rtw89/rtw8851b.c | 26 +++++-------------- drivers/net/wireless/realtek/rtw89/rtw8852b.c | 26 +++++-------------- drivers/net/wireless/realtek/rtw89/rtw8852c.c | 26 +++++-------------- 4 files changed, 41 insertions(+), 57 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw89/mac.h b/drivers/net/wireless/realtek/rtw89/mac.h index 3cc97fd0c0ec..01a9fb7c9e31 100644 --- a/drivers/net/wireless/realtek/rtw89/mac.h +++ b/drivers/net/wireless/realtek/rtw89/mac.h @@ -1456,6 +1456,26 @@ static inline int rtw89_mac_txpwr_write32_mask(struct rtw89_dev *rtwdev, return 0; } +static inline +void rtw89_mac_write_txpwr_ctrl(struct rtw89_dev *rtwdev, u32 reg, u32 mask, u32 val, + u32 mask_en, bool cond) +{ + u32 wrt = u32_encode_bits(val, mask); + u32 val32; + int ret; + + if (cond) + wrt |= mask_en; + + ret = rtw89_mac_txpwr_read32(rtwdev, RTW89_PHY_0, reg, &val32); + if (ret) + return; + + val32 &= ~(mask | mask_en); + val32 |= wrt; + rtw89_mac_txpwr_write32(rtwdev, RTW89_PHY_0, reg, val32); +} + static inline void rtw89_mac_ctrl_hci_dma_tx(struct rtw89_dev *rtwdev, bool enable) { diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.c b/drivers/net/wireless/realtek/rtw89/rtw8851b.c index 2019f6022cbb..1253c4af2fb2 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8851b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.c @@ -2291,18 +2291,6 @@ rtw8851b_btc_set_wl_txpwr_ctrl(struct rtw89_dev *rtwdev, u32 txpwr_val) union rtw8851b_btc_wl_txpwr_ctrl arg = { .txpwr_val = txpwr_val }; s32 val; -#define __write_ctrl(_reg, _msk, _val, _en, _cond) \ -do { \ - u32 _wrt = FIELD_PREP(_msk, _val); \ - BUILD_BUG_ON(!!(_msk & _en)); \ - if (_cond) \ - _wrt |= _en; \ - else \ - _wrt &= ~_en; \ - rtw89_mac_txpwr_write32_mask(rtwdev, RTW89_PHY_0, _reg, \ - _msk | _en, _wrt); \ -} while (0) - switch (arg.ctrl_all_time) { case 0xffff: val = 0; @@ -2312,9 +2300,10 @@ do { \ break; } - __write_ctrl(R_AX_PWR_RATE_CTRL, B_AX_FORCE_PWR_BY_RATE_VALUE_MASK, - val, B_AX_FORCE_PWR_BY_RATE_EN, - arg.ctrl_all_time != 0xffff); + rtw89_mac_write_txpwr_ctrl(rtwdev, R_AX_PWR_RATE_CTRL, + B_AX_FORCE_PWR_BY_RATE_VALUE_MASK, + val, B_AX_FORCE_PWR_BY_RATE_EN, + arg.ctrl_all_time != 0xffff); switch (arg.ctrl_gnt_bt) { case 0xffff: @@ -2325,10 +2314,9 @@ do { \ break; } - __write_ctrl(R_AX_PWR_COEXT_CTRL, B_AX_TXAGC_BT_MASK, val, - B_AX_TXAGC_BT_EN, arg.ctrl_gnt_bt != 0xffff); - -#undef __write_ctrl + rtw89_mac_write_txpwr_ctrl(rtwdev, R_AX_PWR_COEXT_CTRL, + B_AX_TXAGC_BT_MASK, val, + B_AX_TXAGC_BT_EN, arg.ctrl_gnt_bt != 0xffff); } static diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852b.c b/drivers/net/wireless/realtek/rtw89/rtw8852b.c index 38cd151f8c3f..de02d52150c1 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852b.c @@ -761,18 +761,6 @@ rtw8852b_btc_set_wl_txpwr_ctrl(struct rtw89_dev *rtwdev, u32 txpwr_val) union rtw8852b_btc_wl_txpwr_ctrl arg = { .txpwr_val = txpwr_val }; s32 val; -#define __write_ctrl(_reg, _msk, _val, _en, _cond) \ -do { \ - u32 _wrt = FIELD_PREP(_msk, _val); \ - BUILD_BUG_ON(!!(_msk & _en)); \ - if (_cond) \ - _wrt |= _en; \ - else \ - _wrt &= ~_en; \ - rtw89_mac_txpwr_write32_mask(rtwdev, RTW89_PHY_0, _reg, \ - _msk | _en, _wrt); \ -} while (0) - switch (arg.ctrl_all_time) { case 0xffff: val = 0; @@ -782,9 +770,10 @@ do { \ break; } - __write_ctrl(R_AX_PWR_RATE_CTRL, B_AX_FORCE_PWR_BY_RATE_VALUE_MASK, - val, B_AX_FORCE_PWR_BY_RATE_EN, - arg.ctrl_all_time != 0xffff); + rtw89_mac_write_txpwr_ctrl(rtwdev, R_AX_PWR_RATE_CTRL, + B_AX_FORCE_PWR_BY_RATE_VALUE_MASK, + val, B_AX_FORCE_PWR_BY_RATE_EN, + arg.ctrl_all_time != 0xffff); switch (arg.ctrl_gnt_bt) { case 0xffff: @@ -795,10 +784,9 @@ do { \ break; } - __write_ctrl(R_AX_PWR_COEXT_CTRL, B_AX_TXAGC_BT_MASK, val, - B_AX_TXAGC_BT_EN, arg.ctrl_gnt_bt != 0xffff); - -#undef __write_ctrl + rtw89_mac_write_txpwr_ctrl(rtwdev, R_AX_PWR_COEXT_CTRL, + B_AX_TXAGC_BT_MASK, val, + B_AX_TXAGC_BT_EN, arg.ctrl_gnt_bt != 0xffff); } static const struct rtw89_chip_ops rtw8852b_chip_ops = { diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c index ee81a6792eee..7fd1485d1eb7 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c @@ -2760,18 +2760,6 @@ rtw8852c_btc_set_wl_txpwr_ctrl(struct rtw89_dev *rtwdev, u32 txpwr_val) union rtw8852c_btc_wl_txpwr_ctrl arg = { .txpwr_val = txpwr_val }; s32 val; -#define __write_ctrl(_reg, _msk, _val, _en, _cond) \ -do { \ - u32 _wrt = FIELD_PREP(_msk, _val); \ - BUILD_BUG_ON((_msk & _en) != 0); \ - if (_cond) \ - _wrt |= _en; \ - else \ - _wrt &= ~_en; \ - rtw89_mac_txpwr_write32_mask(rtwdev, RTW89_PHY_0, _reg, \ - _msk | _en, _wrt); \ -} while (0) - switch (arg.ctrl_all_time) { case 0xffff: val = 0; @@ -2781,9 +2769,10 @@ do { \ break; } - __write_ctrl(R_AX_PWR_RATE_CTRL, B_AX_FORCE_PWR_BY_RATE_VALUE_MASK, - val, B_AX_FORCE_PWR_BY_RATE_EN, - arg.ctrl_all_time != 0xffff); + rtw89_mac_write_txpwr_ctrl(rtwdev, R_AX_PWR_RATE_CTRL, + B_AX_FORCE_PWR_BY_RATE_VALUE_MASK, + val, B_AX_FORCE_PWR_BY_RATE_EN, + arg.ctrl_all_time != 0xffff); switch (arg.ctrl_gnt_bt) { case 0xffff: @@ -2794,10 +2783,9 @@ do { \ break; } - __write_ctrl(R_AX_PWR_COEXT_CTRL, B_AX_TXAGC_BT_MASK, val, - B_AX_TXAGC_BT_EN, arg.ctrl_gnt_bt != 0xffff); - -#undef __write_ctrl + rtw89_mac_write_txpwr_ctrl(rtwdev, R_AX_PWR_COEXT_CTRL, + B_AX_TXAGC_BT_MASK, val, + B_AX_TXAGC_BT_EN, arg.ctrl_gnt_bt != 0xffff); } static -- 2.25.1