mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
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. Signed-off-by: Nicolas Thibert <nithibert@gmail.com> Cc: stable@vger.kernel.org Assisted-by: LLM (Claude Sonnet 5, Anthropic) Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
parent
83a945a529
commit
2b50adefed
|
|
@ -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_table[] = {
|
|||
{ 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 },
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user