diff options
Diffstat (limited to 'net/bluetooth/hci_conn.c')
| -rw-r--r-- | net/bluetooth/hci_conn.c | 12 | 
1 files changed, 11 insertions, 1 deletions
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index ad5b0ac1f9ce..87691404d0c6 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c @@ -934,6 +934,14 @@ static void hci_req_directed_advertising(struct hci_request *req,  			return;  		memset(&cp, 0, sizeof(cp)); + +		/* Some controllers might reject command if intervals are not +		 * within range for undirected advertising. +		 * BCM20702A0 is known to be affected by this. +		 */ +		cp.min_interval = cpu_to_le16(0x0020); +		cp.max_interval = cpu_to_le16(0x0020); +  		cp.type = LE_ADV_DIRECT_IND;  		cp.own_address_type = own_addr_type;  		cp.direct_addr_type = conn->dst_type; @@ -1168,8 +1176,10 @@ struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,  	if (!conn)  		return ERR_PTR(-ENOMEM); -	if (hci_explicit_conn_params_set(hdev, dst, dst_type) < 0) +	if (hci_explicit_conn_params_set(hdev, dst, dst_type) < 0) { +		hci_conn_del(conn);  		return ERR_PTR(-EBUSY); +	}  	conn->state = BT_CONNECT;  	set_bit(HCI_CONN_SCANNING, &conn->flags);  |