Allow CFG80211_VERSION to select wireless API signatures independently of the target kernel. Keep native kernel builds on their existing version checks. Also guard the WEXT-only label and replace overlapping firmware path formatting with bounded appends so OpenWrt builds pass with Werror. Validated all three modules against OpenWrt Linux 6.12.94 with backports 6.18.26, plus native 6.11, 6.17 and 7.2 headers. Refs #94.
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 reportchip_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. Usemainfor newerchip_mcu_id=0hardware or when the MCU revision is unknown. See the D80 and DC/DW support notes before installing.After switching branches, rerun
sudo ./install.shand 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
mainandlegacy-mcu1. You are viewing the branch forchip_mcu_id=1; do not switch this hardware to the former separatebluetoothbranch, which is retired. Wi-Fi, the kernel's standardbtusbBluetooth path, and the device-scoped368b:8d81ZLP 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 1: Quick Installation (Recommended)
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.