Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth
This commit is contained in:
commit
41833af713
|
@ -1521,8 +1521,8 @@ M: Gustavo Padovan <gustavo@padovan.org>
|
|||
M: Johan Hedberg <johan.hedberg@gmail.com>
|
||||
L: linux-bluetooth@vger.kernel.org
|
||||
W: http://www.bluez.org/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
|
||||
S: Maintained
|
||||
F: drivers/bluetooth/
|
||||
|
||||
|
@ -1532,8 +1532,8 @@ M: Gustavo Padovan <gustavo@padovan.org>
|
|||
M: Johan Hedberg <johan.hedberg@gmail.com>
|
||||
L: linux-bluetooth@vger.kernel.org
|
||||
W: http://www.bluez.org/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
|
||||
S: Maintained
|
||||
F: net/bluetooth/
|
||||
F: include/net/bluetooth/
|
||||
|
|
|
@ -72,7 +72,9 @@ static struct usb_device_id ath3k_table[] = {
|
|||
|
||||
/* Atheros AR3012 with sflash firmware*/
|
||||
{ USB_DEVICE(0x0CF3, 0x3004) },
|
||||
{ USB_DEVICE(0x0CF3, 0x311D) },
|
||||
{ USB_DEVICE(0x13d3, 0x3375) },
|
||||
{ USB_DEVICE(0x04CA, 0x3005) },
|
||||
|
||||
/* Atheros AR5BBU12 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xE02C) },
|
||||
|
@ -89,7 +91,9 @@ static struct usb_device_id ath3k_blist_tbl[] = {
|
|||
|
||||
/* Atheros AR3012 with sflash firmware*/
|
||||
{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
|
||||
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
|
|
@ -61,7 +61,7 @@ static struct usb_device_id btusb_table[] = {
|
|||
{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
|
||||
|
||||
/* Broadcom SoftSailing reporting vendor specific */
|
||||
{ USB_DEVICE(0x05ac, 0x21e1) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21e1) },
|
||||
|
||||
/* Apple MacBookPro 7,1 */
|
||||
{ USB_DEVICE(0x05ac, 0x8213) },
|
||||
|
@ -103,6 +103,7 @@ static struct usb_device_id btusb_table[] = {
|
|||
/* Broadcom BCM20702A0 */
|
||||
{ USB_DEVICE(0x0a5c, 0x21e3) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21e6) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21e8) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21f3) },
|
||||
{ USB_DEVICE(0x413c, 0x8197) },
|
||||
|
||||
|
@ -129,7 +130,9 @@ static struct usb_device_id blacklist_table[] = {
|
|||
|
||||
/* Atheros 3012 with sflash firmware */
|
||||
{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
|
||||
|
||||
/* Atheros AR5BBU12 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
|
||||
|
|
|
@ -299,11 +299,11 @@ static void hci_uart_tty_close(struct tty_struct *tty)
|
|||
hci_uart_close(hdev);
|
||||
|
||||
if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
|
||||
hu->proto->close(hu);
|
||||
if (hdev) {
|
||||
hci_unregister_dev(hdev);
|
||||
hci_free_dev(hdev);
|
||||
}
|
||||
hu->proto->close(hu);
|
||||
}
|
||||
|
||||
kfree(hu);
|
||||
|
|
|
@ -92,6 +92,7 @@ enum {
|
|||
HCI_SERVICE_CACHE,
|
||||
HCI_LINK_KEYS,
|
||||
HCI_DEBUG_KEYS,
|
||||
HCI_UNREGISTER,
|
||||
|
||||
HCI_LE_SCAN,
|
||||
HCI_SSP_ENABLED,
|
||||
|
@ -1327,8 +1328,8 @@ struct sockaddr_hci {
|
|||
#define HCI_DEV_NONE 0xffff
|
||||
|
||||
#define HCI_CHANNEL_RAW 0
|
||||
#define HCI_CHANNEL_CONTROL 1
|
||||
#define HCI_CHANNEL_MONITOR 2
|
||||
#define HCI_CHANNEL_CONTROL 3
|
||||
|
||||
struct hci_filter {
|
||||
unsigned long type_mask;
|
||||
|
|
|
@ -427,7 +427,7 @@ enum {
|
|||
static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
|
||||
{
|
||||
struct hci_dev *hdev = conn->hdev;
|
||||
return (test_bit(HCI_SSP_ENABLED, &hdev->flags) &&
|
||||
return (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
|
||||
test_bit(HCI_CONN_SSP_ENABLED, &conn->flags));
|
||||
}
|
||||
|
||||
|
@ -907,11 +907,13 @@ static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status,
|
|||
|
||||
static inline bool eir_has_data_type(u8 *data, size_t data_len, u8 type)
|
||||
{
|
||||
u8 field_len;
|
||||
size_t parsed;
|
||||
size_t parsed = 0;
|
||||
|
||||
for (parsed = 0; parsed < data_len - 1; parsed += field_len) {
|
||||
field_len = data[0];
|
||||
if (data_len < 2)
|
||||
return false;
|
||||
|
||||
while (parsed < data_len - 1) {
|
||||
u8 field_len = data[0];
|
||||
|
||||
if (field_len == 0)
|
||||
break;
|
||||
|
|
|
@ -117,7 +117,7 @@ struct mgmt_mode {
|
|||
#define MGMT_OP_SET_DISCOVERABLE 0x0006
|
||||
struct mgmt_cp_set_discoverable {
|
||||
__u8 val;
|
||||
__u16 timeout;
|
||||
__le16 timeout;
|
||||
} __packed;
|
||||
#define MGMT_SET_DISCOVERABLE_SIZE 3
|
||||
|
||||
|
|
|
@ -665,6 +665,11 @@ int hci_dev_open(__u16 dev)
|
|||
|
||||
hci_req_lock(hdev);
|
||||
|
||||
if (test_bit(HCI_UNREGISTER, &hdev->dev_flags)) {
|
||||
ret = -ENODEV;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
|
||||
ret = -ERFKILL;
|
||||
goto done;
|
||||
|
@ -1849,6 +1854,8 @@ void hci_unregister_dev(struct hci_dev *hdev)
|
|||
|
||||
BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
|
||||
|
||||
set_bit(HCI_UNREGISTER, &hdev->dev_flags);
|
||||
|
||||
write_lock(&hci_dev_list_lock);
|
||||
list_del(&hdev->list);
|
||||
write_unlock(&hci_dev_list_lock);
|
||||
|
|
|
@ -1308,6 +1308,7 @@ static void l2cap_monitor_timeout(struct work_struct *work)
|
|||
if (chan->retry_count >= chan->remote_max_tx) {
|
||||
l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
|
||||
l2cap_chan_unlock(chan);
|
||||
l2cap_chan_put(chan);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1316,6 +1317,7 @@ static void l2cap_monitor_timeout(struct work_struct *work)
|
|||
|
||||
l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
|
||||
l2cap_chan_unlock(chan);
|
||||
l2cap_chan_put(chan);
|
||||
}
|
||||
|
||||
static void l2cap_retrans_timeout(struct work_struct *work)
|
||||
|
@ -1335,6 +1337,7 @@ static void l2cap_retrans_timeout(struct work_struct *work)
|
|||
l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
|
||||
|
||||
l2cap_chan_unlock(chan);
|
||||
l2cap_chan_put(chan);
|
||||
}
|
||||
|
||||
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
|
||||
|
|
|
@ -82,7 +82,7 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
|
|||
}
|
||||
|
||||
if (la.l2_cid)
|
||||
err = l2cap_add_scid(chan, la.l2_cid);
|
||||
err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
|
||||
else
|
||||
err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
|
||||
|
||||
|
@ -123,7 +123,8 @@ static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int al
|
|||
if (la.l2_cid && la.l2_psm)
|
||||
return -EINVAL;
|
||||
|
||||
err = l2cap_chan_connect(chan, la.l2_psm, la.l2_cid, &la.l2_bdaddr);
|
||||
err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
|
||||
&la.l2_bdaddr);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
|
|
@ -2523,13 +2523,18 @@ static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
|
|||
|
||||
if (cp->val) {
|
||||
type = PAGE_SCAN_TYPE_INTERLACED;
|
||||
acp.interval = 0x0024; /* 22.5 msec page scan interval */
|
||||
|
||||
/* 22.5 msec page scan interval */
|
||||
acp.interval = __constant_cpu_to_le16(0x0024);
|
||||
} else {
|
||||
type = PAGE_SCAN_TYPE_STANDARD; /* default */
|
||||
acp.interval = 0x0800; /* default 1.28 sec page scan */
|
||||
|
||||
/* default 1.28 sec page scan */
|
||||
acp.interval = __constant_cpu_to_le16(0x0800);
|
||||
}
|
||||
|
||||
acp.window = 0x0012; /* default 11.25 msec page scan window */
|
||||
/* default 11.25 msec page scan window */
|
||||
acp.window = __constant_cpu_to_le16(0x0012);
|
||||
|
||||
err = hci_send_cmd(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY, sizeof(acp),
|
||||
&acp);
|
||||
|
@ -2936,7 +2941,7 @@ int mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
|
|||
name, name_len);
|
||||
|
||||
if (dev_class && memcmp(dev_class, "\0\0\0", 3) != 0)
|
||||
eir_len = eir_append_data(&ev->eir[eir_len], eir_len,
|
||||
eir_len = eir_append_data(ev->eir, eir_len,
|
||||
EIR_CLASS_OF_DEV, dev_class, 3);
|
||||
|
||||
put_unaligned_le16(eir_len, &ev->eir_len);
|
||||
|
|
Loading…
Reference in New Issue