From: Tedd Ho-Jeong An Date: Thu, 5 Aug 2021 00:32:18 +0000 (-0700) Subject: Bluetooth: btintel: Fix the legacy bootloader returns tlv based version X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=c86c7285bb087b709e31f46e1aedeebb7e2a40d7;p=linux.git Bluetooth: btintel: Fix the legacy bootloader returns tlv based version From the ThP, it supports both legacy and TLV based HCI_Intel_Read_Version command after downloading the operational firmware, and it causes the driver to choose the wrong setup routines and missing firmware/ddc file. So, as a workaround, this patch checks the fw variant from the TLV based version, and if the device is legacy bootloader device, the legacy HCI_Intel_Read_Version command is used to get the legacy version information and run the legacy bootloader setup with it. Signed-off-by: Tedd Ho-Jeong An Signed-off-by: Marcel Holtmann --- diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index 4f0ba6031c571..2941d33d0bc21 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -2312,6 +2312,27 @@ static int btintel_setup_combined(struct hci_dev *hdev) * along. */ switch (INTEL_HW_VARIANT(ver_tlv.cnvi_bt)) { + case 0x11: /* JfP */ + case 0x12: /* ThP */ + case 0x13: /* HrP */ + case 0x14: /* CcP */ + /* Some legacy bootloader devices from JfP supports both old + * and TLV based HCI_Intel_Read_Version command. But we don't + * want to use the TLV based setup routines for those legacy + * bootloader device. + * + * Also, it is not easy to convert TLV based version from the + * legacy version format. + * + * So, as a workaround for those devices, use the legacy + * HCI_Intel_Read_Version to get the version information and + * run the legacy bootloader setup. + */ + err = btintel_read_version(hdev, &ver); + if (err) + return err; + err = btintel_bootloader_setup(hdev, &ver); + break; case 0x17: case 0x18: case 0x19: