|
@@ -66,7 +66,6 @@ static struct usb_driver btusb_driver;
|
|
|
#define BTUSB_BCM2045 0x40000
|
|
|
#define BTUSB_IFNUM_2 0x80000
|
|
|
#define BTUSB_CW6622 0x100000
|
|
|
-#define BTUSB_BCM_NO_PRODID 0x200000
|
|
|
|
|
|
static const struct usb_device_id btusb_table[] = {
|
|
|
/* Generic Bluetooth USB device */
|
|
@@ -171,10 +170,6 @@ static const struct usb_device_id btusb_table[] = {
|
|
|
{ USB_VENDOR_AND_INTERFACE_INFO(0x0930, 0xff, 0x01, 0x01),
|
|
|
.driver_info = BTUSB_BCM_PATCHRAM },
|
|
|
|
|
|
- /* Broadcom devices with missing product id */
|
|
|
- { USB_DEVICE_AND_INTERFACE_INFO(0x0000, 0x0000, 0xff, 0x01, 0x01),
|
|
|
- .driver_info = BTUSB_BCM_PATCHRAM | BTUSB_BCM_NO_PRODID },
|
|
|
-
|
|
|
/* Intel Bluetooth USB Bootloader (RAM module) */
|
|
|
{ USB_DEVICE(0x8087, 0x0a5a),
|
|
|
.driver_info = BTUSB_INTEL_BOOT | BTUSB_BROKEN_ISOC },
|
|
@@ -272,6 +267,7 @@ static const struct usb_device_id blacklist_table[] = {
|
|
|
{ USB_DEVICE(0x0cf3, 0xe301), .driver_info = BTUSB_QCA_ROME },
|
|
|
{ USB_DEVICE(0x0cf3, 0xe360), .driver_info = BTUSB_QCA_ROME },
|
|
|
{ USB_DEVICE(0x0489, 0xe092), .driver_info = BTUSB_QCA_ROME },
|
|
|
+ { USB_DEVICE(0x0489, 0xe09f), .driver_info = BTUSB_QCA_ROME },
|
|
|
{ USB_DEVICE(0x0489, 0xe0a2), .driver_info = BTUSB_QCA_ROME },
|
|
|
{ USB_DEVICE(0x04ca, 0x3011), .driver_info = BTUSB_QCA_ROME },
|
|
|
{ USB_DEVICE(0x04ca, 0x3016), .driver_info = BTUSB_QCA_ROME },
|
|
@@ -401,6 +397,7 @@ struct btusb_data {
|
|
|
struct usb_interface *intf;
|
|
|
struct usb_interface *isoc;
|
|
|
struct usb_interface *diag;
|
|
|
+ unsigned isoc_ifnum;
|
|
|
|
|
|
unsigned long flags;
|
|
|
|
|
@@ -647,7 +644,7 @@ static void btusb_intr_complete(struct urb *urb)
|
|
|
|
|
|
if (btusb_recv_intr(data, urb->transfer_buffer,
|
|
|
urb->actual_length) < 0) {
|
|
|
- BT_ERR("%s corrupted event packet", hdev->name);
|
|
|
+ bt_dev_err(hdev, "corrupted event packet");
|
|
|
hdev->stat.err_rx++;
|
|
|
}
|
|
|
} else if (urb->status == -ENOENT) {
|
|
@@ -667,8 +664,8 @@ static void btusb_intr_complete(struct urb *urb)
|
|
|
* -ENODEV: device got disconnected
|
|
|
*/
|
|
|
if (err != -EPERM && err != -ENODEV)
|
|
|
- BT_ERR("%s urb %p failed to resubmit (%d)",
|
|
|
- hdev->name, urb, -err);
|
|
|
+ bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
|
|
|
+ urb, -err);
|
|
|
usb_unanchor_urb(urb);
|
|
|
}
|
|
|
}
|
|
@@ -710,8 +707,8 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
|
|
|
err = usb_submit_urb(urb, mem_flags);
|
|
|
if (err < 0) {
|
|
|
if (err != -EPERM && err != -ENODEV)
|
|
|
- BT_ERR("%s urb %p submission failed (%d)",
|
|
|
- hdev->name, urb, -err);
|
|
|
+ bt_dev_err(hdev, "urb %p submission failed (%d)",
|
|
|
+ urb, -err);
|
|
|
usb_unanchor_urb(urb);
|
|
|
}
|
|
|
|
|
@@ -737,7 +734,7 @@ static void btusb_bulk_complete(struct urb *urb)
|
|
|
|
|
|
if (data->recv_bulk(data, urb->transfer_buffer,
|
|
|
urb->actual_length) < 0) {
|
|
|
- BT_ERR("%s corrupted ACL packet", hdev->name);
|
|
|
+ bt_dev_err(hdev, "corrupted ACL packet");
|
|
|
hdev->stat.err_rx++;
|
|
|
}
|
|
|
} else if (urb->status == -ENOENT) {
|
|
@@ -757,8 +754,8 @@ static void btusb_bulk_complete(struct urb *urb)
|
|
|
* -ENODEV: device got disconnected
|
|
|
*/
|
|
|
if (err != -EPERM && err != -ENODEV)
|
|
|
- BT_ERR("%s urb %p failed to resubmit (%d)",
|
|
|
- hdev->name, urb, -err);
|
|
|
+ bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
|
|
|
+ urb, -err);
|
|
|
usb_unanchor_urb(urb);
|
|
|
}
|
|
|
}
|
|
@@ -799,8 +796,8 @@ static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)
|
|
|
err = usb_submit_urb(urb, mem_flags);
|
|
|
if (err < 0) {
|
|
|
if (err != -EPERM && err != -ENODEV)
|
|
|
- BT_ERR("%s urb %p submission failed (%d)",
|
|
|
- hdev->name, urb, -err);
|
|
|
+ bt_dev_err(hdev, "urb %p submission failed (%d)",
|
|
|
+ urb, -err);
|
|
|
usb_unanchor_urb(urb);
|
|
|
}
|
|
|
|
|
@@ -833,7 +830,7 @@ static void btusb_isoc_complete(struct urb *urb)
|
|
|
|
|
|
if (btusb_recv_isoc(data, urb->transfer_buffer + offset,
|
|
|
length) < 0) {
|
|
|
- BT_ERR("%s corrupted SCO packet", hdev->name);
|
|
|
+ bt_dev_err(hdev, "corrupted SCO packet");
|
|
|
hdev->stat.err_rx++;
|
|
|
}
|
|
|
}
|
|
@@ -853,8 +850,8 @@ static void btusb_isoc_complete(struct urb *urb)
|
|
|
* -ENODEV: device got disconnected
|
|
|
*/
|
|
|
if (err != -EPERM && err != -ENODEV)
|
|
|
- BT_ERR("%s urb %p failed to resubmit (%d)",
|
|
|
- hdev->name, urb, -err);
|
|
|
+ bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
|
|
|
+ urb, -err);
|
|
|
usb_unanchor_urb(urb);
|
|
|
}
|
|
|
}
|
|
@@ -921,8 +918,8 @@ static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)
|
|
|
err = usb_submit_urb(urb, mem_flags);
|
|
|
if (err < 0) {
|
|
|
if (err != -EPERM && err != -ENODEV)
|
|
|
- BT_ERR("%s urb %p submission failed (%d)",
|
|
|
- hdev->name, urb, -err);
|
|
|
+ bt_dev_err(hdev, "urb %p submission failed (%d)",
|
|
|
+ urb, -err);
|
|
|
usb_unanchor_urb(urb);
|
|
|
}
|
|
|
|
|
@@ -966,8 +963,8 @@ static void btusb_diag_complete(struct urb *urb)
|
|
|
* -ENODEV: device got disconnected
|
|
|
*/
|
|
|
if (err != -EPERM && err != -ENODEV)
|
|
|
- BT_ERR("%s urb %p failed to resubmit (%d)",
|
|
|
- hdev->name, urb, -err);
|
|
|
+ bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
|
|
|
+ urb, -err);
|
|
|
usb_unanchor_urb(urb);
|
|
|
}
|
|
|
}
|
|
@@ -1008,8 +1005,8 @@ static int btusb_submit_diag_urb(struct hci_dev *hdev, gfp_t mem_flags)
|
|
|
err = usb_submit_urb(urb, mem_flags);
|
|
|
if (err < 0) {
|
|
|
if (err != -EPERM && err != -ENODEV)
|
|
|
- BT_ERR("%s urb %p submission failed (%d)",
|
|
|
- hdev->name, urb, -err);
|
|
|
+ bt_dev_err(hdev, "urb %p submission failed (%d)",
|
|
|
+ urb, -err);
|
|
|
usb_unanchor_urb(urb);
|
|
|
}
|
|
|
|
|
@@ -1270,8 +1267,8 @@ static int submit_tx_urb(struct hci_dev *hdev, struct urb *urb)
|
|
|
err = usb_submit_urb(urb, GFP_KERNEL);
|
|
|
if (err < 0) {
|
|
|
if (err != -EPERM && err != -ENODEV)
|
|
|
- BT_ERR("%s urb %p submission failed (%d)",
|
|
|
- hdev->name, urb, -err);
|
|
|
+ bt_dev_err(hdev, "urb %p submission failed (%d)",
|
|
|
+ urb, -err);
|
|
|
kfree(urb->setup_packet);
|
|
|
usb_unanchor_urb(urb);
|
|
|
} else {
|
|
@@ -1364,9 +1361,9 @@ static inline int __set_isoc_interface(struct hci_dev *hdev, int altsetting)
|
|
|
if (!data->isoc)
|
|
|
return -ENODEV;
|
|
|
|
|
|
- err = usb_set_interface(data->udev, 1, altsetting);
|
|
|
+ err = usb_set_interface(data->udev, data->isoc_ifnum, altsetting);
|
|
|
if (err < 0) {
|
|
|
- BT_ERR("%s setting interface failed (%d)", hdev->name, -err);
|
|
|
+ bt_dev_err(hdev, "setting interface failed (%d)", -err);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -1390,7 +1387,7 @@ static inline int __set_isoc_interface(struct hci_dev *hdev, int altsetting)
|
|
|
}
|
|
|
|
|
|
if (!data->isoc_tx_ep || !data->isoc_rx_ep) {
|
|
|
- BT_ERR("%s invalid SCO descriptors", hdev->name);
|
|
|
+ bt_dev_err(hdev, "invalid SCO descriptors");
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|
|
@@ -1485,7 +1482,7 @@ static int btusb_setup_bcm92035(struct hci_dev *hdev)
|
|
|
|
|
|
skb = __hci_cmd_sync(hdev, 0xfc3b, 1, &val, HCI_INIT_TIMEOUT);
|
|
|
if (IS_ERR(skb))
|
|
|
- BT_ERR("BCM92035 command failed (%ld)", -PTR_ERR(skb));
|
|
|
+ bt_dev_err(hdev, "BCM92035 command failed (%ld)", PTR_ERR(skb));
|
|
|
else
|
|
|
kfree_skb(skb);
|
|
|
|
|
@@ -1503,12 +1500,12 @@ static int btusb_setup_csr(struct hci_dev *hdev)
|
|
|
HCI_INIT_TIMEOUT);
|
|
|
if (IS_ERR(skb)) {
|
|
|
int err = PTR_ERR(skb);
|
|
|
- BT_ERR("%s: CSR: Local version failed (%d)", hdev->name, err);
|
|
|
+ bt_dev_err(hdev, "CSR: Local version failed (%d)", err);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
if (skb->len != sizeof(struct hci_rp_read_local_version)) {
|
|
|
- BT_ERR("%s: CSR: Local version length mismatch", hdev->name);
|
|
|
+ bt_dev_err(hdev, "CSR: Local version length mismatch");
|
|
|
kfree_skb(skb);
|
|
|
return -EIO;
|
|
|
}
|
|
@@ -1570,7 +1567,7 @@ static const struct firmware *btusb_setup_intel_get_fw(struct hci_dev *hdev,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- BT_INFO("%s: Intel Bluetooth firmware file: %s", hdev->name, fwname);
|
|
|
+ bt_dev_info(hdev, "Intel Bluetooth firmware file: %s", fwname);
|
|
|
|
|
|
return fw;
|
|
|
}
|
|
@@ -1726,18 +1723,18 @@ static int btusb_setup_intel(struct hci_dev *hdev)
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
- BT_INFO("%s: read Intel version: %02x%02x%02x%02x%02x%02x%02x%02x%02x",
|
|
|
- hdev->name, ver.hw_platform, ver.hw_variant, ver.hw_revision,
|
|
|
- ver.fw_variant, ver.fw_revision, ver.fw_build_num,
|
|
|
- ver.fw_build_ww, ver.fw_build_yy, ver.fw_patch_num);
|
|
|
+ bt_dev_info(hdev, "read Intel version: %02x%02x%02x%02x%02x%02x%02x%02x%02x",
|
|
|
+ ver.hw_platform, ver.hw_variant, ver.hw_revision,
|
|
|
+ ver.fw_variant, ver.fw_revision, ver.fw_build_num,
|
|
|
+ ver.fw_build_ww, ver.fw_build_yy, ver.fw_patch_num);
|
|
|
|
|
|
/* fw_patch_num indicates the version of patch the device currently
|
|
|
* have. If there is no patch data in the device, it is always 0x00.
|
|
|
* So, if it is other than 0x00, no need to patch the device again.
|
|
|
*/
|
|
|
if (ver.fw_patch_num) {
|
|
|
- BT_INFO("%s: Intel device is already patched. patch num: %02x",
|
|
|
- hdev->name, ver.fw_patch_num);
|
|
|
+ bt_dev_info(hdev, "Intel device is already patched. "
|
|
|
+ "patch num: %02x", ver.fw_patch_num);
|
|
|
goto complete;
|
|
|
}
|
|
|
|
|
@@ -1805,8 +1802,7 @@ static int btusb_setup_intel(struct hci_dev *hdev)
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
- BT_INFO("%s: Intel Bluetooth firmware patch completed and activated",
|
|
|
- hdev->name);
|
|
|
+ bt_dev_info(hdev, "Intel firmware patch completed and activated");
|
|
|
|
|
|
goto complete;
|
|
|
|
|
@@ -1816,7 +1812,7 @@ exit_mfg_disable:
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
- BT_INFO("%s: Intel Bluetooth firmware patch completed", hdev->name);
|
|
|
+ bt_dev_info(hdev, "Intel firmware patch completed");
|
|
|
|
|
|
goto complete;
|
|
|
|
|
@@ -1830,8 +1826,7 @@ exit_mfg_deactivate:
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
- BT_INFO("%s: Intel Bluetooth firmware patch completed and deactivated",
|
|
|
- hdev->name);
|
|
|
+ bt_dev_info(hdev, "Intel firmware patch completed and deactivated");
|
|
|
|
|
|
complete:
|
|
|
/* Set the event mask for Intel specific vendor events. This enables
|
|
@@ -2112,24 +2107,24 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
|
|
|
|
|
|
params = (struct intel_boot_params *)skb->data;
|
|
|
|
|
|
- BT_INFO("%s: Device revision is %u", hdev->name,
|
|
|
- le16_to_cpu(params->dev_revid));
|
|
|
+ bt_dev_info(hdev, "Device revision is %u",
|
|
|
+ le16_to_cpu(params->dev_revid));
|
|
|
|
|
|
- BT_INFO("%s: Secure boot is %s", hdev->name,
|
|
|
- params->secure_boot ? "enabled" : "disabled");
|
|
|
+ bt_dev_info(hdev, "Secure boot is %s",
|
|
|
+ params->secure_boot ? "enabled" : "disabled");
|
|
|
|
|
|
- BT_INFO("%s: OTP lock is %s", hdev->name,
|
|
|
- params->otp_lock ? "enabled" : "disabled");
|
|
|
+ bt_dev_info(hdev, "OTP lock is %s",
|
|
|
+ params->otp_lock ? "enabled" : "disabled");
|
|
|
|
|
|
- BT_INFO("%s: API lock is %s", hdev->name,
|
|
|
- params->api_lock ? "enabled" : "disabled");
|
|
|
+ bt_dev_info(hdev, "API lock is %s",
|
|
|
+ params->api_lock ? "enabled" : "disabled");
|
|
|
|
|
|
- BT_INFO("%s: Debug lock is %s", hdev->name,
|
|
|
- params->debug_lock ? "enabled" : "disabled");
|
|
|
+ bt_dev_info(hdev, "Debug lock is %s",
|
|
|
+ params->debug_lock ? "enabled" : "disabled");
|
|
|
|
|
|
- BT_INFO("%s: Minimum firmware build %u week %u %u", hdev->name,
|
|
|
- params->min_fw_build_nn, params->min_fw_build_cw,
|
|
|
- 2000 + params->min_fw_build_yy);
|
|
|
+ bt_dev_info(hdev, "Minimum firmware build %u week %u %u",
|
|
|
+ params->min_fw_build_nn, params->min_fw_build_cw,
|
|
|
+ 2000 + params->min_fw_build_yy);
|
|
|
|
|
|
/* It is required that every single firmware fragment is acknowledged
|
|
|
* with a command complete event. If the boot parameters indicate
|
|
@@ -2146,24 +2141,49 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
|
|
|
* also be no valid address for the operational firmware.
|
|
|
*/
|
|
|
if (!bacmp(¶ms->otp_bdaddr, BDADDR_ANY)) {
|
|
|
- BT_INFO("%s: No device address configured", hdev->name);
|
|
|
+ bt_dev_info(hdev, "No device address configured");
|
|
|
set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
|
|
|
}
|
|
|
|
|
|
/* With this Intel bootloader only the hardware variant and device
|
|
|
- * revision information are used to select the right firmware.
|
|
|
+ * revision information are used to select the right firmware for SfP
|
|
|
+ * and WsP.
|
|
|
*
|
|
|
* The firmware filename is ibt-<hw_variant>-<dev_revid>.sfi.
|
|
|
*
|
|
|
* Currently the supported hardware variants are:
|
|
|
* 11 (0x0b) for iBT3.0 (LnP/SfP)
|
|
|
* 12 (0x0c) for iBT3.5 (WsP)
|
|
|
+ *
|
|
|
+ * For ThP/JfP and for future SKU's, the FW name varies based on HW
|
|
|
+ * variant, HW revision and FW revision, as these are dependent on CNVi
|
|
|
+ * and RF Combination.
|
|
|
+ *
|
|
|
* 17 (0x11) for iBT3.5 (JfP)
|
|
|
* 18 (0x12) for iBT3.5 (ThP)
|
|
|
+ *
|
|
|
+ * The firmware file name for these will be
|
|
|
+ * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi.
|
|
|
+ *
|
|
|
*/
|
|
|
- snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi",
|
|
|
- le16_to_cpu(ver.hw_variant),
|
|
|
- le16_to_cpu(params->dev_revid));
|
|
|
+ switch (ver.hw_variant) {
|
|
|
+ case 0x0b: /* SfP */
|
|
|
+ case 0x0c: /* WsP */
|
|
|
+ snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi",
|
|
|
+ le16_to_cpu(ver.hw_variant),
|
|
|
+ le16_to_cpu(params->dev_revid));
|
|
|
+ break;
|
|
|
+ case 0x11: /* JfP */
|
|
|
+ case 0x12: /* ThP */
|
|
|
+ snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.sfi",
|
|
|
+ le16_to_cpu(ver.hw_variant),
|
|
|
+ le16_to_cpu(ver.hw_revision),
|
|
|
+ le16_to_cpu(ver.fw_revision));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ BT_ERR("%s: Unsupported Intel firmware naming", hdev->name);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
err = request_firmware(&fw, fwname, &hdev->dev);
|
|
|
if (err < 0) {
|
|
@@ -2173,14 +2193,29 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
- BT_INFO("%s: Found device firmware: %s", hdev->name, fwname);
|
|
|
+ bt_dev_info(hdev, "Found device firmware: %s", fwname);
|
|
|
|
|
|
/* Save the DDC file name for later use to apply once the firmware
|
|
|
* downloading is done.
|
|
|
*/
|
|
|
- snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.ddc",
|
|
|
- le16_to_cpu(ver.hw_variant),
|
|
|
- le16_to_cpu(params->dev_revid));
|
|
|
+ switch (ver.hw_variant) {
|
|
|
+ case 0x0b: /* SfP */
|
|
|
+ case 0x0c: /* WsP */
|
|
|
+ snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.ddc",
|
|
|
+ le16_to_cpu(ver.hw_variant),
|
|
|
+ le16_to_cpu(params->dev_revid));
|
|
|
+ break;
|
|
|
+ case 0x11: /* JfP */
|
|
|
+ case 0x12: /* ThP */
|
|
|
+ snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.ddc",
|
|
|
+ le16_to_cpu(ver.hw_variant),
|
|
|
+ le16_to_cpu(ver.hw_revision),
|
|
|
+ le16_to_cpu(ver.fw_revision));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ BT_ERR("%s: Unsupported Intel firmware naming", hdev->name);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
kfree_skb(skb);
|
|
|
|
|
@@ -2254,7 +2289,7 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
|
|
|
|
|
|
set_bit(BTUSB_FIRMWARE_LOADED, &data->flags);
|
|
|
|
|
|
- BT_INFO("%s: Waiting for firmware download to complete", hdev->name);
|
|
|
+ bt_dev_info(hdev, "Waiting for firmware download to complete");
|
|
|
|
|
|
/* Before switching the device into operational mode and with that
|
|
|
* booting the loaded firmware, wait for the bootloader notification
|
|
@@ -2291,7 +2326,7 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
|
|
|
delta = ktime_sub(rettime, calltime);
|
|
|
duration = (unsigned long long) ktime_to_ns(delta) >> 10;
|
|
|
|
|
|
- BT_INFO("%s: Firmware loaded in %llu usecs", hdev->name, duration);
|
|
|
+ bt_dev_info(hdev, "Firmware loaded in %llu usecs", duration);
|
|
|
|
|
|
done:
|
|
|
release_firmware(fw);
|
|
@@ -2317,7 +2352,7 @@ done:
|
|
|
* 1 second. However if that happens, then just fail the setup
|
|
|
* since something went wrong.
|
|
|
*/
|
|
|
- BT_INFO("%s: Waiting for device to boot", hdev->name);
|
|
|
+ bt_dev_info(hdev, "Waiting for device to boot");
|
|
|
|
|
|
err = wait_on_bit_timeout(&data->flags, BTUSB_BOOTING,
|
|
|
TASK_INTERRUPTIBLE,
|
|
@@ -2337,7 +2372,7 @@ done:
|
|
|
delta = ktime_sub(rettime, calltime);
|
|
|
duration = (unsigned long long) ktime_to_ns(delta) >> 10;
|
|
|
|
|
|
- BT_INFO("%s: Device booted in %llu usecs", hdev->name, duration);
|
|
|
+ bt_dev_info(hdev, "Device booted in %llu usecs", duration);
|
|
|
|
|
|
clear_bit(BTUSB_BOOTLOADER, &data->flags);
|
|
|
|
|
@@ -2440,8 +2475,8 @@ static int btusb_set_bdaddr_marvell(struct hci_dev *hdev,
|
|
|
skb = __hci_cmd_sync(hdev, 0xfc22, sizeof(buf), buf, HCI_INIT_TIMEOUT);
|
|
|
if (IS_ERR(skb)) {
|
|
|
ret = PTR_ERR(skb);
|
|
|
- BT_ERR("%s: changing Marvell device address failed (%ld)",
|
|
|
- hdev->name, ret);
|
|
|
+ bt_dev_err(hdev, "changing Marvell device address failed (%ld)",
|
|
|
+ ret);
|
|
|
return ret;
|
|
|
}
|
|
|
kfree_skb(skb);
|
|
@@ -2465,8 +2500,7 @@ static int btusb_set_bdaddr_ath3012(struct hci_dev *hdev,
|
|
|
skb = __hci_cmd_sync(hdev, 0xfc0b, sizeof(buf), buf, HCI_INIT_TIMEOUT);
|
|
|
if (IS_ERR(skb)) {
|
|
|
ret = PTR_ERR(skb);
|
|
|
- BT_ERR("%s: Change address command failed (%ld)",
|
|
|
- hdev->name, ret);
|
|
|
+ bt_dev_err(hdev, "Change address command failed (%ld)", ret);
|
|
|
return ret;
|
|
|
}
|
|
|
kfree_skb(skb);
|
|
@@ -2532,7 +2566,7 @@ static int btusb_qca_send_vendor_req(struct hci_dev *hdev, u8 request,
|
|
|
err = usb_control_msg(udev, pipe, request, USB_TYPE_VENDOR | USB_DIR_IN,
|
|
|
0, 0, buf, size, USB_CTRL_SET_TIMEOUT);
|
|
|
if (err < 0) {
|
|
|
- BT_ERR("%s: Failed to access otp area (%d)", hdev->name, err);
|
|
|
+ bt_dev_err(hdev, "Failed to access otp area (%d)", err);
|
|
|
goto done;
|
|
|
}
|
|
|
|
|
@@ -2572,7 +2606,7 @@ static int btusb_setup_qca_download_fw(struct hci_dev *hdev,
|
|
|
err = usb_control_msg(udev, pipe, QCA_DFU_DOWNLOAD, USB_TYPE_VENDOR,
|
|
|
0, 0, buf, size, USB_CTRL_SET_TIMEOUT);
|
|
|
if (err < 0) {
|
|
|
- BT_ERR("%s: Failed to send headers (%d)", hdev->name, err);
|
|
|
+ bt_dev_err(hdev, "Failed to send headers (%d)", err);
|
|
|
goto done;
|
|
|
}
|
|
|
|
|
@@ -2588,13 +2622,13 @@ static int btusb_setup_qca_download_fw(struct hci_dev *hdev,
|
|
|
err = usb_bulk_msg(udev, pipe, buf, size, &len,
|
|
|
QCA_DFU_TIMEOUT);
|
|
|
if (err < 0) {
|
|
|
- BT_ERR("%s: Failed to send body at %zd of %zd (%d)",
|
|
|
- hdev->name, sent, firmware->size, err);
|
|
|
+ bt_dev_err(hdev, "Failed to send body at %zd of %zd (%d)",
|
|
|
+ sent, firmware->size, err);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (size != len) {
|
|
|
- BT_ERR("%s: Failed to get bulk buffer", hdev->name);
|
|
|
+ bt_dev_err(hdev, "Failed to get bulk buffer");
|
|
|
err = -EILSEQ;
|
|
|
break;
|
|
|
}
|
|
@@ -2626,24 +2660,23 @@ static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
|
|
|
|
|
|
err = request_firmware(&fw, fwname, &hdev->dev);
|
|
|
if (err) {
|
|
|
- BT_ERR("%s: failed to request rampatch file: %s (%d)",
|
|
|
- hdev->name, fwname, err);
|
|
|
+ bt_dev_err(hdev, "failed to request rampatch file: %s (%d)",
|
|
|
+ fwname, err);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
- BT_INFO("%s: using rampatch file: %s", hdev->name, fwname);
|
|
|
+ bt_dev_info(hdev, "using rampatch file: %s", fwname);
|
|
|
|
|
|
rver = (struct qca_rampatch_version *)(fw->data + info->ver_offset);
|
|
|
rver_rom = le16_to_cpu(rver->rom_version);
|
|
|
rver_patch = le16_to_cpu(rver->patch_version);
|
|
|
|
|
|
- BT_INFO("%s: QCA: patch rome 0x%x build 0x%x, firmware rome 0x%x "
|
|
|
- "build 0x%x", hdev->name, rver_rom, rver_patch, ver_rom,
|
|
|
- ver_patch);
|
|
|
+ bt_dev_info(hdev, "QCA: patch rome 0x%x build 0x%x, "
|
|
|
+ "firmware rome 0x%x build 0x%x",
|
|
|
+ rver_rom, rver_patch, ver_rom, ver_patch);
|
|
|
|
|
|
if (rver_rom != ver_rom || rver_patch <= ver_patch) {
|
|
|
- BT_ERR("%s: rampatch file version did not match with firmware",
|
|
|
- hdev->name);
|
|
|
+ bt_dev_err(hdev, "rampatch file version did not match with firmware");
|
|
|
err = -EINVAL;
|
|
|
goto done;
|
|
|
}
|
|
@@ -2669,12 +2702,12 @@ static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
|
|
|
|
|
|
err = request_firmware(&fw, fwname, &hdev->dev);
|
|
|
if (err) {
|
|
|
- BT_ERR("%s: failed to request NVM file: %s (%d)",
|
|
|
- hdev->name, fwname, err);
|
|
|
+ bt_dev_err(hdev, "failed to request NVM file: %s (%d)",
|
|
|
+ fwname, err);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
- BT_INFO("%s: using NVM file: %s", hdev->name, fwname);
|
|
|
+ bt_dev_info(hdev, "using NVM file: %s", fwname);
|
|
|
|
|
|
err = btusb_setup_qca_download_fw(hdev, fw, info->nvm_hdr);
|
|
|
|
|
@@ -2702,8 +2735,7 @@ static int btusb_setup_qca(struct hci_dev *hdev)
|
|
|
info = &qca_devices_table[i];
|
|
|
}
|
|
|
if (!info) {
|
|
|
- BT_ERR("%s: don't support firmware rome 0x%x", hdev->name,
|
|
|
- ver_rom);
|
|
|
+ bt_dev_err(hdev, "don't support firmware rome 0x%x", ver_rom);
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|
|
@@ -2757,7 +2789,7 @@ static inline int __set_diag_interface(struct hci_dev *hdev)
|
|
|
}
|
|
|
|
|
|
if (!data->diag_tx_ep || !data->diag_rx_ep) {
|
|
|
- BT_ERR("%s invalid diagnostic descriptors", hdev->name);
|
|
|
+ bt_dev_err(hdev, "invalid diagnostic descriptors");
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|
|
@@ -2909,19 +2941,6 @@ static int btusb_probe(struct usb_interface *intf,
|
|
|
if (id->driver_info == BTUSB_IGNORE)
|
|
|
return -ENODEV;
|
|
|
|
|
|
- if (id->driver_info & BTUSB_BCM_NO_PRODID) {
|
|
|
- struct usb_device *udev = interface_to_usbdev(intf);
|
|
|
-
|
|
|
- /* For the broken Broadcom devices that show 0000:0000
|
|
|
- * as USB vendor and product information, check that the
|
|
|
- * manufacturer string identifies them as Broadcom based
|
|
|
- * devices.
|
|
|
- */
|
|
|
- if (!udev->manufacturer ||
|
|
|
- strcmp(udev->manufacturer, "Broadcom Corp"))
|
|
|
- return -ENODEV;
|
|
|
- }
|
|
|
-
|
|
|
if (id->driver_info & BTUSB_ATH3012) {
|
|
|
struct usb_device *udev = interface_to_usbdev(intf);
|
|
|
|
|
@@ -3124,6 +3143,7 @@ static int btusb_probe(struct usb_interface *intf,
|
|
|
} else {
|
|
|
/* Interface orders are hardcoded in the specification */
|
|
|
data->isoc = usb_ifnum_to_if(data->udev, ifnum_base + 1);
|
|
|
+ data->isoc_ifnum = ifnum_base + 1;
|
|
|
}
|
|
|
|
|
|
if (!reset)
|