Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth
This commit is contained in:
Коммит
bbf2e65258
|
@ -79,6 +79,7 @@ static struct usb_device_id ath3k_table[] = {
|
|||
{ USB_DEVICE(0x13d3, 0x3362) },
|
||||
{ USB_DEVICE(0x0CF3, 0xE004) },
|
||||
{ USB_DEVICE(0x0930, 0x0219) },
|
||||
{ USB_DEVICE(0x0489, 0xe057) },
|
||||
|
||||
/* Atheros AR5BBU12 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xE02C) },
|
||||
|
@ -104,6 +105,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
|
|||
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
|
||||
|
||||
/* Atheros AR5BBU22 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xE03C), .driver_info = BTUSB_ATH3012 },
|
||||
|
|
|
@ -98,6 +98,7 @@ static struct usb_device_id btusb_table[] = {
|
|||
{ USB_DEVICE(0x0a5c, 0x21e6) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21e8) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21f3) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21f4) },
|
||||
{ USB_DEVICE(0x413c, 0x8197) },
|
||||
|
||||
/* Foxconn - Hon Hai */
|
||||
|
@ -133,6 +134,7 @@ static struct usb_device_id blacklist_table[] = {
|
|||
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
|
||||
|
||||
/* Atheros AR5BBU12 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
|
||||
|
|
|
@ -1365,6 +1365,9 @@ static bool hci_resolve_next_name(struct hci_dev *hdev)
|
|||
return false;
|
||||
|
||||
e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
|
||||
if (!e)
|
||||
return false;
|
||||
|
||||
if (hci_resolve_name(hdev, e) == 0) {
|
||||
e->name_state = NAME_PENDING;
|
||||
return true;
|
||||
|
@ -1393,12 +1396,20 @@ static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
|
|||
return;
|
||||
|
||||
e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
|
||||
if (e) {
|
||||
/* If the device was not found in a list of found devices names of which
|
||||
* are pending. there is no need to continue resolving a next name as it
|
||||
* will be done upon receiving another Remote Name Request Complete
|
||||
* Event */
|
||||
if (!e)
|
||||
return;
|
||||
|
||||
list_del(&e->list);
|
||||
if (name) {
|
||||
e->name_state = NAME_KNOWN;
|
||||
list_del(&e->list);
|
||||
if (name)
|
||||
mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
|
||||
e->data.rssi, name, name_len);
|
||||
mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
|
||||
e->data.rssi, name, name_len);
|
||||
} else {
|
||||
e->name_state = NAME_NOT_KNOWN;
|
||||
}
|
||||
|
||||
if (hci_resolve_next_name(hdev))
|
||||
|
@ -1762,7 +1773,12 @@ static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
|||
if (conn->type == ACL_LINK) {
|
||||
conn->state = BT_CONFIG;
|
||||
hci_conn_hold(conn);
|
||||
conn->disc_timeout = HCI_DISCONN_TIMEOUT;
|
||||
|
||||
if (!conn->out && !hci_conn_ssp_enabled(conn) &&
|
||||
!hci_find_link_key(hdev, &ev->bdaddr))
|
||||
conn->disc_timeout = HCI_PAIRING_TIMEOUT;
|
||||
else
|
||||
conn->disc_timeout = HCI_DISCONN_TIMEOUT;
|
||||
} else
|
||||
conn->state = BT_CONNECTED;
|
||||
|
||||
|
|
|
@ -1181,6 +1181,7 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn)
|
|||
sk = chan->sk;
|
||||
|
||||
hci_conn_hold(conn->hcon);
|
||||
conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
|
||||
|
||||
bacpy(&bt_sk(sk)->src, conn->src);
|
||||
bacpy(&bt_sk(sk)->dst, conn->dst);
|
||||
|
|
|
@ -1174,7 +1174,7 @@ static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int p
|
|||
|
||||
chan = l2cap_chan_create();
|
||||
if (!chan) {
|
||||
l2cap_sock_kill(sk);
|
||||
sk_free(sk);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -131,6 +131,15 @@ static int sco_conn_del(struct hci_conn *hcon, int err)
|
|||
sco_sock_clear_timer(sk);
|
||||
sco_chan_del(sk, err);
|
||||
bh_unlock_sock(sk);
|
||||
|
||||
sco_conn_lock(conn);
|
||||
conn->sk = NULL;
|
||||
sco_pi(sk)->conn = NULL;
|
||||
sco_conn_unlock(conn);
|
||||
|
||||
if (conn->hcon)
|
||||
hci_conn_put(conn->hcon);
|
||||
|
||||
sco_sock_kill(sk);
|
||||
}
|
||||
|
||||
|
@ -821,16 +830,6 @@ static void sco_chan_del(struct sock *sk, int err)
|
|||
|
||||
BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
|
||||
|
||||
if (conn) {
|
||||
sco_conn_lock(conn);
|
||||
conn->sk = NULL;
|
||||
sco_pi(sk)->conn = NULL;
|
||||
sco_conn_unlock(conn);
|
||||
|
||||
if (conn->hcon)
|
||||
hci_conn_put(conn->hcon);
|
||||
}
|
||||
|
||||
sk->sk_state = BT_CLOSED;
|
||||
sk->sk_err = err;
|
||||
sk->sk_state_change(sk);
|
||||
|
|
|
@ -579,8 +579,11 @@ static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
|
|||
|
||||
if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
|
||||
smp = smp_chan_create(conn);
|
||||
else
|
||||
smp = conn->smp_chan;
|
||||
|
||||
smp = conn->smp_chan;
|
||||
if (!smp)
|
||||
return SMP_UNSPECIFIED;
|
||||
|
||||
smp->preq[0] = SMP_CMD_PAIRING_REQ;
|
||||
memcpy(&smp->preq[1], req, sizeof(*req));
|
||||
|
|
Загрузка…
Ссылка в новой задаче