Skip to content

Commit c1dacaf

Browse files
svenpeter42marcan
authored andcommitted
Bluetooth: Add quirk to disable extended scanning
Broadcom 4377 controllers found in Apple x86 Macs with the T2 chip claim to support extended scanning when querying supported states, < HCI Command: LE Read Supported St.. (0x08|0x001c) plen 0 Rust-for-Linux#27 [hci0] 2.971839 > HCI Event: Command Complete (0x0e) plen 12 Rust-for-Linux#28 [hci0] 2.972730 LE Read Supported States (0x08|0x001c) ncmd 1 Status: Success (0x00) States: 0x000003ffffffffff [...] LE Set Extended Scan Parameters (Octet 37 - Bit 5) LE Set Extended Scan Enable (Octet 37 - Bit 6) [...] , but then fail to actually implement the extended scanning: < HCI Command: LE Set Extended Sca.. (0x08|0x0041) plen 8 Rust-for-Linux#105 [hci0] 5.460776 Own address type: Random (0x01) Filter policy: Accept all advertisement (0x00) PHYs: 0x01 Entry 0: LE 1M Type: Active (0x01) Interval: 11.250 msec (0x0012) Window: 11.250 msec (0x0012) > HCI Event: Command Complete (0x0e) plen 4 Rust-for-Linux#106 [hci0] 5.461777 LE Set Extended Scan Parameters (0x08|0x0041) ncmd 1 Status: Unknown HCI Command (0x01) Signed-off-by: Sven Peter <sven@svenpeter.dev>
1 parent 9745530 commit c1dacaf

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

include/net/bluetooth/hci.h

+10
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,16 @@ enum {
285285
* during the hdev->setup vendor callback.
286286
*/
287287
HCI_QUIRK_FIXUP_LE_EXT_ADV_REPORT_EVT_TYPE,
288+
289+
/*
290+
* When this quirk is set, the HCI_OP_LE_SET_EXT_SCAN_ENABLE command is
291+
* disabled. This is required for some Broadcom controllers which
292+
* erroneously claim to support extended scanning.
293+
*
294+
* This quirk can be set before hci_register_dev is called or
295+
* during the hdev->setup vendor callback.
296+
*/
297+
HCI_QUIRK_BROKEN_EXT_SCAN,
288298
};
289299

290300
/* HCI device flags */

include/net/bluetooth/hci_core.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -1501,7 +1501,9 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
15011501

15021502
/* Use ext scanning if set ext scan param and ext scan enable is supported */
15031503
#define use_ext_scan(dev) (((dev)->commands[37] & 0x20) && \
1504-
((dev)->commands[37] & 0x40))
1504+
((dev)->commands[37] & 0x40) && \
1505+
!test_bit(HCI_QUIRK_BROKEN_EXT_SCAN, &(dev)->quirks))
1506+
15051507
/* Use ext create connection if command is supported */
15061508
#define use_ext_conn(dev) ((dev)->commands[37] & 0x80)
15071509

0 commit comments

Comments
 (0)