&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)
 {
        struct hci_conn *conn = container_of(work, struct hci_conn,
         * (which doesn't have a timeout of its own).
         */
        if (conn->role == HCI_ROLE_SLAVE) {
-               u8 enable = 0x00;
-               hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
-                            &enable);
+               /* Disable LE Advertising */
+               le_disable_advertising(hdev);
                hci_le_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT);
                return;
        }