lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 343/717] Bluetooth: btusb: Fix detection of some fake CSR controllers with a bcdDevice val of 0x0134
    Date
    From: Hans de Goede <hdegoede@redhat.com>

    [ Upstream commit d74e0ae7e03032b47b8631cc1e52a7ae1ce988c0 ]

    Commit cde1a8a99287 ("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: cde1a8a99287 ("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>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/bluetooth/btusb.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
    index a9981678199d7..80468745d5c5e 100644
    --- a/drivers/bluetooth/btusb.c
    +++ b/drivers/bluetooth/btusb.c
    @@ -1763,6 +1763,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;
    @@ -1832,6 +1834,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...");

    --
    2.27.0


    \
     
     \ /
      Last update: 2020-12-28 15:19    [W:4.128 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site