From: Yan-Hsuan Chuang <[email protected]>

We could fail to power on because it was already on. If the return
value is -EALREADY, power off and then power on again to turn on the
hardware as expected.

Signed-off-by: Yan-Hsuan Chuang <[email protected]>
---
 drivers/net/wireless/realtek/rtw88/mac.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw88/mac.c 
b/drivers/net/wireless/realtek/rtw88/mac.c
index 25a923b..fc14b37 100644
--- a/drivers/net/wireless/realtek/rtw88/mac.c
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
@@ -285,8 +285,14 @@ int rtw_mac_power_on(struct rtw_dev *rtwdev)
                goto err;
 
        ret = rtw_mac_power_switch(rtwdev, true);
-       if (ret)
+       if (ret == -EALREADY) {
+               rtw_mac_power_switch(rtwdev, false);
+               ret = rtw_mac_power_switch(rtwdev, true);
+               if (ret)
+                       goto err;
+       } else if (ret) {
                goto err;
+       }
 
        ret = rtw_mac_init_system_cfg(rtwdev);
        if (ret)
-- 
2.7.4

Reply via email to