mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
Bluetooth: Add new quirk for broken set random RPA timeout for ATS2851
The ATS2851 based controller advertises support for command "LE Set Random Private Address Timeout" but does not actually implement it, impeding the controller initialization. Add the quirk HCI_QUIRK_BROKEN_SET_RPA_TIMEOUT to unblock the controller initialization. < HCI Command: LE Set Resolvable Private... (0x08|0x002e) plen 2 Timeout: 900 seconds > HCI Event: Command Status (0x0f) plen 4 LE Set Resolvable Private Address Timeout (0x08|0x002e) ncmd 1 Status: Unknown HCI Command (0x01) Co-developed-by: imoc <wzj9912@gmail.com> Signed-off-by: imoc <wzj9912@gmail.com> Signed-off-by: Raul Cheleguini <raul.cheleguini@gmail.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
parent
c09b80be6f
commit
91b6d02ddc
@ -4149,6 +4149,7 @@ static int btusb_probe(struct usb_interface *intf,
|
||||
/* Support is advertised, but not implemented */
|
||||
set_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks);
|
||||
set_bit(HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER, &hdev->quirks);
|
||||
set_bit(HCI_QUIRK_BROKEN_SET_RPA_TIMEOUT, &hdev->quirks);
|
||||
set_bit(HCI_QUIRK_BROKEN_EXT_SCAN, &hdev->quirks);
|
||||
}
|
||||
|
||||
|
@ -301,6 +301,14 @@ enum {
|
||||
* don't actually support features declared there.
|
||||
*/
|
||||
HCI_QUIRK_BROKEN_LOCAL_EXT_FEATURES_PAGE_2,
|
||||
|
||||
/*
|
||||
* When this quirk is set, the HCI_OP_LE_SET_RPA_TIMEOUT command is
|
||||
* skipped during initialization. This is required for the Actions
|
||||
* Semiconductor ATS2851 based controllers, which erroneously claims
|
||||
* to support it.
|
||||
*/
|
||||
HCI_QUIRK_BROKEN_SET_RPA_TIMEOUT,
|
||||
};
|
||||
|
||||
/* HCI device flags */
|
||||
|
@ -4093,7 +4093,8 @@ static int hci_le_set_rpa_timeout_sync(struct hci_dev *hdev)
|
||||
{
|
||||
__le16 timeout = cpu_to_le16(hdev->rpa_timeout);
|
||||
|
||||
if (!(hdev->commands[35] & 0x04))
|
||||
if (!(hdev->commands[35] & 0x04) ||
|
||||
test_bit(HCI_QUIRK_BROKEN_SET_RPA_TIMEOUT, &hdev->quirks))
|
||||
return 0;
|
||||
|
||||
return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_RPA_TIMEOUT,
|
||||
@ -4553,6 +4554,9 @@ static const struct {
|
||||
"HCI Set Event Filter command not supported."),
|
||||
HCI_QUIRK_BROKEN(ENHANCED_SETUP_SYNC_CONN,
|
||||
"HCI Enhanced Setup Synchronous Connection command is "
|
||||
"advertised, but not supported."),
|
||||
HCI_QUIRK_BROKEN(SET_RPA_TIMEOUT,
|
||||
"HCI LE Set Random Private Address Timeout command is "
|
||||
"advertised, but not supported.")
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user