From 40bb3f82b40dffca1ea482f0be0f3799249fae10 Mon Sep 17 00:00:00 2001 From: xuxinchun1003 Date: Wed, 7 Oct 2026 01:48:49 +0800 Subject: [PATCH 1/2] usb: add TP-Link AIC8800DC (2357:0147) device support Both maintained branches ship no binding for this PID: the TP entries in aicwf_usb_id_table cover 0x014b (Mercury) and 0x014e only, and aicwf_usb_chipmatch only matches pid == 0x88dc for the DC family, so the device is ignored by the interface table and rejected by chipmatch even if force-bound. - add USB_PRODUCT_ID_TP_AIC8800DC (0x0147) - match it in aicwf_usb_id_table and in aicwf_usb_chipmatch (DC chipid) Verified on legacy-mcu1 @ b7a476c (arch1-2 kernel7.2.8, VFIO lab): clean baseline probe shows BIND=NONE (no driver claims 1-10); with this commit the interface binds and the issue71 loader profile boots the chip (Firmware Version: zh Aug 08 2022 ... gcf79227 -> wlan0 created). --- drivers/aic8800/aic8800_fdrv/aicwf_usb.c | 5 +++++ drivers/aic8800/aic8800_fdrv/aicwf_usb.h | 1 + 2 files changed, 6 insertions(+) diff --git a/drivers/aic8800/aic8800_fdrv/aicwf_usb.c b/drivers/aic8800/aic8800_fdrv/aicwf_usb.c index c25171b..2fa52bd 100644 --- a/drivers/aic8800/aic8800_fdrv/aicwf_usb.c +++ b/drivers/aic8800/aic8800_fdrv/aicwf_usb.c @@ -2367,6 +2367,10 @@ static int aicwf_usb_chipmatch(struct aic_usb_dev *usb_dev, u16_l vid, u16_l pid } AICWFDBG(LOGINFO, "%s USE AIC8800D89X2\r\n", __func__); return 0; + } else if (pid == USB_PRODUCT_ID_TP_AIC8800DC) { + usb_dev->chipid = PRODUCT_ID_AIC8800DC; + AICWFDBG(LOGINFO, "%s USE AIC8800DC (TP-Link 0x0147)\r\n", __func__); + return 0; } else if ((pid == USB_PRODUCT_ID_AIC8800D80N) || (pid == USB_PRODUCT_ID_AIC8800D80LN) || (pid == USB_PRODUCT_ID_AIC8800D80WN) || @@ -2680,6 +2684,7 @@ static struct usb_device_id aicwf_usb_id_table[] = { {USB_DEVICE(USB_VENDOR_ID_AIC_V2, USB_PRODUCT_ID_AIC8800M80_CUS8)}, {USB_DEVICE(USB_VENDOR_ID_AIC_V2, USB_PRODUCT_ID_AIC8800D80_UGREEN)}, {USB_DEVICE(USB_VENDOR_ID_TP, USB_PRODUCT_ID_MERCURY)}, + {USB_DEVICE(USB_VENDOR_ID_TP, USB_PRODUCT_ID_TP_AIC8800DC)}, {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_ID_TP, USB_PRODUCT_ID_TP, 0xff, 0xff, 0xff)}, #endif {} diff --git a/drivers/aic8800/aic8800_fdrv/aicwf_usb.h b/drivers/aic8800/aic8800_fdrv/aicwf_usb.h index 0ed15f0..9076fd0 100644 --- a/drivers/aic8800/aic8800_fdrv/aicwf_usb.h +++ b/drivers/aic8800/aic8800_fdrv/aicwf_usb.h @@ -24,6 +24,7 @@ #define USB_PRODUCT_ID_TP 0x014e #define USB_PRODUCT_ID_MERCURY 0x014b #define USB_PRODUCT_ID_FAST 0x014f +#define USB_PRODUCT_ID_TP_AIC8800DC 0x0147 #define USB_PRODUCT_ID_TENDA_U11 0x001f #define USB_PRODUCT_ID_TENDA_U11_PRO 0x0020 From 6f7b4725e2a664dadf2b9cc3bb56299be7d8c2fd Mon Sep 17 00:00:00 2001 From: xuxinchun1003 Date: Wed, 7 Oct 2026 07:41:29 +0800 Subject: [PATCH 2/2] docs: document tested TP-Link 2357:0147 unit and scope MCU-revision claims Per review: distinguish the tested hardware revision (this unit: chip_id=7, chip_sub_id=1, chip_mcu_id=1) from any assumption that every device with this VID/PID is MCU1. The ID-table entry only routes to the DC path; mcu gating is runtime. --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 2ee22d6..8417a52 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,15 @@ This driver supports AIC8800-family chipsets used by devices such as the Tenda U Added support for devices with Vendor ID 368B (tested). +> [!NOTE] +> **Tested `2357:0147` hardware (this branch):** TP-Link AIC8800DC USB WiFi, +> `chip_id=7`, `chip_sub_id=1`, `chip_mcu_id=1` (MCU revision of *this unit*, +> readback `0x40500000 = 0x09078818`; firmware `zh Aug 08 2022 … gcf79227`). +> The USB-ID entry itself is MCU-revision-agnostic (routing to the DC path; +> mcu gating happens at runtime), but **other units sold under the same +> VID/PID may be a different MCU revision** — check the driver log against +> the branch-selection note above. + 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