[RFC PATCH 2/2] Bluetooth: btrtl: drop the blanket RTL8761B extended scan quirk

Kamil Serwus <[email protected]>
Newsgroups dev.linux.lists.regressions,org.kernel.vger.linux-bluetooth,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Commit 5ead2063611ae5 ("Bluetooth: btrtl: fix RTL8761B/BU broken LE
extended scan") sets HCI_QUIRK_BROKEN_EXT_SCAN for every CHIP_ID_8761B.
It was validated on one dongle, USB 0bda:a728, and it regresses others
that share the chip id but not the firmware bug.

On USB 0bda:8771 (fw 0xdfc6d922) extended scan works flawlessly, while
the legacy scan-disable command the quirk forces makes the controller
stop answering entirely:

  Bluetooth: hci0: command 0x200c tx timeout
  Bluetooth: hci0: Opcode 0x200c failed: -110
  Bluetooth: hci0: Unable to disable scanning: -110
  Bluetooth: hci0: Resetting usb device.

btusb then resets the device, it re-enumerates (hci0 -> hci1 -> hci2)
and every connected BLE device is dropped - here a Kensington SlimBlade
Pro trackball and a Keychron Q8 Max keyboard. Linux 7.1.x, without the
quirk, drives the same dongle with the same firmware for hours without a
single scan error.

Nothing in btrtl can tell the two apart: same project_id, same
ic_id_table entry, same rtl8761bu_fw.bin. They differ only by USB id,
which btrtl_set_quirks() cannot see, and both take their driver_info
from the same generic Realtek entry in btusb's quirks_table, so
driver_info cannot separate them either.

With the previous patch the 0bda:a728 dongle recognises itself on its
first rejected extended scan, so the static guess is no longer needed.

Fixes: 5ead2063611ae ("Bluetooth: btrtl: fix RTL8761B/BU broken LE extended scan")
Signed-off-by: Kamil Serwus <[email protected]>
---
 drivers/bluetooth/btrtl.c | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
index 7f54d2d2d..03fa9409e 100644
--- a/drivers/bluetooth/btrtl.c
+++ b/drivers/bluetooth/btrtl.c
@@ -1343,19 +1343,6 @@ void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev)
 	if (!btrtl_dev->ic_info)
 		return;
 
-	switch (btrtl_dev->project_id) {
-	case CHIP_ID_8761B:
-		/* RTL8761B/BU reports HCI version 5.1 but does not support
-		 * the LE Extended Scan commands (Opcode 0x2042), causing
-		 * repeated -EBUSY failures when BlueZ attempts extended
-		 * scanning while a connection is active.
-		 */
-		hci_set_quirk(hdev, HCI_QUIRK_BROKEN_EXT_SCAN);
-		break;
-	default:
-		break;
-	}
-
 	switch (btrtl_dev->ic_info->lmp_subver) {
 	case RTL_ROM_LMP_8703B:
 		/* 8723CS reports two pages for local ext features,
-- 
2.55.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.