u16 conn_timeout, u8 role);
 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
                                 u8 sec_level, u8 auth_type,
-                                enum conn_reasons conn_reason);
+                                enum conn_reasons conn_reason, u16 timeout);
 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
-                                __u16 setting, struct bt_codec *codec);
+                                __u16 setting, struct bt_codec *codec,
+                                u16 timeout);
 struct hci_conn *hci_bind_cis(struct hci_dev *hdev, bdaddr_t *dst,
                              __u8 dst_type, struct bt_iso_qos *qos);
 struct hci_conn *hci_bind_bis(struct hci_dev *hdev, bdaddr_t *dst,
 
 struct l2cap_chan *l2cap_chan_create(void);
 void l2cap_chan_close(struct l2cap_chan *chan, int reason);
 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
-                      bdaddr_t *dst, u8 dst_type);
+                      bdaddr_t *dst, u8 dst_type, u16 timeout);
 int l2cap_chan_reconfigure(struct l2cap_chan *chan, __u16 mtu);
 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
 void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
 
        chan->ops = &bt_6lowpan_chan_ops;
 
        err = l2cap_chan_connect(chan, cpu_to_le16(L2CAP_PSM_IPSP), 0,
-                                addr, dst_type);
+                                addr, dst_type, L2CAP_CONN_TIMEOUT);
 
        BT_DBG("chan %p err %d", chan, err);
        if (err < 0)
 
 
 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
                                 u8 sec_level, u8 auth_type,
-                                enum conn_reasons conn_reason)
+                                enum conn_reasons conn_reason, u16 timeout)
 {
        struct hci_conn *acl;
 
                acl->sec_level = BT_SECURITY_LOW;
                acl->pending_sec_level = sec_level;
                acl->auth_type = auth_type;
+               acl->conn_timeout = timeout;
 
                err = hci_acl_create_connection_sync(hdev, acl);
                if (err) {
 }
 
 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
-                                __u16 setting, struct bt_codec *codec)
+                                __u16 setting, struct bt_codec *codec,
+                                u16 timeout)
 {
        struct hci_conn *acl;
        struct hci_conn *sco;
        struct hci_link *link;
 
        acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING,
-                             CONN_REASON_SCO_CONNECT);
+                             CONN_REASON_SCO_CONNECT, timeout);
        if (IS_ERR(acl))
                return acl;
 
 
        err = __hci_cmd_sync_status_sk(hdev, HCI_OP_CREATE_CONN,
                                       sizeof(cp), &cp,
                                       HCI_EV_CONN_COMPLETE,
-                                      HCI_ACL_CONN_TIMEOUT, NULL);
+                                      conn->conn_timeout, NULL);
 
        if (err == -ETIMEDOUT)
                hci_abort_conn_sync(hdev, conn, HCI_ERROR_LOCAL_HOST_TERM);
 
 }
 
 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
-                      bdaddr_t *dst, u8 dst_type)
+                      bdaddr_t *dst, u8 dst_type, u16 timeout)
 {
        struct l2cap_conn *conn;
        struct hci_conn *hcon;
 
                if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
                        hcon = hci_connect_le(hdev, dst, dst_type, false,
-                                             chan->sec_level,
-                                             HCI_LE_CONN_TIMEOUT,
+                                             chan->sec_level, timeout,
                                              HCI_ROLE_SLAVE);
                else
                        hcon = hci_connect_le_scan(hdev, dst, dst_type,
-                                                  chan->sec_level,
-                                                  HCI_LE_CONN_TIMEOUT,
+                                                  chan->sec_level, timeout,
                                                   CONN_REASON_L2CAP_CHAN);
 
        } else {
                u8 auth_type = l2cap_get_auth_type(chan);
                hcon = hci_connect_acl(hdev, dst, chan->sec_level, auth_type,
-                                      CONN_REASON_L2CAP_CHAN);
+                                      CONN_REASON_L2CAP_CHAN, timeout);
        }
 
        if (IS_ERR(hcon)) {
 
                chan->mode = L2CAP_MODE_LE_FLOWCTL;
 
        err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
-                                &la.l2_bdaddr, la.l2_bdaddr_type);
+                                &la.l2_bdaddr, la.l2_bdaddr_type,
+                                sk->sk_sndtimeo);
        if (err)
                return err;
 
 
 
        if (cp->addr.type == BDADDR_BREDR) {
                conn = hci_connect_acl(hdev, &cp->addr.bdaddr, sec_level,
-                                      auth_type, CONN_REASON_PAIR_DEVICE);
+                                      auth_type, CONN_REASON_PAIR_DEVICE,
+                                      HCI_ACL_CONN_TIMEOUT);
        } else {
                u8 addr_type = le_addr_type(cp->addr.type);
                struct hci_conn_params *p;
 
        }
 
        hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
-                              sco_pi(sk)->setting, &sco_pi(sk)->codec);
+                              sco_pi(sk)->setting, &sco_pi(sk)->codec,
+                              sk->sk_sndtimeo);
        if (IS_ERR(hcon)) {
                err = PTR_ERR(hcon);
                goto unlock;