The MediaTek Bluetooth platform (MT6630 etc.) has a peculiar implementation for the eSCO/SCO connection via BT/EDR: the host controller returns error code 0x20 (LMP feature not supported) for HCI_Setup_Synchronous_Connection (0x0028) command without actually trying to setup connection with a remote device in case such device (like Digma BT-14 headset) didn't advertise its supported features. Even though this doesn't break compatibility with the Bluetooth standard it breaks the compatibility with the Hands-Free Profile (HFP). This patch returns the compatibility with the HFP profile and actually tries to check all available connection parameters despite of the specific MediaTek implementation. Without it one was unable to establish eSCO/SCO connection with some headsets. Based on the patch by Ildar Kamaletdinov <i.kamaletdinov@xxxxxxxxxxxx>. Signed-off-by: Sergey Shtylyov <s.shtylyov@xxxxxxxxxxxx> --- This patch is against the 'bluetooth-next.git' repo. net/bluetooth/hci_event.c | 8 ++++++++ 1 file changed, 8 insertions(+) Index: bluetooth-next/net/bluetooth/hci_event.c =================================================================== --- bluetooth-next.orig/net/bluetooth/hci_event.c +++ bluetooth-next/net/bluetooth/hci_event.c @@ -2187,6 +2187,13 @@ static void hci_cs_setup_sync_conn(struc if (acl) { sco = acl->link; if (sco) { + if (status == 0x20 && /* Unsupported LMP Parameter value */ + sco->out) { + sco->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) | + (hdev->esco_type & EDR_ESCO_MASK); + if (hci_setup_sync(sco, sco->link->handle)) + goto unlock; + } sco->state = BT_CLOSED; hci_connect_cfm(sco, status); @@ -2194,6 +2201,7 @@ static void hci_cs_setup_sync_conn(struc } } +unlock: hci_dev_unlock(hdev); }