Hi Fred, > When an incoming SCO connection is requested, check the selected voice setting, > and reply appropriately. Voice setting should have been negotiated previously. > For example, in case of HFP, the codec is negotiated using AT commands on the > RFCOMM channel. This patch only changes replies for socket with defered setup > enabled. > > Signed-off-by: Frédéric Dalleau <frederic.dalleau@xxxxxxxxxxxxxxx> > --- > net/bluetooth/sco.c | 23 ++++++++++++++++++----- > 1 file changed, 18 insertions(+), 5 deletions(-) > > diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c > index 4e69923..876f80e 100644 > --- a/net/bluetooth/sco.c > +++ b/net/bluetooth/sco.c > @@ -653,7 +653,7 @@ static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock, > return err; > } > > -static void sco_conn_defer_accept(struct hci_conn *conn, int mask) > +static void sco_conn_defer_accept(struct hci_conn *conn, int mask, int setting) > { > struct hci_dev *hdev = conn->hdev; > > @@ -680,9 +680,22 @@ static void sco_conn_defer_accept(struct hci_conn *conn, int mask) are we keep using the mask parameter here? > > 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.content_format = cpu_to_le16(hdev->voice_setting); > - cp.retrans_effort = 0xff; > + > + switch (setting) { > + case BT_VOICE_TRANSPARENT: > + if (conn->pkt_type & ESCO_2EV3) > + cp.max_latency = __constant_cpu_to_le16(0x0008); > + else > + cp.max_latency = __constant_cpu_to_le16(0x000D); > + cp.content_format = __constant_cpu_to_le16(0x0003); > + cp.retrans_effort = 0x02; > + break; > + default: > + cp.max_latency = __constant_cpu_to_le16(0xffff); > + cp.content_format = cpu_to_le16(hdev->voice_setting); > + cp.retrans_effort = 0xff; > + break; > + } > > hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ, > sizeof(cp), &cp); > @@ -699,7 +712,7 @@ static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock, > > if (sk->sk_state == BT_CONNECT2 && > test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { > - sco_conn_defer_accept(pi->conn->hcon, 0); > + sco_conn_defer_accept(pi->conn->hcon, 0, pi->setting); If the mask is always 0, then please just send a patch to remove that parameter. 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