aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth
diff options
context:
space:
mode:
authorKim, Ben Young Tae <ytkim@qca.qualcomm.com>2015-03-10 19:34:58 -0400
committerMarcel Holtmann <marcel@holtmann.org>2015-03-10 22:57:01 -0400
commitbf906b3db3c2b4f5d4db1db5f35796629c531ac4 (patch)
treee3b5773f6bb1f864aa0c8cdcd7bcab1ab8f47df9 /drivers/bluetooth
parent55e76b38986a61259f3079afd0f9a865651a34fe (diff)
Bluetooth: btusb: Fix incorrect type in qca_device_info
While qca_device_info is not coming from outside communication, no reason to use specific endian type inside and fix the wrong version comparison on big-endian platform. Signed-off-by: Ben Young Tae Kim <ytkim@qca.qualcomm.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r--drivers/bluetooth/btusb.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 08330548f7fe..c34a875aaf60 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2667,10 +2667,10 @@ struct qca_rampatch_version {
2667} __packed; 2667} __packed;
2668 2668
2669struct qca_device_info { 2669struct qca_device_info {
2670 __le32 rom_version; 2670 u32 rom_version;
2671 __u8 rampatch_hdr; /* length of header in rampatch */ 2671 u8 rampatch_hdr; /* length of header in rampatch */
2672 __u8 nvm_hdr; /* length of header in NVM */ 2672 u8 nvm_hdr; /* length of header in NVM */
2673 __u8 ver_offset; /* offset of version structure in rampatch */ 2673 u8 ver_offset; /* offset of version structure in rampatch */
2674}; 2674};
2675 2675
2676static const struct qca_device_info qca_devices_table[] = { 2676static const struct qca_device_info qca_devices_table[] = {
@@ -2782,11 +2782,15 @@ static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
2782{ 2782{
2783 struct qca_rampatch_version *rver; 2783 struct qca_rampatch_version *rver;
2784 const struct firmware *fw; 2784 const struct firmware *fw;
2785 u32 ver_rom, ver_patch;
2786 u16 rver_rom, rver_patch;
2785 char fwname[64]; 2787 char fwname[64];
2786 int err; 2788 int err;
2787 2789
2788 snprintf(fwname, sizeof(fwname), "qca/rampatch_usb_%08x.bin", 2790 ver_rom = le32_to_cpu(ver->rom_version);
2789 le32_to_cpu(ver->rom_version)); 2791 ver_patch = le32_to_cpu(ver->patch_version);
2792
2793 snprintf(fwname, sizeof(fwname), "qca/rampatch_usb_%08x.bin", ver_rom);
2790 2794
2791 err = request_firmware(&fw, fwname, &hdev->dev); 2795 err = request_firmware(&fw, fwname, &hdev->dev);
2792 if (err) { 2796 if (err) {
@@ -2796,14 +2800,16 @@ static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
2796 } 2800 }
2797 2801
2798 BT_INFO("%s: using rampatch file: %s", hdev->name, fwname); 2802 BT_INFO("%s: using rampatch file: %s", hdev->name, fwname);
2803
2799 rver = (struct qca_rampatch_version *)(fw->data + info->ver_offset); 2804 rver = (struct qca_rampatch_version *)(fw->data + info->ver_offset);
2805 rver_rom = le16_to_cpu(rver->rom_version);
2806 rver_patch = le16_to_cpu(rver->patch_version);
2807
2800 BT_INFO("%s: QCA: patch rome 0x%x build 0x%x, firmware rome 0x%x " 2808 BT_INFO("%s: QCA: patch rome 0x%x build 0x%x, firmware rome 0x%x "
2801 "build 0x%x", hdev->name, le16_to_cpu(rver->rom_version), 2809 "build 0x%x", hdev->name, rver_rom, rver_patch, ver_rom,
2802 le16_to_cpu(rver->patch_version), le32_to_cpu(ver->rom_version), 2810 ver_patch);
2803 le32_to_cpu(ver->patch_version));
2804 2811
2805 if (rver->rom_version != ver->rom_version || 2812 if (rver_rom != ver_rom || rver_patch <= ver_patch) {
2806 rver->patch_version <= ver->patch_version) {
2807 BT_ERR("%s: rampatch file version did not match with firmware", 2813 BT_ERR("%s: rampatch file version did not match with firmware",
2808 hdev->name); 2814 hdev->name);
2809 err = -EINVAL; 2815 err = -EINVAL;
@@ -2849,6 +2855,7 @@ static int btusb_setup_qca(struct hci_dev *hdev)
2849{ 2855{
2850 const struct qca_device_info *info = NULL; 2856 const struct qca_device_info *info = NULL;
2851 struct qca_version ver; 2857 struct qca_version ver;
2858 u32 ver_rom;
2852 u8 status; 2859 u8 status;
2853 int i, err; 2860 int i, err;
2854 2861
@@ -2857,13 +2864,14 @@ static int btusb_setup_qca(struct hci_dev *hdev)
2857 if (err < 0) 2864 if (err < 0)
2858 return err; 2865 return err;
2859 2866
2867 ver_rom = le32_to_cpu(ver.rom_version);
2860 for (i = 0; i < ARRAY_SIZE(qca_devices_table); i++) { 2868 for (i = 0; i < ARRAY_SIZE(qca_devices_table); i++) {
2861 if (ver.rom_version == qca_devices_table[i].rom_version) 2869 if (ver_rom == qca_devices_table[i].rom_version)
2862 info = &qca_devices_table[i]; 2870 info = &qca_devices_table[i];
2863 } 2871 }
2864 if (!info) { 2872 if (!info) {
2865 BT_ERR("%s: don't support firmware rome 0x%x", hdev->name, 2873 BT_ERR("%s: don't support firmware rome 0x%x", hdev->name,
2866 le32_to_cpu(ver.rom_version)); 2874 ver_rom);
2867 return -ENODEV; 2875 return -ENODEV;
2868 } 2876 }
2869 2877