Bluetooth: btusb: fix NXP IW610 composite device handling
Subsystems (2)
PATCH 1/1 Bluetooth: btusb: fix NXP IW610 composite device handling
The NXP IW610 module exposes itself as a composite USB device (0471:0215) with three interfaces: two real Bluetooth HCI interfaces (class 0xe0) and one vendor-specific WiFi interface (class 0xff) used by mwifiex-nxp.
The composite device's whole USB descriptor reports class 0xe0/01/01 (Bluetooth), so btusb_table's generic USB_DEVICE_INFO(0xe0, 0x01, 0x01) entry matches every interface, not just the two real HCI ones -- btusb ends up binding the WiFi interface too, and mwifiex-nxp never gets it.
Fix:
1. In btusb_table (the table the USB core actually matches against), explicitly ignore the WiFi interface via BTUSB_IGNORE, ahead of the generic entry.
2. In quirks_table, scope the existing BTUSB_MARVELL entry to the BT interface class instead of matching the whole device by VID/PID (harmless either way since quirks_table isn't consulted for initial binding, but keep it correct).
Not upstream anywhere: checked NXP's own i.MX kernel fork (nxp-imx/linux-imx), no IW610 references in btusb.c on any branch -- their reference designs wire this chip differently (WiFi over SDIO per their release notes), so they never hit this.
--- drivers/bluetooth/btusb.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
drivers/bluetooth/btusb.c +17 -0
@@ -71,6 +71,15 @@ static struct usb_driver btusb_driver;#define BTUSB_BROKEN_EXT_SCAN BIT(29)static const struct usb_device_id btusb_table[] = { +/* +* NXP IW610 (0471:0215): the composite device reports Bluetooth +* class at the whole-device level, so the generic entry below +* would also match this WiFi vendor interface. Ignore it here +* first so mwifiex-nxp can bind it instead. +*/ + {USB_DEVICE_AND_INTERFACE_INFO (0x0471 ,0x0215 ,0xff ,0xff ,0xff ), + .driver_info =BTUSB_IGNORE }, +/* Generic Bluetooth USB device */ {USB_DEVICE_INFO (0xe0 ,0x01 ,0x01 ) },
@@ -477,6 +486,14 @@ static const struct usb_device_id quirks { USB_DEVICE(0x1286, 0x2046), .driver_info = BTUSB_MARVELL }, { USB_DEVICE(0x1286, 0x204e), .driver_info = BTUSB_MARVELL }, +/* +* NXP IW610 BT interfaces (Marvell-lineage silicon, same quirk as +* the 0x1286 entries above). Scoped to the BT interface class, +* not just VID/PID -- see the btusb_table entry above. +*/ + { USB_DEVICE_AND_INTERFACE_INFO(0x0471, 0x0215, 0xe0, 0x01, 0x01), + .driver_info = BTUSB_MARVELL }, +/* Intel Bluetooth devices */ { USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_COMBINED }, { USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_COMBINED },
--
2.34.1
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/series/1160261/
---Test result---
Test Summary:
CheckPatch FAIL 0.73 seconds VerifyFixes PASS 0.13 seconds VerifySignedoff PASS 0.13 seconds GitLint PASS 0.32 seconds SubjectPrefix PASS 0.12 seconds BuildKernel PASS 30.14 seconds CheckAllWarning PASS 31.31 seconds CheckSparse PASS 30.88 seconds BuildKernel32 PASS 27.34 seconds CheckKernelLLVM SKIP 0.00 seconds TestRunnerSetup PASS 511.12 seconds IncrementalBuild PASS 26.28 seconds
Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script
Output:
Bluetooth: btusb: fix NXP IW610 composite device handling
WARNING: Assisted-by expects 'AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]' format #125:
WARNING: The commit message has 'stable@', perhaps it also needs a 'Fixes:' tag?
total: 0 errors, 2 warnings, 29 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/patch/14798256.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
##############################
Test: CheckKernelLLVM - SKIP
Desc: Build kernel with LLVM + context analysis
Output:
Clang not found
https://github.com/bluez/bluetooth-next/pull/721
---
Regards,
Linux Bluetooth
This patch was applied to bluetooth/bluetooth-next.git (master) by Luiz Augusto von Dentz <[email protected]>:
Hello:
This patch was applied to bluetooth/bluetooth-next.git (master) by Luiz Augusto von Dentz <[email protected]>:
Quoted 11 lines · On Tue, 8 Sep 2026 10:01:08 +0200 you wrote:
The NXP IW610 module exposes itself as a composite USB device (0471:0215) with three interfaces: two real Bluetooth HCI interfaces (class
0xe0) and one vendor-specific WiFi interface (class0xff) used by mwifiex-nxp.The composite device's whole USB descriptor reports class 0xe0/01/01 (Bluetooth), so btusb_table's generic
USB_DEVICE_INFO(0xe0, 0x01, 0x01)entry matches every interface, not just the two real HCI ones -- btusb ends up binding the WiFi interface too, and mwifiex-nxp never gets it.[...]
Here is the summary with links:
- Bluetooth: btusb: fix NXP IW610 composite device handling
https://git.kernel.org/bluetooth/bluetooth-next/c/bd5e3aa5d35a
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html