@@ -1338,6 +1338,9 @@ static void rtw89_mac_send_rpwm(struct rtw89_dev *rtwdev,
{
u16 request;
+ if (rtwdev->hci.type == RTW89_HCI_TYPE_USB)
+ return;
+
spin_lock_bh(&rtwdev->rpwm_lock);
request = rtw89_read16(rtwdev, R_AX_RPWM);
@@ -56,6 +56,9 @@ static void rtw89_ps_power_mode_change_with_hci(struct rtw89_dev *rtwdev,
static void rtw89_ps_power_mode_change(struct rtw89_dev *rtwdev, bool enter)
{
+ if (rtwdev->hci.type == RTW89_HCI_TYPE_USB)
+ return;
+
if (rtwdev->chip->low_power_hci_modes & BIT(rtwdev->ps_mode) &&
!test_bit(RTW89_FLAG_WOWLAN, rtwdev->flags))
rtw89_ps_power_mode_change_with_hci(rtwdev, enter);
Disable rtw89_ps_power_mode_change() and rtw89_mac_send_rpwm() for USB because they are called in atomic context and accessing hardware registers results in "scheduling while atomic" errors. Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> --- drivers/net/wireless/realtek/rtw89/mac.c | 3 +++ drivers/net/wireless/realtek/rtw89/ps.c | 3 +++ 2 files changed, 6 insertions(+)