forked from Minki/linux
Bluetooth: btusb: Fix detection of some fake CSR controllers with a bcdDevice val of 0x0134
Commitcde1a8a992
("Bluetooth: btusb: Fix and detect most of the Chinese Bluetooth controllers") made the detection of fake controllers more generic fixing it for much of the newer fakes / clones. But this does not work for a fake CSR controller with a bcdDevice value of 0x0134, which was correctly identified as fake before this change. Add an extra check for this special case, checking for a combination of a bcdDevice value of 0x0134, together with a lmp_subver of 0x0c5c and a hci_ver of BLUETOOTH_VER_2_0. The chip inside this fake dongle is marked as with "clockwise cw6629d". Fixes:cde1a8a992
("Bluetooth: btusb: Fix and detect most of the Chinese Bluetooth controllers") Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
parent
dce0a4be80
commit
d74e0ae7e0
@ -1789,6 +1789,8 @@ static int btusb_setup_bcm92035(struct hci_dev *hdev)
|
||||
|
||||
static int btusb_setup_csr(struct hci_dev *hdev)
|
||||
{
|
||||
struct btusb_data *data = hci_get_drvdata(hdev);
|
||||
u16 bcdDevice = le16_to_cpu(data->udev->descriptor.bcdDevice);
|
||||
struct hci_rp_read_local_version *rp;
|
||||
struct sk_buff *skb;
|
||||
bool is_fake = false;
|
||||
@ -1858,6 +1860,12 @@ static int btusb_setup_csr(struct hci_dev *hdev)
|
||||
le16_to_cpu(rp->hci_ver) > BLUETOOTH_VER_4_0)
|
||||
is_fake = true;
|
||||
|
||||
/* Other clones which beat all the above checks */
|
||||
else if (bcdDevice == 0x0134 &&
|
||||
le16_to_cpu(rp->lmp_subver) == 0x0c5c &&
|
||||
le16_to_cpu(rp->hci_ver) == BLUETOOTH_VER_2_0)
|
||||
is_fake = true;
|
||||
|
||||
if (is_fake) {
|
||||
bt_dev_warn(hdev, "CSR: Unbranded CSR clone detected; adding workarounds...");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user