diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/bluetooth/hci_conn.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 6d0fe3df2fa5..8a0c7a0ac1b6 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c | |||
@@ -309,6 +309,25 @@ static void hci_conn_timeout(struct work_struct *work) | |||
309 | hci_amp_disconn(conn); | 309 | hci_amp_disconn(conn); |
310 | } else { | 310 | } else { |
311 | __u8 reason = hci_proto_disconn_ind(conn); | 311 | __u8 reason = hci_proto_disconn_ind(conn); |
312 | |||
313 | /* When we are master of an established connection | ||
314 | * and it enters the disconnect timeout, then go | ||
315 | * ahead and try to read the current clock offset. | ||
316 | * | ||
317 | * Processing of the result is done within the | ||
318 | * event handling and hci_clock_offset_evt function. | ||
319 | */ | ||
320 | if (conn->type == ACL_LINK && | ||
321 | test_bit(HCI_CONN_MASTER, &conn->flags)) { | ||
322 | struct hci_dev *hdev = conn->hdev; | ||
323 | struct hci_cp_read_clock_offset cp; | ||
324 | |||
325 | cp.handle = cpu_to_le16(conn->handle); | ||
326 | |||
327 | hci_send_cmd(hdev, HCI_OP_READ_CLOCK_OFFSET, | ||
328 | sizeof(cp), &cp); | ||
329 | } | ||
330 | |||
312 | hci_disconnect(conn, reason); | 331 | hci_disconnect(conn, reason); |
313 | } | 332 | } |
314 | break; | 333 | break; |