Hello, sorry for my english.
I wanted to buy myself AWUS036ACH, but I see that it has problems with the drivers.
I compared the source code of the versions: master (4.3.20), 4.3.21 and 5.1.5
I drank vodka and found a difference that can be responsible for usb2 / 3
This is in the file os_dep \ linux \ usb_intf.c
Perhaps this is due to a malfunction in usb3, please write this in to the developers, because my English is bad. Suka blyad.


Code:
MASTER 4.3.20

static int usb_reprobe_to_usb3(PADAPTER Adapter)
{
	struct registry_priv  *registry_par = &Adapter->registrypriv;
	int ret = _FALSE;
	
	if (registry_par->switch_usb3 == _TRUE) {


		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)));
		}



	}
	return ret;
}


4.3.20

static int usb_reprobe_to_usb3(PADAPTER Adapter)
{
	struct registry_priv  *registry_par = &Adapter->registrypriv;
	u8 ret = _FALSE;



#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
	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
	return ret;
}


5.1.5

static int usb_reprobe_switch_usb_mode(PADAPTER Adapter)
{
	struct registry_priv *registry_par = &Adapter->registrypriv;
	HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
	u8 ret = _FALSE;

	/* efuse not allow driver to switch usb mode */
	if (pHalData->EEPROMUsbSwitch == _FALSE)
		goto exit;

	/* registry not allow driver to switch usb mode */
	if (registry_par->switch_usb_mode == 0)
		goto exit;


















	rtw_hal_set_hwreg(Adapter, HW_VAR_USB_MODE, &ret);

exit:

	return ret;
}