aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/bluetooth/hci_core.h1
-rw-r--r--net/bluetooth/hci_core.c18
2 files changed, 19 insertions, 0 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index c8e24a9b176c..f7cf928ab6ff 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -1078,5 +1078,6 @@ int hci_do_inquiry(struct hci_dev *hdev, u8 length);
1078int hci_cancel_inquiry(struct hci_dev *hdev); 1078int hci_cancel_inquiry(struct hci_dev *hdev);
1079int hci_le_scan(struct hci_dev *hdev, u8 type, u16 interval, u16 window, 1079int hci_le_scan(struct hci_dev *hdev, u8 type, u16 interval, u16 window,
1080 int timeout); 1080 int timeout);
1081int hci_cancel_le_scan(struct hci_dev *hdev);
1081 1082
1082#endif /* __HCI_CORE_H */ 1083#endif /* __HCI_CORE_H */
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 47a4e9b26b9a..e3920b693f04 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -1671,6 +1671,24 @@ static int hci_do_le_scan(struct hci_dev *hdev, u8 type, u16 interval,
1671 return 0; 1671 return 0;
1672} 1672}
1673 1673
1674int hci_cancel_le_scan(struct hci_dev *hdev)
1675{
1676 BT_DBG("%s", hdev->name);
1677
1678 if (!test_bit(HCI_LE_SCAN, &hdev->dev_flags))
1679 return -EALREADY;
1680
1681 if (cancel_delayed_work(&hdev->le_scan_disable)) {
1682 struct hci_cp_le_set_scan_enable cp;
1683
1684 /* Send HCI command to disable LE Scan */
1685 memset(&cp, 0, sizeof(cp));
1686 hci_send_cmd(hdev, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
1687 }
1688
1689 return 0;
1690}
1691
1674static void le_scan_disable_work(struct work_struct *work) 1692static void le_scan_disable_work(struct work_struct *work)
1675{ 1693{
1676 struct hci_dev *hdev = container_of(work, struct hci_dev, 1694 struct hci_dev *hdev = container_of(work, struct hci_dev,