OSDN Git Service

Bluetooth: btintel: Collect tlv based active firmware build info in FW mode
authorLokendra Singh <lokendra.singh@intel.com>
Tue, 23 Mar 2021 18:59:03 +0000 (11:59 -0700)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 25 Mar 2021 15:11:06 +0000 (16:11 +0100)
In Operational firmware mode, 'Minimum FW version' TLV ID is not available.
So, we cannot fetch already running firmware info for comparison against
another build. However, It can be collected using a combination of other
TLV ID's information.

Signed-off-by: Lokendra Singh <lokendra.singh@intel.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tested-by: Tedd Ho-Jeong An <tedd.an@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/btintel.c

index 4ddbf89..6442acb 100644 (file)
@@ -537,12 +537,23 @@ int btintel_read_version_tlv(struct hci_dev *hdev, struct intel_version_tlv *ver
                        version->img_type = tlv->val[0];
                        break;
                case INTEL_TLV_TIME_STAMP:
+                       /* If image type is Operational firmware (0x03), then
+                        * running FW Calendar Week and Year information can
+                        * be extracted from Timestamp information
+                        */
+                       version->min_fw_build_cw = tlv->val[0];
+                       version->min_fw_build_yy = tlv->val[1];
                        version->timestamp = get_unaligned_le16(tlv->val);
                        break;
                case INTEL_TLV_BUILD_TYPE:
                        version->build_type = tlv->val[0];
                        break;
                case INTEL_TLV_BUILD_NUM:
+                       /* If image type is Operational firmware (0x03), then
+                        * running FW build number can be extracted from the
+                        * Build information
+                        */
+                       version->min_fw_build_nn = tlv->val[0];
                        version->build_num = get_unaligned_le32(tlv->val);
                        break;
                case INTEL_TLV_SECURE_BOOT: