--- net/bluetooth/hci_conn.c.orig 2008-01-28 09:15:50.000000000 +0100 +++ net/bluetooth/hci_conn.c 2008-01-28 09:25:19.000000000 +0100 @@ -332,6 +332,11 @@ if (type == ACL_LINK) return acl; + if (lmp_esco_capable(hdev) && lmp_esco_capable(acl)) { + type=ESCO_LINK; + } else { + type=SCO_LINK; + } if (!(sco = hci_conn_hash_lookup_ba(hdev, type, dst))) { if (!(sco = hci_conn_add(hdev, type, dst))) { hci_conn_put(acl); @@ -346,7 +351,7 @@ if (acl->state == BT_CONNECTED && (sco->state == BT_OPEN || sco->state == BT_CLOSED)) { - if (lmp_esco_capable(hdev)) + if (type==ESCO_LINK) hci_setup_sync(sco, acl->handle); else hci_add_sco(sco, acl->handle); --- net/bluetooth/sco.c.orig 2008-01-28 09:15:14.000000000 +0100 +++ net/bluetooth/sco.c 2008-01-28 09:21:00.000000000 +0100 @@ -189,7 +189,7 @@ struct sco_conn *conn; struct hci_conn *hcon; struct hci_dev *hdev; - int err, type; + int err; BT_DBG("%s -> %s", batostr(src), batostr(dst)); @@ -200,9 +200,7 @@ err = -ENOMEM; - type = lmp_esco_capable(hdev) ? ESCO_LINK : SCO_LINK; - - hcon = hci_connect(hdev, type, dst); + hcon = hci_connect(hdev, SCO_LINK, dst); if (!hcon) goto done;