void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
                        u16 latency, u16 to_multiplier)
 {
-       struct hci_cp_le_conn_update cp;
        struct hci_dev *hdev = conn->hdev;
+       struct hci_conn_params *params;
+       struct hci_cp_le_conn_update cp;
 
-       memset(&cp, 0, sizeof(cp));
+       hci_dev_lock(hdev);
+
+       params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
+       if (params) {
+               params->conn_min_interval = min;
+               params->conn_max_interval = max;
+               params->conn_latency = latency;
+               params->supervision_timeout = to_multiplier;
+       }
 
+       hci_dev_unlock(hdev);
+
+       memset(&cp, 0, sizeof(cp));
        cp.handle               = cpu_to_le16(conn->handle);
        cp.conn_interval_min    = cpu_to_le16(min);
        cp.conn_interval_max    = cpu_to_le16(max);
 
 update:
        params->conn_min_interval = conn_min_interval;
        params->conn_max_interval = conn_max_interval;
+       params->conn_latency = 0x0000;
+       params->supervision_timeout = 0x002a;
        params->auto_connect = auto_connect;
 
        switch (auto_connect) {