Skip to content

Commit 199c1fd

Browse files
committed
wifi: rtw89: Fix rtw89_mac_power_switch() for USB
JIRA: https://issues.redhat.com/browse/RHEL-114889 commit e2b7160 Author: Bitterblue Smith <rtl8821cerfe2@gmail.com> Date: Mon Jun 30 23:45:55 2025 +0300 wifi: rtw89: Fix rtw89_mac_power_switch() for USB Clear some bits in some registers in order to allow RTL8851BU to power on. This is done both when powering on and when powering off because that's what the vendor driver does. Also tested with RTL8832BU and RTL8832CU. Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/a39da939-d640-4486-ad38-f658f220afc8@gmail.com Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
1 parent 05a6d60 commit 199c1fd

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

drivers/net/wireless/realtek/rtw89/mac.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1440,6 +1440,23 @@ void rtw89_mac_notify_wake(struct rtw89_dev *rtwdev)
14401440
rtw89_mac_send_rpwm(rtwdev, state, true);
14411441
}
14421442

1443+
static void rtw89_mac_power_switch_boot_mode(struct rtw89_dev *rtwdev)
1444+
{
1445+
u32 boot_mode;
1446+
1447+
if (rtwdev->hci.type != RTW89_HCI_TYPE_USB)
1448+
return;
1449+
1450+
boot_mode = rtw89_read32_mask(rtwdev, R_AX_GPIO_MUXCFG, B_AX_BOOT_MODE);
1451+
if (!boot_mode)
1452+
return;
1453+
1454+
rtw89_write32_clr(rtwdev, R_AX_SYS_PW_CTRL, B_AX_APFN_ONMAC);
1455+
rtw89_write32_clr(rtwdev, R_AX_SYS_STATUS1, B_AX_AUTO_WLPON);
1456+
rtw89_write32_clr(rtwdev, R_AX_GPIO_MUXCFG, B_AX_BOOT_MODE);
1457+
rtw89_write32_clr(rtwdev, R_AX_RSV_CTRL, B_AX_R_DIS_PRST);
1458+
}
1459+
14431460
static int rtw89_mac_power_switch(struct rtw89_dev *rtwdev, bool on)
14441461
{
14451462
#define PWR_ACT 1
@@ -1450,6 +1467,8 @@ static int rtw89_mac_power_switch(struct rtw89_dev *rtwdev, bool on)
14501467
int ret;
14511468
u8 val;
14521469

1470+
rtw89_mac_power_switch_boot_mode(rtwdev);
1471+
14531472
if (on) {
14541473
cfg_seq = chip->pwr_on_seq;
14551474
cfg_func = chip->ops->pwr_on_func;

drivers/net/wireless/realtek/rtw89/reg.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@
183183

184184
#define R_AX_SYS_STATUS1 0x00F4
185185
#define B_AX_SEL_0XC0_MASK GENMASK(17, 16)
186+
#define B_AX_AUTO_WLPON BIT(10)
186187
#define B_AX_PAD_HCI_SEL_V2_MASK GENMASK(5, 3)
187188
#define MAC_AX_HCI_SEL_SDIO_UART 0
188189
#define MAC_AX_HCI_SEL_MULTI_USB 1

0 commit comments

Comments
 (0)