Hi Fred, > In order to establish a transparent SCO connection, the correct settings must > be specified in the Setup Synchronous Connection request. For that, > voice_setting is added to ACL connection flags to set up the desired > parameters. If this value is zero, a legacy SCO connection will be requested. > This patch uses T2 settings. > > Signed-off-by: Frédéric Dalleau <frederic.dalleau@xxxxxxxxxxxxxxx> > --- > include/net/bluetooth/hci_core.h | 1 + > net/bluetooth/hci_conn.c | 22 ++++++++++++++++++---- > 2 files changed, 19 insertions(+), 4 deletions(-) > > diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h > index 5c6c5b0..98f8c15 100644 > --- a/include/net/bluetooth/hci_core.h > +++ b/include/net/bluetooth/hci_core.h > @@ -328,6 +328,7 @@ struct hci_conn { > __u32 passkey_notify; > __u8 passkey_entered; > __u16 disc_timeout; > + __u16 setting; > unsigned long flags; > > __u8 remote_cap; > diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c > index 61f686b..cface45 100644 > --- a/net/bluetooth/hci_conn.c > +++ b/net/bluetooth/hci_conn.c > @@ -185,13 +185,25 @@ void hci_setup_sync(struct hci_conn *conn, __u16 handle) > conn->attempt++; > > cp.handle = cpu_to_le16(handle); > - cp.pkt_type = cpu_to_le16(conn->pkt_type); > > cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40); > cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40); > - cp.max_latency = __constant_cpu_to_le16(0xffff); > - cp.voice_setting = cpu_to_le16(hdev->voice_setting); > - cp.retrans_effort = 0xff; > + > + switch (conn->setting) { > + case BT_VOICE_TRANSPARENT: I think we should just check the bits for air codec and see if they match transparent vs cvsd and not use constants here. > + cp.pkt_type = __constant_cpu_to_le16(EDR_ESCO_MASK & > + ~ESCO_2EV3); > + cp.max_latency = __constant_cpu_to_le16(0x000d); > + cp.voice_setting = __constant_cpu_to_le16(0x0003); > + cp.retrans_effort = 0x02; > + break; > + default: > + cp.pkt_type = cpu_to_le16(conn->pkt_type); > + cp.max_latency = __constant_cpu_to_le16(0xffff); > + cp.voice_setting = cpu_to_le16(hdev->voice_setting); Also if we start setting socket voice_setting options, we need to start using that at some point. The controller default should only be used to initialize the controller or fill in the missing information in case of using the old Add_SCO command. Regards Marcel -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html