diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2015-04-06 03:52:12 -0400 |
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2015-04-07 12:48:21 -0400 |
| commit | 4185a0f5d0431bf91ea1ec202fdf12e6e3b73c46 (patch) | |
| tree | 1bfae670a935a3f1633b04b87133c9405d724e47 /drivers/bluetooth | |
| parent | 48f0ed1bb68589db5d6566bd3cd28ec675feaf2f (diff) | |
Bluetooth: btusb: Use generic Intel support for address support
The Bluetooth address handling for Intel devices is provided by a generic
module now. Start using that module instead of relying it being included
in the driver.
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'drivers/bluetooth')
| -rw-r--r-- | drivers/bluetooth/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/bluetooth/btusb.c | 79 |
2 files changed, 10 insertions, 70 deletions
diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig index e4aff8ca7870..b50fe3361659 100644 --- a/drivers/bluetooth/Kconfig +++ b/drivers/bluetooth/Kconfig | |||
| @@ -12,6 +12,7 @@ config BT_BCM | |||
| 12 | config BT_HCIBTUSB | 12 | config BT_HCIBTUSB |
| 13 | tristate "HCI USB driver" | 13 | tristate "HCI USB driver" |
| 14 | depends on USB | 14 | depends on USB |
| 15 | select BT_INTEL | ||
| 15 | help | 16 | help |
| 16 | Bluetooth HCI USB driver. | 17 | Bluetooth HCI USB driver. |
| 17 | This driver is required if you want to use Bluetooth devices with | 18 | This driver is required if you want to use Bluetooth devices with |
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 8dae3daf821d..5798aec44824 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <net/bluetooth/bluetooth.h> | 28 | #include <net/bluetooth/bluetooth.h> |
| 29 | #include <net/bluetooth/hci_core.h> | 29 | #include <net/bluetooth/hci_core.h> |
| 30 | 30 | ||
| 31 | #include "btintel.h" | ||
| 31 | #include "btbcm.h" | 32 | #include "btbcm.h" |
| 32 | 33 | ||
| 33 | #define VERSION "0.8" | 34 | #define VERSION "0.8" |
| @@ -1533,51 +1534,6 @@ static int btusb_setup_intel_patching(struct hci_dev *hdev, | |||
| 1533 | return 0; | 1534 | return 0; |
| 1534 | } | 1535 | } |
| 1535 | 1536 | ||
| 1536 | #define BDADDR_INTEL (&(bdaddr_t) {{0x00, 0x8b, 0x9e, 0x19, 0x03, 0x00}}) | ||
| 1537 | |||
| 1538 | static int btusb_check_bdaddr_intel(struct hci_dev *hdev) | ||
| 1539 | { | ||
| 1540 | struct sk_buff *skb; | ||
| 1541 | struct hci_rp_read_bd_addr *rp; | ||
| 1542 | |||
| 1543 | skb = __hci_cmd_sync(hdev, HCI_OP_READ_BD_ADDR, 0, NULL, | ||
| 1544 | HCI_INIT_TIMEOUT); | ||
| 1545 | if (IS_ERR(skb)) { | ||
| 1546 | BT_ERR("%s reading Intel device address failed (%ld)", | ||
| 1547 | hdev->name, PTR_ERR(skb)); | ||
| 1548 | return PTR_ERR(skb); | ||
| 1549 | } | ||
| 1550 | |||
| 1551 | if (skb->len != sizeof(*rp)) { | ||
| 1552 | BT_ERR("%s Intel device address length mismatch", hdev->name); | ||
| 1553 | kfree_skb(skb); | ||
| 1554 | return -EIO; | ||
| 1555 | } | ||
| 1556 | |||
| 1557 | rp = (struct hci_rp_read_bd_addr *)skb->data; | ||
| 1558 | if (rp->status) { | ||
| 1559 | BT_ERR("%s Intel device address result failed (%02x)", | ||
| 1560 | hdev->name, rp->status); | ||
| 1561 | kfree_skb(skb); | ||
| 1562 | return -bt_to_errno(rp->status); | ||
| 1563 | } | ||
| 1564 | |||
| 1565 | /* For some Intel based controllers, the default Bluetooth device | ||
| 1566 | * address 00:03:19:9E:8B:00 can be found. These controllers are | ||
| 1567 | * fully operational, but have the danger of duplicate addresses | ||
| 1568 | * and that in turn can cause problems with Bluetooth operation. | ||
| 1569 | */ | ||
| 1570 | if (!bacmp(&rp->bdaddr, BDADDR_INTEL)) { | ||
| 1571 | BT_ERR("%s found Intel default device address (%pMR)", | ||
| 1572 | hdev->name, &rp->bdaddr); | ||
| 1573 | set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); | ||
| 1574 | } | ||
| 1575 | |||
| 1576 | kfree_skb(skb); | ||
| 1577 | |||
| 1578 | return 0; | ||
| 1579 | } | ||
| 1580 | |||
| 1581 | static int btusb_setup_intel(struct hci_dev *hdev) | 1537 | static int btusb_setup_intel(struct hci_dev *hdev) |
| 1582 | { | 1538 | { |
| 1583 | struct sk_buff *skb; | 1539 | struct sk_buff *skb; |
| @@ -1650,7 +1606,7 @@ static int btusb_setup_intel(struct hci_dev *hdev) | |||
| 1650 | BT_INFO("%s: Intel device is already patched. patch num: %02x", | 1606 | BT_INFO("%s: Intel device is already patched. patch num: %02x", |
| 1651 | hdev->name, ver->fw_patch_num); | 1607 | hdev->name, ver->fw_patch_num); |
| 1652 | kfree_skb(skb); | 1608 | kfree_skb(skb); |
| 1653 | btusb_check_bdaddr_intel(hdev); | 1609 | btintel_check_bdaddr(hdev); |
| 1654 | return 0; | 1610 | return 0; |
| 1655 | } | 1611 | } |
| 1656 | 1612 | ||
| @@ -1663,7 +1619,7 @@ static int btusb_setup_intel(struct hci_dev *hdev) | |||
| 1663 | fw = btusb_setup_intel_get_fw(hdev, ver); | 1619 | fw = btusb_setup_intel_get_fw(hdev, ver); |
| 1664 | if (!fw) { | 1620 | if (!fw) { |
| 1665 | kfree_skb(skb); | 1621 | kfree_skb(skb); |
| 1666 | btusb_check_bdaddr_intel(hdev); | 1622 | btintel_check_bdaddr(hdev); |
| 1667 | return 0; | 1623 | return 0; |
| 1668 | } | 1624 | } |
| 1669 | fw_ptr = fw->data; | 1625 | fw_ptr = fw->data; |
| @@ -1744,7 +1700,7 @@ static int btusb_setup_intel(struct hci_dev *hdev) | |||
| 1744 | BT_INFO("%s: Intel Bluetooth firmware patch completed and activated", | 1700 | BT_INFO("%s: Intel Bluetooth firmware patch completed and activated", |
| 1745 | hdev->name); | 1701 | hdev->name); |
| 1746 | 1702 | ||
| 1747 | btusb_check_bdaddr_intel(hdev); | 1703 | btintel_check_bdaddr(hdev); |
| 1748 | return 0; | 1704 | return 0; |
| 1749 | 1705 | ||
| 1750 | exit_mfg_disable: | 1706 | exit_mfg_disable: |
| @@ -1760,7 +1716,7 @@ exit_mfg_disable: | |||
| 1760 | 1716 | ||
| 1761 | BT_INFO("%s: Intel Bluetooth firmware patch completed", hdev->name); | 1717 | BT_INFO("%s: Intel Bluetooth firmware patch completed", hdev->name); |
| 1762 | 1718 | ||
| 1763 | btusb_check_bdaddr_intel(hdev); | 1719 | btintel_check_bdaddr(hdev); |
| 1764 | return 0; | 1720 | return 0; |
| 1765 | 1721 | ||
| 1766 | exit_mfg_deactivate: | 1722 | exit_mfg_deactivate: |
| @@ -1781,7 +1737,7 @@ exit_mfg_deactivate: | |||
| 1781 | BT_INFO("%s: Intel Bluetooth firmware patch completed and deactivated", | 1737 | BT_INFO("%s: Intel Bluetooth firmware patch completed and deactivated", |
| 1782 | hdev->name); | 1738 | hdev->name); |
| 1783 | 1739 | ||
| 1784 | btusb_check_bdaddr_intel(hdev); | 1740 | btintel_check_bdaddr(hdev); |
| 1785 | return 0; | 1741 | return 0; |
| 1786 | } | 1742 | } |
| 1787 | 1743 | ||
| @@ -2057,7 +2013,7 @@ static int btusb_setup_intel_new(struct hci_dev *hdev) | |||
| 2057 | if (ver->fw_variant == 0x23) { | 2013 | if (ver->fw_variant == 0x23) { |
| 2058 | kfree_skb(skb); | 2014 | kfree_skb(skb); |
| 2059 | clear_bit(BTUSB_BOOTLOADER, &data->flags); | 2015 | clear_bit(BTUSB_BOOTLOADER, &data->flags); |
| 2060 | btusb_check_bdaddr_intel(hdev); | 2016 | btintel_check_bdaddr(hdev); |
| 2061 | return 0; | 2017 | return 0; |
| 2062 | } | 2018 | } |
| 2063 | 2019 | ||
| @@ -2341,23 +2297,6 @@ static void btusb_hw_error_intel(struct hci_dev *hdev, u8 code) | |||
| 2341 | kfree_skb(skb); | 2297 | kfree_skb(skb); |
| 2342 | } | 2298 | } |
| 2343 | 2299 | ||
| 2344 | static int btusb_set_bdaddr_intel(struct hci_dev *hdev, const bdaddr_t *bdaddr) | ||
| 2345 | { | ||
| 2346 | struct sk_buff *skb; | ||
| 2347 | long ret; | ||
| 2348 | |||
| 2349 | skb = __hci_cmd_sync(hdev, 0xfc31, 6, bdaddr, HCI_INIT_TIMEOUT); | ||
| 2350 | if (IS_ERR(skb)) { | ||
| 2351 | ret = PTR_ERR(skb); | ||
| 2352 | BT_ERR("%s: changing Intel device address failed (%ld)", | ||
| 2353 | hdev->name, ret); | ||
| 2354 | return ret; | ||
| 2355 | } | ||
| 2356 | kfree_skb(skb); | ||
| 2357 | |||
| 2358 | return 0; | ||
| 2359 | } | ||
| 2360 | |||
| 2361 | static int btusb_shutdown_intel(struct hci_dev *hdev) | 2300 | static int btusb_shutdown_intel(struct hci_dev *hdev) |
| 2362 | { | 2301 | { |
| 2363 | struct sk_buff *skb; | 2302 | struct sk_buff *skb; |
| @@ -2808,7 +2747,7 @@ static int btusb_probe(struct usb_interface *intf, | |||
| 2808 | if (id->driver_info & BTUSB_INTEL) { | 2747 | if (id->driver_info & BTUSB_INTEL) { |
| 2809 | hdev->setup = btusb_setup_intel; | 2748 | hdev->setup = btusb_setup_intel; |
| 2810 | hdev->shutdown = btusb_shutdown_intel; | 2749 | hdev->shutdown = btusb_shutdown_intel; |
| 2811 | hdev->set_bdaddr = btusb_set_bdaddr_intel; | 2750 | hdev->set_bdaddr = btintel_set_bdaddr; |
| 2812 | set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); | 2751 | set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); |
| 2813 | set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); | 2752 | set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); |
| 2814 | } | 2753 | } |
| @@ -2817,7 +2756,7 @@ static int btusb_probe(struct usb_interface *intf, | |||
| 2817 | hdev->send = btusb_send_frame_intel; | 2756 | hdev->send = btusb_send_frame_intel; |
| 2818 | hdev->setup = btusb_setup_intel_new; | 2757 | hdev->setup = btusb_setup_intel_new; |
| 2819 | hdev->hw_error = btusb_hw_error_intel; | 2758 | hdev->hw_error = btusb_hw_error_intel; |
| 2820 | hdev->set_bdaddr = btusb_set_bdaddr_intel; | 2759 | hdev->set_bdaddr = btintel_set_bdaddr; |
| 2821 | set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); | 2760 | set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); |
| 2822 | } | 2761 | } |
| 2823 | 2762 | ||
