__u32           passkey_notify;
        __u8            passkey_entered;
        __u16           disc_timeout;
+       __u16           setting;
        unsigned long   flags;
 
        __u8            remote_cap;
 
 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
                             __u8 dst_type, __u8 sec_level, __u8 auth_type);
-struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type,
-                                bdaddr_t *dst);
+struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
+                                __u16 setting);
 int hci_conn_check_link_mode(struct hci_conn *conn);
 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type);
 
        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;
+       cp.voice_setting  = cpu_to_le16(conn->setting);
+
+       switch (conn->setting & SCO_AIRMODE_MASK) {
+       case SCO_AIRMODE_TRANSP:
+               cp.pkt_type = __constant_cpu_to_le16(EDR_ESCO_MASK &
+                                                    ~ESCO_2EV3);
+               cp.max_latency = __constant_cpu_to_le16(0x000d);
+               cp.retrans_effort = 0x02;
+               break;
+       case SCO_AIRMODE_CVSD:
+               cp.pkt_type = cpu_to_le16(conn->pkt_type);
+               cp.max_latency = __constant_cpu_to_le16(0xffff);
+               cp.retrans_effort = 0xff;
+               break;
+       }
 
        hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp);
 }
        return acl;
 }
 
-struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst)
+struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
+                                __u16 setting)
 {
        struct hci_conn *acl;
        struct hci_conn *sco;
 
        hci_conn_hold(sco);
 
+       sco->setting = setting;
+
        if (acl->state == BT_CONNECTED &&
            (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
                set_bit(HCI_CONN_POWER_SAVE, &acl->flags);