aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/bluetooth/sco.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
index 678747e2e389..b1016c82c908 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,
653 return err; 653 return err;
654} 654}
655 655
656static void sco_conn_defer_accept(struct hci_conn *conn) 656static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
657{ 657{
658 struct hci_dev *hdev = conn->hdev; 658 struct hci_dev *hdev = conn->hdev;
659 659
@@ -676,9 +676,21 @@ static void sco_conn_defer_accept(struct hci_conn *conn)
676 676
677 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40); 677 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
678 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40); 678 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
679 cp.max_latency = __constant_cpu_to_le16(0xffff); 679 cp.content_format = cpu_to_le16(setting);
680 cp.content_format = cpu_to_le16(hdev->voice_setting); 680
681 cp.retrans_effort = 0xff; 681 switch (setting & SCO_AIRMODE_MASK) {
682 case SCO_AIRMODE_TRANSP:
683 if (conn->pkt_type & ESCO_2EV3)
684 cp.max_latency = __constant_cpu_to_le16(0x0008);
685 else
686 cp.max_latency = __constant_cpu_to_le16(0x000D);
687 cp.retrans_effort = 0x02;
688 break;
689 case SCO_AIRMODE_CVSD:
690 cp.max_latency = __constant_cpu_to_le16(0xffff);
691 cp.retrans_effort = 0xff;
692 break;
693 }
682 694
683 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ, 695 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
684 sizeof(cp), &cp); 696 sizeof(cp), &cp);
@@ -695,7 +707,7 @@ static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
695 707
696 if (sk->sk_state == BT_CONNECT2 && 708 if (sk->sk_state == BT_CONNECT2 &&
697 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { 709 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
698 sco_conn_defer_accept(pi->conn->hcon); 710 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
699 sk->sk_state = BT_CONFIG; 711 sk->sk_state = BT_CONFIG;
700 msg->msg_namelen = 0; 712 msg->msg_namelen = 0;
701 713