Bluetooth: Add LE connection parameter update
[platform/kernel/linux-rpi.git] / net / bluetooth / l2cap_sock.c
index d2c6785..d31e3e4 100644 (file)
@@ -1133,6 +1133,41 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
 
                break;
 
+#ifdef TIZEN_BT
+       case BT_LE_CONN_PARAM: {
+               struct hci_dev *hdev;
+               struct le_conn_param param;
+               int err;
+
+               len = min_t(unsigned int, sizeof(param), optlen);
+               if (copy_from_sockptr(&param, optval, len)) {
+                       err = -EFAULT;
+                       break;
+               }
+
+               err = hci_check_conn_params(param.min, param.max,
+                               param.latency, param.to_multiplier);
+               if (err < 0)
+                       break;
+
+               conn = chan->conn;
+               hdev = conn->hcon->hdev;
+               if (conn->hcon->out ||
+                       (hdev->le_features[0] & HCI_LE_CONN_PARAM_REQ_PROC &&
+                       conn->hcon->features[0][0] & HCI_LE_CONN_PARAM_REQ_PROC)) {
+                       BT_DBG("use hci_le_conn_update");
+                       err = hci_le_conn_update(conn->hcon, param.min,
+                                               param.max, param.latency,
+                                               param.to_multiplier);
+                       break;
+               }
+               BT_DBG("use l2cap conn_update");
+               err = l2cap_update_connection_param(conn, param.min,
+                       param.max, param.latency, param.to_multiplier);
+               break;
+       }
+#endif
+
        default:
                err = -ENOPROTOOPT;
                break;