|
@@ -484,6 +484,15 @@ static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb
|
|
|
if (hdev->features[4] & LMP_EV5)
|
|
|
hdev->esco_type |= (ESCO_EV5);
|
|
|
|
|
|
+ if (hdev->features[5] & LMP_EDR_ESCO_2M)
|
|
|
+ hdev->esco_type |= (ESCO_2EV3);
|
|
|
+
|
|
|
+ if (hdev->features[5] & LMP_EDR_ESCO_3M)
|
|
|
+ hdev->esco_type |= (ESCO_3EV3);
|
|
|
+
|
|
|
+ if (hdev->features[5] & LMP_EDR_3S_ESCO)
|
|
|
+ hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
|
|
|
+
|
|
|
BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
|
|
|
hdev->features[0], hdev->features[1],
|
|
|
hdev->features[2], hdev->features[3],
|
|
@@ -1639,6 +1648,13 @@ static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_bu
|
|
|
conn->type = SCO_LINK;
|
|
|
}
|
|
|
|
|
|
+ if (conn->out && ev->status == 0x1c && conn->attempt < 2) {
|
|
|
+ conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
|
|
|
+ (hdev->esco_type & EDR_ESCO_MASK);
|
|
|
+ hci_setup_sync(conn, conn->link->handle);
|
|
|
+ goto unlock;
|
|
|
+ }
|
|
|
+
|
|
|
if (!ev->status) {
|
|
|
conn->handle = __le16_to_cpu(ev->handle);
|
|
|
conn->state = BT_CONNECTED;
|