diff options
-rw-r--r-- | net/bluetooth/hci_conn.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 0db2579ea6c6..1517f1549f85 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c | |||
@@ -668,9 +668,6 @@ static void hci_req_directed_advertising(struct hci_request *req, | |||
668 | u8 own_addr_type; | 668 | u8 own_addr_type; |
669 | u8 enable; | 669 | u8 enable; |
670 | 670 | ||
671 | enable = 0x00; | ||
672 | hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable); | ||
673 | |||
674 | /* Clear the HCI_LE_ADV bit temporarily so that the | 671 | /* Clear the HCI_LE_ADV bit temporarily so that the |
675 | * hci_update_random_address knows that it's safe to go ahead | 672 | * hci_update_random_address knows that it's safe to go ahead |
676 | * and write a new random address. The flag will be set back on | 673 | * and write a new random address. The flag will be set back on |
@@ -761,6 +758,18 @@ struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst, | |||
761 | 758 | ||
762 | hci_req_init(&req, hdev); | 759 | hci_req_init(&req, hdev); |
763 | 760 | ||
761 | /* Disable advertising if we're active. For master role | ||
762 | * connections most controllers will refuse to connect if | ||
763 | * advertising is enabled, and for slave role connections we | ||
764 | * anyway have to disable it in order to start directed | ||
765 | * advertising. | ||
766 | */ | ||
767 | if (test_bit(HCI_LE_ADV, &hdev->dev_flags)) { | ||
768 | u8 enable = 0x00; | ||
769 | hci_req_add(&req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), | ||
770 | &enable); | ||
771 | } | ||
772 | |||
764 | /* If requested to connect as slave use directed advertising */ | 773 | /* If requested to connect as slave use directed advertising */ |
765 | if (!master) { | 774 | if (!master) { |
766 | hci_req_directed_advertising(&req, conn); | 775 | hci_req_directed_advertising(&req, conn); |