Commit c3bed4de authored by Sathish Narsimman's avatar Sathish Narsimman Committed by Marcel Holtmann

Bluetooth: During le_conn_timeout disable EXT_ADV

Disabling LE_LEGACY_ADV when LE_EXT_ADV is enabled causes 'command
disallowed . This patch fixes that issue and disables EXT_ADV if
enabled.
Signed-off-by: default avatarSathish Narsimman <sathish.narasimman@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent a9e45698
...@@ -467,6 +467,23 @@ static void hci_conn_auto_accept(struct work_struct *work) ...@@ -467,6 +467,23 @@ static void hci_conn_auto_accept(struct work_struct *work)
&conn->dst); &conn->dst);
} }
static void le_disable_advertising(struct hci_dev *hdev)
{
if (ext_adv_capable(hdev)) {
struct hci_cp_le_set_ext_adv_enable cp;
cp.enable = 0x00;
cp.num_of_sets = 0x00;
hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, sizeof(cp),
&cp);
} else {
u8 enable = 0x00;
hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
&enable);
}
}
static void le_conn_timeout(struct work_struct *work) static void le_conn_timeout(struct work_struct *work)
{ {
struct hci_conn *conn = container_of(work, struct hci_conn, struct hci_conn *conn = container_of(work, struct hci_conn,
...@@ -481,9 +498,8 @@ static void le_conn_timeout(struct work_struct *work) ...@@ -481,9 +498,8 @@ static void le_conn_timeout(struct work_struct *work)
* (which doesn't have a timeout of its own). * (which doesn't have a timeout of its own).
*/ */
if (conn->role == HCI_ROLE_SLAVE) { if (conn->role == HCI_ROLE_SLAVE) {
u8 enable = 0x00; /* Disable LE Advertising */
hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), le_disable_advertising(hdev);
&enable);
hci_le_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT); hci_le_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT);
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment