diff options
author | Johan Hedberg <johan.hedberg@intel.com> | 2015-11-25 09:15:43 -0500 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2015-12-09 18:51:48 -0500 |
commit | bf943cbf76ecd3b9838a80d5e08777b0f4ccc665 (patch) | |
tree | 0dff5d4878c851de4942fbbd22173515246e6750 /net/bluetooth/hci_request.c | |
parent | b1a8917c9bcbf42113dfacb6492228e094c96862 (diff) |
Bluetooth: Move fast connectable code to hci_request.c
We'll soon need this both in hci_request.c and mgmt.c so move it to
hci_request.c as a generic helper.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth/hci_request.c')
-rw-r--r-- | net/bluetooth/hci_request.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index 030a1bb66ef5..0abd83ddd4fb 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c | |||
@@ -349,6 +349,41 @@ void hci_req_add(struct hci_request *req, u16 opcode, u32 plen, | |||
349 | hci_req_add_ev(req, opcode, plen, param, 0); | 349 | hci_req_add_ev(req, opcode, plen, param, 0); |
350 | } | 350 | } |
351 | 351 | ||
352 | void __hci_req_write_fast_connectable(struct hci_request *req, bool enable) | ||
353 | { | ||
354 | struct hci_dev *hdev = req->hdev; | ||
355 | struct hci_cp_write_page_scan_activity acp; | ||
356 | u8 type; | ||
357 | |||
358 | if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) | ||
359 | return; | ||
360 | |||
361 | if (hdev->hci_ver < BLUETOOTH_VER_1_2) | ||
362 | return; | ||
363 | |||
364 | if (enable) { | ||
365 | type = PAGE_SCAN_TYPE_INTERLACED; | ||
366 | |||
367 | /* 160 msec page scan interval */ | ||
368 | acp.interval = cpu_to_le16(0x0100); | ||
369 | } else { | ||
370 | type = PAGE_SCAN_TYPE_STANDARD; /* default */ | ||
371 | |||
372 | /* default 1.28 sec page scan */ | ||
373 | acp.interval = cpu_to_le16(0x0800); | ||
374 | } | ||
375 | |||
376 | acp.window = cpu_to_le16(0x0012); | ||
377 | |||
378 | if (__cpu_to_le16(hdev->page_scan_interval) != acp.interval || | ||
379 | __cpu_to_le16(hdev->page_scan_window) != acp.window) | ||
380 | hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY, | ||
381 | sizeof(acp), &acp); | ||
382 | |||
383 | if (hdev->page_scan_type != type) | ||
384 | hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type); | ||
385 | } | ||
386 | |||
352 | /* This function controls the background scanning based on hdev->pend_le_conns | 387 | /* This function controls the background scanning based on hdev->pend_le_conns |
353 | * list. If there are pending LE connection we start the background scanning, | 388 | * list. If there are pending LE connection we start the background scanning, |
354 | * otherwise we stop it. | 389 | * otherwise we stop it. |