diff options
Diffstat (limited to 'net/bluetooth/hci_request.c')
| -rw-r--r-- | net/bluetooth/hci_request.c | 29 | 
1 files changed, 22 insertions, 7 deletions
diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index 621f1a97d803..7f6a581b5b7e 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c @@ -1054,6 +1054,7 @@ void __hci_req_enable_advertising(struct hci_request *req)  	struct hci_cp_le_set_adv_param cp;  	u8 own_addr_type, enable = 0x01;  	bool connectable; +	u16 adv_min_interval, adv_max_interval;  	u32 flags;  	flags = get_adv_instance_flags(hdev, hdev->cur_adv_instance); @@ -1087,16 +1088,30 @@ void __hci_req_enable_advertising(struct hci_request *req)  		return;  	memset(&cp, 0, sizeof(cp)); -	cp.min_interval = cpu_to_le16(hdev->le_adv_min_interval); -	cp.max_interval = cpu_to_le16(hdev->le_adv_max_interval); -	if (connectable) +	if (connectable) {  		cp.type = LE_ADV_IND; -	else if (get_cur_adv_instance_scan_rsp_len(hdev)) -		cp.type = LE_ADV_SCAN_IND; -	else -		cp.type = LE_ADV_NONCONN_IND; +		adv_min_interval = hdev->le_adv_min_interval; +		adv_max_interval = hdev->le_adv_max_interval; +	} else { +		if (get_cur_adv_instance_scan_rsp_len(hdev)) +			cp.type = LE_ADV_SCAN_IND; +		else +			cp.type = LE_ADV_NONCONN_IND; + +		if (!hci_dev_test_flag(hdev, HCI_DISCOVERABLE) || +		    hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) { +			adv_min_interval = DISCOV_LE_FAST_ADV_INT_MIN; +			adv_max_interval = DISCOV_LE_FAST_ADV_INT_MAX; +		} else { +			adv_min_interval = hdev->le_adv_min_interval; +			adv_max_interval = hdev->le_adv_max_interval; +		} +	} + +	cp.min_interval = cpu_to_le16(adv_min_interval); +	cp.max_interval = cpu_to_le16(adv_max_interval);  	cp.own_address_type = own_addr_type;  	cp.channel_map = hdev->le_adv_channel_map;  |