Page MenuHomeFreeBSD

Initial cut at Intel AX210 bluetooth support
Needs ReviewPublic

Authored by shurd on Fri, Apr 19, 3:46 AM.
Tags
None
Referenced Files
Unknown Object (File)
Tue, May 14, 9:10 PM
Unknown Object (File)
Sun, May 5, 7:03 AM
Unknown Object (File)
Sun, May 5, 7:02 AM
Unknown Object (File)
Wed, May 1, 8:50 PM
Unknown Object (File)
Wed, May 1, 8:50 PM
Unknown Object (File)
Wed, May 1, 8:50 PM
Unknown Object (File)
Wed, May 1, 8:50 PM
Unknown Object (File)
Wed, May 1, 8:45 PM

Details

Reviewers
adrian
Summary

This allows loading the firmware and attaching the driver. I haven't yet managed to pair with aything.

Test Plan

Will test with BT stuff I have laying around.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 57211
Build 54099: arc lint + arc unit

Event Timeline

shurd requested review of this revision.Fri, Apr 19, 3:46 AM
shurd retitled this revision from Initial work... doesn't. to Initial cut at Intel AX210 bluetooth support.Fri, Apr 19, 3:48 AM
shurd edited the summary of this revision. (Show Details)
shurd edited the test plan for this revision. (Show Details)

Tested with Google Pixel Buds A... with virtual_oss, pairs and right channel works.

  • Retry reset command up to twice.
  • Add macros for TLV types

Going on vacation for a couple weeks, and will look at this again when I get back... adding adrian@ as a reviewer, feel free to add more appropriate reviewers as actionable feedback will be welcome when I return.

I wonder if that'll support a lot more than just AX210?

With minor modifications and updated comms/iwmbtfw it works with AX211.

diff --git a/sys/netgraph/bluetooth/drivers/ubt/ng_ubt_intel.c b/sys/netgraph/bluetooth/drivers/ubt/ng_ubt_intel.c
index 058b9137dd8e..ecaa06c2d21e 100644
--- a/sys/netgraph/bluetooth/drivers/ubt/ng_ubt_intel.c
+++ b/sys/netgraph/bluetooth/drivers/ubt/ng_ubt_intel.c
@@ -99,8 +99,9 @@ static const STRUCT_USB_HOST_ID ubt_intel_devs[] =
 	{ USB_VPI(USB_VENDOR_INTEL2, 0x0025, UBT_INTEL_DEVICE_8260) },
 	{ USB_VPI(USB_VENDOR_INTEL2, 0x0026, UBT_INTEL_DEVICE_8260) },
 	{ USB_VPI(USB_VENDOR_INTEL2, 0x0029, UBT_INTEL_DEVICE_8260) },
-	/* Intel AX210 */
+	/* Intel AX210, AX211 */
 	{ USB_VPI(USB_VENDOR_INTEL2, 0x0032, UBT_INTEL_DEVICE_TLV) },
+	{ USB_VPI(USB_VENDOR_INTEL2, 0x0033, UBT_INTEL_DEVICE_TLV) },
 };
 
 /*
diff --git a/usr.sbin/bluetooth/iwmbtfw/iwmbtfw.8 b/usr.sbin/bluetooth/iwmbtfw/iwmbtfw.8
index 700108ac8379..d47f9e91ae0f 100644
--- a/usr.sbin/bluetooth/iwmbtfw/iwmbtfw.8
+++ b/usr.sbin/bluetooth/iwmbtfw/iwmbtfw.8
@@ -28,7 +28,7 @@
 .Os
 .Sh NAME
 .Nm iwmbtfw
-.Nd firmware download utility for Intel Wireless 7260/8260/8265/AX210 chip based Bluetooth
+.Nd firmware download utility for Intel Wireless 7260/8260/8265/AX210/AX211 chip based Bluetooth
 USB devices
 .Sh SYNOPSIS
 .Nm
@@ -45,7 +45,7 @@ device.
 .Pp
 This utility will
 .Em only
-work with Intel Wireless 7260/8260/8265/AX210 chip based Bluetooth USB devices and some of
+work with Intel Wireless 7260/8260/8265/AX210/AX211 chip based Bluetooth USB devices and some of
 their successors.
 The identification is currently based on USB vendor ID/product ID pair.
 The vendor ID should be 0x8087
diff --git a/usr.sbin/bluetooth/iwmbtfw/iwmbtfw.conf b/usr.sbin/bluetooth/iwmbtfw/iwmbtfw.conf
index 77ed79e8458e..070aa0b4c20d 100644
--- a/usr.sbin/bluetooth/iwmbtfw/iwmbtfw.conf
+++ b/usr.sbin/bluetooth/iwmbtfw/iwmbtfw.conf
@@ -6,6 +6,6 @@ notify 100 {
 	match "subsystem"	"DEVICE";
 	match "type"		"ATTACH";
 	match "vendor"		"0x8087";
-	match "product"		"(0x07dc|0x0a2a|0x0aa7|0x0a2b|0x0aaa|0x0025|0x0026|0x0029|0x0032)";
+	match "product"		"(0x07dc|0x0a2a|0x0aa7|0x0a2b|0x0aaa|0x0025|0x0026|0x0029|0x0032|0x0033)";
 	action "/usr/sbin/iwmbtfw -d $cdev -f /usr/local/share/iwmbt-firmware";
 };
diff --git a/usr.sbin/bluetooth/iwmbtfw/main.c b/usr.sbin/bluetooth/iwmbtfw/main.c
index 662967f090c1..caf6924228e9 100644
--- a/usr.sbin/bluetooth/iwmbtfw/main.c
+++ b/usr.sbin/bluetooth/iwmbtfw/main.c
@@ -77,6 +77,7 @@ static struct iwmbt_devid iwmbt_list_82xx[] = {
 static struct iwmbt_devid iwmbt_list_tlv[] = {
 
 	{ .vendor_id = 0x8087, .product_id = 0x0032 },
+	{ .vendor_id = 0x8087, .product_id = 0x0033 },
 
 };
 
@@ -718,6 +719,8 @@ main(int argc, char *argv[])
 		switch (ver.hw_variant) {
 			case 0x17:
 				break;
+			case 0x18:
+				break;
 			default:
 				iwmbt_err("unknown hw_variant 0x%02x", (int) ver.hw_variant);
 				goto shutdown;