Hi, Some level of testings were done and sharing the results: Tests executed: 1. Loading firmware 2. Remove device (unplug USB) 3. Reboot 4. Cold boot 5. Scan and connect 6. Connect Mouse (HID) 7. Connect Speaker (A2DP) 8. Connect Headset (HFP) Device firmwares: TIP from the linux-firmware tree commit: 168452e ("Merge tag 'iwlwifi-fw-2021-07-19' of ...") BlueZ: 5.53 on Ubuntu 20.04.2 LTS Devices tested: Legacy ROM: StP, SdP Legacy Bootloader: SfP, WsP, ThP, ThP2, CcP TLV Bootloader: GfP Results: All devices passed the tests. Regards, Tedd On Tue, 2021-07-27 at 16:51 -0700, Tedd Ho-Jeong An wrote: > From: Tedd Ho-Jeong An <tedd.an@xxxxxxxxx> > > This patch set refactors the multiple setup routines for various Intel devices > to a combined single entry. Here are the highlight of the changes: > > 0. Sync with the current tip of the master: > acd5aea400 ("Bluetooth: btusb: Add valid le states quirk") > > 1. Updated hci_alloc_dev() to allocate the hdev object with an extra buffer > for the private data. btintel introduces the btintel_data struct and > store it to the private data in hdev object. > > 2. Added a single entry for setup and shutdown and uses the > HCI_Intel_Read_Version command to identify the device, instead of > relying on the USB VID and PID. > > Also, it uses the new format of HCI_Intel_Read_Version command for > legacy ROM and legacy bootloader devices. Luckly legacy devices > support the new format. > > 3. Keep the state of bootloader in btintel object. The bootloader state > is agnostic to the transport type, so btintel uses the btintel_data > to keep track of the state in the private data section in hdev. > > 4. After identifying the setup type for the device, it uses the > correspond setup routines based on the setup type, and the setup > routines were moved from btusb to btintel. > However, actual work for the setup routines were not changed or very > minimal. > > 5. Since many functions were moved from btusb to btintel, clean up the > exported functions and make them static if possible. > > 6. From the JfP/ThP, the operational firmware support the new TLV based > HCI_Intel_Read_Version command, which confues the usage during the > setup routine. So, the check for firmware variant of those legacy > bootloader sku is added to use the legacy bootloader setup call. > > Tedd Ho-Jeong An (11): > Bluetooth: Add support hdev to allocate private data > Bluetooth: btintel: Add combined setup and shutdown functions > Bluetooth: btintel: Refactoring setup routine for legacy ROM sku > Bluetooth: btintel: Add btintel data struct > Bluetooth: btintel: Fix the first HCI command not work with ROM > device. > Bluetooth: btintel: Fix the LED is not turning off immediately > Bluetooth: btintel: Add combined set_diag functions > Bluetooth: btintel: Refactoring setup routine for legacy bootloader > Bluetooth: btintel: Refactoring setup routine for TLV based booloader > Bluetooth: btintel: Clean the exported function to static > Bluetooth: btintel: Fix the legacy bootloader returns tlv based > version > > drivers/bluetooth/bfusb.c | 2 +- > drivers/bluetooth/bluecard_cs.c | 2 +- > drivers/bluetooth/bpa10x.c | 2 +- > drivers/bluetooth/bt3c_cs.c | 2 +- > drivers/bluetooth/btintel.c | 1214 ++++++++++++++++++++++++++++-- > drivers/bluetooth/btintel.h | 83 +- > drivers/bluetooth/btmrvl_main.c | 2 +- > drivers/bluetooth/btmtksdio.c | 2 +- > drivers/bluetooth/btmtkuart.c | 2 +- > drivers/bluetooth/btqcomsmd.c | 2 +- > drivers/bluetooth/btrsi.c | 2 +- > drivers/bluetooth/btsdio.c | 2 +- > drivers/bluetooth/btusb.c | 1105 ++------------------------- > drivers/bluetooth/dtl1_cs.c | 2 +- > drivers/bluetooth/hci_ldisc.c | 2 +- > drivers/bluetooth/hci_serdev.c | 2 +- > drivers/bluetooth/hci_vhci.c | 2 +- > drivers/bluetooth/virtio_bt.c | 2 +- > include/net/bluetooth/hci_core.h | 7 +- > net/bluetooth/hci_core.c | 11 +- > 20 files changed, 1262 insertions(+), 1188 deletions(-) >