From 795489ce9fc42d2033ed1c4bee1663525a58f415 Mon Sep 17 00:00:00 2001 From: evilphish Date: Sat, 21 Oct 2017 01:07:45 +0200 Subject: [PATCH] fix USB3 modeswitch --- os_dep/linux/usb_intf.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/os_dep/linux/usb_intf.c b/os_dep/linux/usb_intf.c index 25a80e2..0fc63b6 100644 --- a/os_dep/linux/usb_intf.c +++ b/os_dep/linux/usb_intf.c @@ -658,14 +658,32 @@ static int usb_reprobe_switch_usb_mode(PADAPTER Adapter) u8 ret = _FALSE; /* efuse not allow driver to switch usb mode */ - //if (pHalData->EEPROMUsbSwitch == _FALSE) - // goto exit; + if (pHalData->EEPROMUsbSwitch == _FALSE) + goto exit; /* registry not allow driver to switch usb mode */ if (registry_par->switch_usb_mode == 0) goto exit; +#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8814A) + if (IS_HIGH_SPEED_USB(Adapter)) { + if ((rtw_read8(Adapter, 0x74) & (BIT(2)|BIT(3))) != BIT(3)) { + rtw_write8(Adapter, 0x74, 0x8); + rtw_write8(Adapter, 0x70, 0x2); + rtw_write8(Adapter, 0x3e, 0x1); + rtw_write8(Adapter, 0x3d, 0x3); + /* usb disconnect */ + rtw_write8(Adapter, 0x5, 0x80); + ret = _TRUE; + } + + } else if (IS_SUPER_SPEED_USB(Adapter)) { + rtw_write8(Adapter, 0x70, rtw_read8(Adapter, 0x70) & (~BIT(1))); + rtw_write8(Adapter, 0x3e, rtw_read8(Adapter, 0x3e) & (~BIT(0))); + } +#else rtw_hal_set_hwreg(Adapter, HW_VAR_USB_MODE, &ret); +#endif exit: return ret;