Commit d6124baf authored by John W. Linville's avatar John W. Linville

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/padovan/bluetooth-2.6

parents 51e65257 7f4f0572
...@@ -64,6 +64,8 @@ static ssize_t btmrvl_hscfgcmd_write(struct file *file, ...@@ -64,6 +64,8 @@ static ssize_t btmrvl_hscfgcmd_write(struct file *file,
return -EFAULT; return -EFAULT;
ret = strict_strtol(buf, 10, &result); ret = strict_strtol(buf, 10, &result);
if (ret)
return ret;
priv->btmrvl_dev.hscfgcmd = result; priv->btmrvl_dev.hscfgcmd = result;
...@@ -108,6 +110,8 @@ static ssize_t btmrvl_psmode_write(struct file *file, const char __user *ubuf, ...@@ -108,6 +110,8 @@ static ssize_t btmrvl_psmode_write(struct file *file, const char __user *ubuf,
return -EFAULT; return -EFAULT;
ret = strict_strtol(buf, 10, &result); ret = strict_strtol(buf, 10, &result);
if (ret)
return ret;
priv->btmrvl_dev.psmode = result; priv->btmrvl_dev.psmode = result;
...@@ -147,6 +151,8 @@ static ssize_t btmrvl_pscmd_write(struct file *file, const char __user *ubuf, ...@@ -147,6 +151,8 @@ static ssize_t btmrvl_pscmd_write(struct file *file, const char __user *ubuf,
return -EFAULT; return -EFAULT;
ret = strict_strtol(buf, 10, &result); ret = strict_strtol(buf, 10, &result);
if (ret)
return ret;
priv->btmrvl_dev.pscmd = result; priv->btmrvl_dev.pscmd = result;
...@@ -191,6 +197,8 @@ static ssize_t btmrvl_gpiogap_write(struct file *file, const char __user *ubuf, ...@@ -191,6 +197,8 @@ static ssize_t btmrvl_gpiogap_write(struct file *file, const char __user *ubuf,
return -EFAULT; return -EFAULT;
ret = strict_strtol(buf, 16, &result); ret = strict_strtol(buf, 16, &result);
if (ret)
return ret;
priv->btmrvl_dev.gpio_gap = result; priv->btmrvl_dev.gpio_gap = result;
...@@ -230,6 +238,8 @@ static ssize_t btmrvl_hscmd_write(struct file *file, const char __user *ubuf, ...@@ -230,6 +238,8 @@ static ssize_t btmrvl_hscmd_write(struct file *file, const char __user *ubuf,
return -EFAULT; return -EFAULT;
ret = strict_strtol(buf, 10, &result); ret = strict_strtol(buf, 10, &result);
if (ret)
return ret;
priv->btmrvl_dev.hscmd = result; priv->btmrvl_dev.hscmd = result;
if (priv->btmrvl_dev.hscmd) { if (priv->btmrvl_dev.hscmd) {
...@@ -272,6 +282,8 @@ static ssize_t btmrvl_hsmode_write(struct file *file, const char __user *ubuf, ...@@ -272,6 +282,8 @@ static ssize_t btmrvl_hsmode_write(struct file *file, const char __user *ubuf,
return -EFAULT; return -EFAULT;
ret = strict_strtol(buf, 10, &result); ret = strict_strtol(buf, 10, &result);
if (ret)
return ret;
priv->btmrvl_dev.hsmode = result; priv->btmrvl_dev.hsmode = result;
......
...@@ -477,14 +477,16 @@ static void hci_setup_event_mask(struct hci_dev *hdev) ...@@ -477,14 +477,16 @@ static void hci_setup_event_mask(struct hci_dev *hdev)
* command otherwise */ * command otherwise */
u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 }; u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
/* Events for 1.2 and newer controllers */ /* CSR 1.1 dongles does not accept any bitfield so don't try to set
if (hdev->lmp_ver > 1) { * any event mask for pre 1.2 devices */
events[4] |= 0x01; /* Flow Specification Complete */ if (hdev->lmp_ver <= 1)
events[4] |= 0x02; /* Inquiry Result with RSSI */ return;
events[4] |= 0x04; /* Read Remote Extended Features Complete */
events[5] |= 0x08; /* Synchronous Connection Complete */ events[4] |= 0x01; /* Flow Specification Complete */
events[5] |= 0x10; /* Synchronous Connection Changed */ events[4] |= 0x02; /* Inquiry Result with RSSI */
} events[4] |= 0x04; /* Read Remote Extended Features Complete */
events[5] |= 0x08; /* Synchronous Connection Complete */
events[5] |= 0x10; /* Synchronous Connection Changed */
if (hdev->features[3] & LMP_RSSI_INQ) if (hdev->features[3] & LMP_RSSI_INQ)
events[4] |= 0x04; /* Inquiry Result with RSSI */ events[4] |= 0x04; /* Inquiry Result with RSSI */
......
...@@ -413,6 +413,7 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __us ...@@ -413,6 +413,7 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __us
break; break;
} }
memset(&cinfo, 0, sizeof(cinfo));
cinfo.hci_handle = chan->conn->hcon->handle; cinfo.hci_handle = chan->conn->hcon->handle;
memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3); memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
......
...@@ -788,6 +788,7 @@ static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __u ...@@ -788,6 +788,7 @@ static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __u
l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk; l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk;
memset(&cinfo, 0, sizeof(cinfo));
cinfo.hci_handle = conn->hcon->handle; cinfo.hci_handle = conn->hcon->handle;
memcpy(cinfo.dev_class, conn->hcon->dev_class, 3); memcpy(cinfo.dev_class, conn->hcon->dev_class, 3);
......
...@@ -369,6 +369,15 @@ static void __sco_sock_close(struct sock *sk) ...@@ -369,6 +369,15 @@ static void __sco_sock_close(struct sock *sk)
case BT_CONNECTED: case BT_CONNECTED:
case BT_CONFIG: case BT_CONFIG:
if (sco_pi(sk)->conn) {
sk->sk_state = BT_DISCONN;
sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
hci_conn_put(sco_pi(sk)->conn->hcon);
sco_pi(sk)->conn->hcon = NULL;
} else
sco_chan_del(sk, ECONNRESET);
break;
case BT_CONNECT: case BT_CONNECT:
case BT_DISCONN: case BT_DISCONN:
sco_chan_del(sk, ECONNRESET); sco_chan_del(sk, ECONNRESET);
...@@ -819,7 +828,9 @@ static void sco_chan_del(struct sock *sk, int err) ...@@ -819,7 +828,9 @@ static void sco_chan_del(struct sock *sk, int err)
conn->sk = NULL; conn->sk = NULL;
sco_pi(sk)->conn = NULL; sco_pi(sk)->conn = NULL;
sco_conn_unlock(conn); sco_conn_unlock(conn);
hci_conn_put(conn->hcon);
if (conn->hcon)
hci_conn_put(conn->hcon);
} }
sk->sk_state = BT_CLOSED; sk->sk_state = BT_CLOSED;
......
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