Linux-Bluetooth Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH RFC] bluetooth: add support for some old headsets
@ 2020-07-16 11:08 Sergey Shtylyov
  2020-07-16 13:14 ` Marcel Holtmann
  0 siblings, 1 reply; 8+ messages in thread
From: Sergey Shtylyov @ 2020-07-16 11:08 UTC (permalink / raw)
  To: Marcel Holtmann, Johan Hedberg, linux-bluetooth
  Cc: David S. Miller, Jakub Kicinski, netdev

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@omprussia.ru>.

Signed-off-by: Sergey Shtylyov <s.shtylyov@omprussia.ru>

---
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);
 }
 

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, back to index

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-16 11:08 [PATCH RFC] bluetooth: add support for some old headsets Sergey Shtylyov
2020-07-16 13:14 ` Marcel Holtmann
2020-07-16 20:33   ` Sergey Shtylyov
2020-07-17  6:59     ` Marcel Holtmann
2020-07-17 19:12       ` Sergey Shtylyov
2020-07-21 18:56         ` Sergey Shtylyov
2020-07-28  7:16           ` Marcel Holtmann
2020-07-28 13:27             ` Ildar Kamaletdinov

Linux-Bluetooth Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-bluetooth/0 linux-bluetooth/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-bluetooth linux-bluetooth/ https://lore.kernel.org/linux-bluetooth \
		linux-bluetooth@vger.kernel.org
	public-inbox-index linux-bluetooth

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-bluetooth


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git