Shen Mintao 40f1d081e9 fix: sync upstream SUN60IW2P1 USB transfer settings
Disable CONFIG_USB_ALIGN_DATA and enable CONFIG_USB_NO_TRANS_DMA_MAP
when CONFIG_ARCH_SUN60IW2P1 is set, following the upstream USB controller
workaround. Preserve the current defaults on other platforms.

Source: radxa-pkg/aic8800 commit 33f19ba,
fix-usbc1-controller-wifi-rate-of-sun60iw2p1.patch.

Validation: GNU make resolves the expected settings for both platform
branches; Linux 6.14, 6.17 and 7.2 module builds succeeded. No SUN60IW2P1
hardware was available for runtime validation.
2026-09-24 13:25:15 +08:00

AIC8800 Linux Wi-Fi and Bluetooth Driver

This driver supports AIC8800-family chipsets used by devices such as the Tenda U11, AX913B, and TP-Link Archer TX1U Nano.

Legacy MCU revision 1 branch: You are viewing legacy-mcu1. This branch is only for AIC8800D80 or AIC8800DC/DW devices that report chip_id=7, chip_mcu_id=1. It provides complete matched V3 firmware and loader profiles for the D80 upload-limit failure validated in issue #58 and the DC/DW V5 main-application timeout validated in issue #71. Use main for newer chip_mcu_id=0 hardware or when the MCU revision is unknown. See the D80 and DC/DW support notes before installing.

After switching branches, rerun sudo ./install.sh and reboot; switching the Git branch alone does not replace firmware already installed under /lib/firmware.

Added support for devices with Vendor ID 368B (tested).

Tested on Linux kernel 6.16 with Ubuntu 25.04 and 6.1.0.27 with Debian 12.

The same driver supports Wi-Fi-only adapters and Wi-Fi/Bluetooth combo adapters. On combo devices, aic_load_fw uploads the AIC firmware and the standard Linux btusb driver handles the Bluetooth HCI interface. The obsolete custom aic_btusb module is not used.

USB device 368b:8d81 also uses the bundled aic_zlp_quirk companion module. It adds the Bluetooth ACL bulk TX zero-length-packet behavior validated in issue #63, while leaving the distribution's original btusb.ko installed and bound to the device. The quirk is filtered to that VID:PID and fails closed when the required kernel probe support is unavailable.

Note

Maintained branches: This repository now maintains only main and legacy-mcu1. You are viewing the branch for chip_mcu_id=1; do not switch this hardware to the former separate bluetooth branch, which is retired. Wi-Fi, the kernel's standard btusb Bluetooth path, and the device-scoped 368b:8d81 ZLP support are integrated here. The ZLP module remains inactive on other VID:PID combinations.

Disclaimer

I did not develop this software, The code is sourced from the Tenda U11 driver. I only made some modifications to the code to adapt it to newer kernel versions. Apart from compilation issues, I am unable to address other problems.

Attention

Before installing the driver, delete all aic8800-related folders under /lib/firmware. Using an incorrect firmware version may cause the system to freeze.

Pandora 88M80 mode switching

Pandora 88M80 adapters that initially appear as USB device 1111:1111 are automatically switched to a69c:8d80 by sending the required F3 then F2 commands. Existing users must rerun sudo ./install.sh to replace the installed usb_modeswitch configuration, then unplug the adapter completely and plug it back in.

If automatic switching does not occur, try the same sequence manually:

sudo usb_modeswitch -v 1111 -p 1111 \
  -M "555342438765432100000000000010fd0000000000000000000000000000f3" \
  -2 "555342438765432100000000000010fd0000000000000000000000000000f2"

This only addresses switching from 1111:1111 to a69c:8d80. If the device has reached a69c:8d80 but firmware startup still fails, see issue #79.

Installation Steps

Method 2: Manual Installation

Copy udev rules:

Copy the aic.rules file to /usr/lib/udev/rules.d/:

sudo cp aic.rules /usr/lib/udev/rules.d/

Copy firmware:

Copy the firmware directories from ./fw to /lib/firmware/:

sudo cp -r ./fw/aic8800* /lib/firmware/

Navigate to the driver directory:

Change to the drivers/aic8800 directory:

cd ./drivers/aic8800

Compile and Install the Driver:

First, compile the driver:

make

Then, install the driver:

sudo make install

For any kernel updates, you'll need to reinstall the driver:

make clean
make
sudo make install

Load the Driver

After installation, load the driver with the following command:

sudo modprobe aic8800_fdrv

Verify the Module is Active

Check if the module is loaded correctly:

lsmod | grep aic

You should see output similar to:

aic8800_fdrv    536576  0
cfg80211        1146880 1   aic8800_fdrv
aic_load_fw     69632   1   aic8800_fdrv
usbcore         348160  10  xhci_hcd,ehci_pci,usbhid,usb_storage,ehci_hcd,xhci_pci,uas,aic_load_fw,uhci_hcd,aic8800_fdrv

After that, plug in your USB wireless network card.

Verify Wi-Fi Device is Active

To check if the Wi-Fi interface is recognized, run:

iwconfig

If the device is still not active, check the kernel logs for any errors related to the driver:

sudo dmesg

Bluetooth on Combo Adapters

Bluetooth support does not require a separate AIC transport module. After aic_load_fw initializes a combo adapter, the kernel automatically binds its Bluetooth interface to btusb. A Wi-Fi-only adapter does not expose that interface, so the Bluetooth path remains inactive.

Verify the expected modules and controller with:

lsmod | grep -E 'aic_load_fw|aic8800_fdrv|aic_zlp_quirk|btusb'
lsusb -t
bluetoothctl list

To scan after a controller appears:

bluetoothctl
power on
scan on

If Bluetooth is missing or reports HCI timeouts, run the read-only diagnostic script and attach its output together with the current boot log:

chmod +x diagnose_bt.sh
sudo ./diagnose_bt.sh
sudo journalctl -k -b --no-pager

The installer removes active references to the retired aic_btusb integration. It does not force-load btusb or globally change the Bluetooth rfkill state; normal kernel device matching and the user's system policy remain in control.

For 368b:8d81, verify the ZLP hook and its injection counter while Bluetooth traffic is active:

cat /sys/module/aic_zlp_quirk/parameters/hook
cat /sys/module/aic_zlp_quirk/parameters/injections

The Wi-Fi-reset recovery behavior tracked in issue #53 remains a known limitation: after an airplane-mode or hotspot reset, Bluetooth may require a physical unplug/replug of the adapter.

S
Description
No description provided
Readme
7.9 MiB
Languages
C 97.2%
Shell 1.9%
Makefile 0.9%