diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/bluetooth/sco.c | 22 |
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 | ||
656 | static void sco_conn_defer_accept(struct hci_conn *conn) | 656 | static 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 | ||