Bluetooth: hci_intel: Fix firmware file name to use hw_variant
authorTedd Ho-Jeong An <tedd.an@intel.com>
Mon, 6 Mar 2017 23:38:32 +0000 (15:38 -0800)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 12 Apr 2017 20:02:37 +0000 (22:02 +0200)
The format of Intel Bluetooth firmware for bootloader product is
ibt-<hw_variant>-<device_revision_id>.sfi and .ddc.

This patch uses a hw_variant value read from the device during
runtime to form the firmware filenames instead of using a constant
value, so it can support multiple prouducts.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/hci_intel.c

index bfd718c58d996baa0fef968b840e907db8728ccd..71d0850fab1072b8d0c01fcc26dd227f5a4279bf 100644 (file)
@@ -704,11 +704,14 @@ static int intel_setup(struct hci_uart *hu)
        /* With this Intel bootloader only the hardware variant and device
         * revision information are used to select the right firmware.
         *
-        * Currently this bootloader support is limited to hardware variant
-        * iBT 3.0 (LnP/SfP) which is identified by the value 11 (0x0b).
+        * The firmware filename is ibt-<hw_variant>-<dev_revid>.sfi.
+        *
+        * Currently the supported hardware variants are:
+        *   11 (0x0b) for iBT 3.0 (LnP/SfP)
         */
-       snprintf(fwname, sizeof(fwname), "intel/ibt-11-%u.sfi",
-                le16_to_cpu(params->dev_revid));
+       snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi",
+               le16_to_cpu(ver.hw_variant),
+               le16_to_cpu(params->dev_revid));
 
        err = request_firmware(&fw, fwname, &hdev->dev);
        if (err < 0) {
@@ -721,8 +724,9 @@ static int intel_setup(struct hci_uart *hu)
        bt_dev_info(hdev, "Found device firmware: %s", fwname);
 
        /* Save the DDC file name for later */
-       snprintf(fwname, sizeof(fwname), "intel/ibt-11-%u.ddc",
-                le16_to_cpu(params->dev_revid));
+       snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.ddc",
+               le16_to_cpu(ver.hw_variant),
+               le16_to_cpu(params->dev_revid));
 
        kfree_skb(skb);