From 9ebca70139b7210902d26ac42892aa8f42b67412 Mon Sep 17 00:00:00 2001 From: Evgeny Boger Date: Mon, 31 Aug 2026 17:07:04 +0300 Subject: [PATCH 1/2] usb: gadget: composite: report bcdUSB 0x0210 when WebUSB is enabled The WebUSB specification requires a device that carries the WebUSB platform capability descriptor to report bcdUSB >= 0x0210, and Chromium enforces exactly that: its USB service reads the BOS descriptor and the landing page URL only if the device version is at least 2.1.0 (kUsbVersion2_1 = 0x0210 in usb_service_linux.cc and usb_device_win.cc). composite_setup() currently reports bcdUSB 0x0201 for a non-superspeed gadget with cdev->use_webusb set, sharing the branch with LPM-capable gadgets, and ignores the value written to the configfs bcdUSB attribute. Chromium therefore never reads the landing page: the "Go to to connect " notification never appears, which defeats the purpose of the configfs webusb/ interface. Report 0x0210 when WebUSB is in use; keep 0x0201 for the LPM-only case. Verified on a Wiren Board 8 (musb high-speed UDC, kernel 6.8) with Chromium 144 on Linux: with 0x0201 chrome://usb-internals shows "USB Version: 2.0.1" and no landing page; with 0x0210 it shows "USB Version: 2.1.0", "WebUSB Landing Page: " and the plug-in notification is displayed. With webusb/use = 0 the device still reports bcdUSB 2.00 and no BOS, as before. An LLM assistant located the Chromium-side version gate, wrote this patch and the changelog, and ran the on-hardware verification above; the analysis and the result were reviewed by the submitter. Fixes: 93c473948c58 ("usb: gadget: add WebUSB landing page support") Cc: stable@vger.kernel.org Assisted-by: LLM Signed-off-by: Evgeny Boger --- drivers/usb/gadget/composite.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 0ace45b66a31c..7f7579d11843d 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -1838,7 +1838,13 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) cdev->desc.bcdUSB = cpu_to_le16(0x0210); } } else { - if (gadget->lpm_capable || cdev->use_webusb) + /* + * WebUSB requires bcdUSB >= 2.10; Chromium does not + * read the landing page from a device below that. + */ + if (cdev->use_webusb) + cdev->desc.bcdUSB = cpu_to_le16(0x0210); + else if (gadget->lpm_capable) cdev->desc.bcdUSB = cpu_to_le16(0x0201); else cdev->desc.bcdUSB = cpu_to_le16(0x0200); From b400d1e65e601be177995a055be9c0710cc7e995 Mon Sep 17 00:00:00 2001 From: Evgeny Boger Date: Mon, 31 Aug 2026 17:07:04 +0300 Subject: [PATCH 2/2] Bump version --- debian/changelog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/debian/changelog b/debian/changelog index 5bcc84a5b464b..1c0a27e8b8b5f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +linux-wb (6.8.0-wb162) stable; urgency=medium + + * usb: gadget: composite: report bcdUSB 0x0210 when WebUSB is enabled, + so that Chromium reads the WebUSB landing page and shows the + plug-in notification for the Debug Network gadget + + -- Evgeny Boger Mon, 31 Aug 2026 17:04:48 +0300 + linux-wb (6.8.0-wb161) stable; urgency=medium * pinctrl-sunxi: fix output latch corruption on GPIO writes: a write to