2021-12-14 07:32:19

by Tedd Ho-Jeong An

[permalink] [raw]
Subject: [PATCH] Bluetooth: btintel: Add missing quirks and msft ext for legacy bootloader

From: Tedd Ho-Jeong An <[email protected]>

This patch add missing HCI quirks and MSFT extension for legacy
bootloader when it is running in the operational firmware.

Signed-off-by: Tedd Ho-Jeong An <[email protected]>
---
drivers/bluetooth/btintel.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
index 8f9109b40961..e1f96df847b8 100644
--- a/drivers/bluetooth/btintel.c
+++ b/drivers/bluetooth/btintel.c
@@ -2498,10 +2498,14 @@ static int btintel_setup_combined(struct hci_dev *hdev)
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.
+ /* Some legacy bootloader devices starting from JfP,
+ * the operational firmware supports both old and TLV based
+ * HCI_Intel_Read_Version command based on the command
+ * parameter.
+ *
+ * For upgrading firmware case, the TLV based version cannot
+ * be used because the firmware filename for legacy bootloader
+ * is based on the old format.
*
* Also, it is not easy to convert TLV based version from the
* legacy version format.
@@ -2513,6 +2517,20 @@ static int btintel_setup_combined(struct hci_dev *hdev)
err = btintel_read_version(hdev, &ver);
if (err)
return err;
+
+ /* Apply the device specific HCI quirks
+ *
+ * All Legacy bootloader devices support WBS
+ */
+ set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
+
+ /* Valid LE States quirk for JfP/ThP familiy */
+ if (ver.hw_variant == 0x11 || ver.hw_variant == 0x12)
+ set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks);
+
+ /* Setup MSFT Extension support */
+ btintel_set_msft_opcode(hdev, ver.hw_variant);
+
err = btintel_bootloader_setup(hdev, &ver);
break;
case 0x17:
--
2.25.1



2021-12-15 22:58:42

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: btintel: Add missing quirks and msft ext for legacy bootloader

Hi Tedd,

On Tue, Dec 14, 2021 at 3:14 AM Tedd Ho-Jeong An <[email protected]> wrote:
>
> From: Tedd Ho-Jeong An <[email protected]>
>
> This patch add missing HCI quirks and MSFT extension for legacy
> bootloader when it is running in the operational firmware.
>
> Signed-off-by: Tedd Ho-Jeong An <[email protected]>
> ---
> drivers/bluetooth/btintel.c | 26 ++++++++++++++++++++++----
> 1 file changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
> index 8f9109b40961..e1f96df847b8 100644
> --- a/drivers/bluetooth/btintel.c
> +++ b/drivers/bluetooth/btintel.c
> @@ -2498,10 +2498,14 @@ static int btintel_setup_combined(struct hci_dev *hdev)
> 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.
> + /* Some legacy bootloader devices starting from JfP,
> + * the operational firmware supports both old and TLV based
> + * HCI_Intel_Read_Version command based on the command
> + * parameter.
> + *
> + * For upgrading firmware case, the TLV based version cannot
> + * be used because the firmware filename for legacy bootloader
> + * is based on the old format.
> *
> * Also, it is not easy to convert TLV based version from the
> * legacy version format.
> @@ -2513,6 +2517,20 @@ static int btintel_setup_combined(struct hci_dev *hdev)
> err = btintel_read_version(hdev, &ver);
> if (err)
> return err;
> +
> + /* Apply the device specific HCI quirks
> + *
> + * All Legacy bootloader devices support WBS
> + */
> + set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
> +
> + /* Valid LE States quirk for JfP/ThP familiy */
> + if (ver.hw_variant == 0x11 || ver.hw_variant == 0x12)
> + set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks);
> +
> + /* Setup MSFT Extension support */
> + btintel_set_msft_opcode(hdev, ver.hw_variant);
> +
> err = btintel_bootloader_setup(hdev, &ver);
> break;
> case 0x17:
> --
> 2.25.1

Applied, thanks.

--
Luiz Augusto von Dentz