aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-07-26 10:06:00 -0400
committerMarcel Holtmann <marcel@holtmann.org>2010-07-27 15:29:04 -0400
commite73439d8c0e4c522c843b8bb98c0eb5700da6b05 (patch)
tree0ca070acc02700061380bd40315e39684b3e59fa /include/net
parent800f65bba8d2030b3fef62850e203f9f176625a8 (diff)
Bluetooth: Defer SCO setup if mode change is pending
Certain headsets such as the Motorola H350 will reject SCO and eSCO connection requests while the ACL is transitioning from sniff mode to active mode. Add synchronization so that SCO and eSCO connection requests will wait until the ACL has fully transitioned to active mode. < HCI Command: Exit Sniff Mode (0x02|0x0004) plen 2 handle 12 > HCI Event: Command Status (0x0f) plen 4 Exit Sniff Mode (0x02|0x0004) status 0x00 ncmd 1 < HCI Command: Setup Synchronous Connection (0x01|0x0028) plen 17 handle 12 voice setting 0x0040 > HCI Event: Command Status (0x0f) plen 4 Setup Synchronous Connection (0x01|0x0028) status 0x00 ncmd 1 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 12 packets 1 > HCI Event: Mode Change (0x14) plen 6 status 0x00 handle 12 mode 0x00 interval 0 Mode: Active > HCI Event: Synchronous Connect Complete (0x2c) plen 17 status 0x10 handle 14 bdaddr 00:1A:0E:50:28:A4 type SCO Error: Connection Accept Timeout Exceeded Signed-off-by: Ron Shaffer <rshaffer@codeaurora.org> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/bluetooth/hci_core.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 350b3e6964bd..8b28962e737e 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -256,6 +256,7 @@ enum {
256 HCI_CONN_ENCRYPT_PEND, 256 HCI_CONN_ENCRYPT_PEND,
257 HCI_CONN_RSWITCH_PEND, 257 HCI_CONN_RSWITCH_PEND,
258 HCI_CONN_MODE_CHANGE_PEND, 258 HCI_CONN_MODE_CHANGE_PEND,
259 HCI_CONN_SCO_SETUP_PEND,
259}; 260};
260 261
261static inline void hci_conn_hash_init(struct hci_dev *hdev) 262static inline void hci_conn_hash_init(struct hci_dev *hdev)
@@ -336,6 +337,7 @@ void hci_acl_connect(struct hci_conn *conn);
336void hci_acl_disconn(struct hci_conn *conn, __u8 reason); 337void hci_acl_disconn(struct hci_conn *conn, __u8 reason);
337void hci_add_sco(struct hci_conn *conn, __u16 handle); 338void hci_add_sco(struct hci_conn *conn, __u16 handle);
338void hci_setup_sync(struct hci_conn *conn, __u16 handle); 339void hci_setup_sync(struct hci_conn *conn, __u16 handle);
340void hci_sco_setup(struct hci_conn *conn, __u8 status);
339 341
340struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst); 342struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
341int hci_conn_del(struct hci_conn *conn); 343int hci_conn_del(struct hci_conn *conn);