greybus: allocate connection host cport id

Allocate a cport id from the host device whenever creating a
connection.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c
index fa5ab5d..b16ac4c 100644
--- a/drivers/staging/greybus/connection.c
+++ b/drivers/staging/greybus/connection.c
@@ -23,7 +23,7 @@
  * pointer otherwise.
  */
 struct gb_connection *gb_connection_create(struct greybus_host_device *hd,
-				u16 cport_id, struct gb_function *function)
+				struct gb_function *function)
 {
 	struct gb_connection *connection;
 
@@ -31,8 +31,13 @@
 	if (!connection)
 		return NULL;
 
+	connection->cport_id = greybus_hd_cport_id_alloc(hd);
+	if (connection->cport_id == CPORT_ID_BAD) {
+		kfree(connection);
+		return NULL;
+	}
+
 	connection->hd = hd;			/* XXX refcount? */
-	connection->cport_id = cport_id;
 	connection->function = function;	/* XXX refcount? */
 	INIT_LIST_HEAD(&connection->operations);
 	atomic_set(&connection->op_cycle, 0);
@@ -51,6 +56,7 @@
 	/* XXX Need to wait for any outstanding requests to complete */
 	WARN_ON(!list_empty(&connection->operations));
 
+	greybus_hd_cport_id_free(connection->hd, connection->cport_id);
 	/* kref_put(function); */
 	/* kref_put(hd); */
 	kfree(connection);
diff --git a/drivers/staging/greybus/connection.h b/drivers/staging/greybus/connection.h
index 6094fb4..f06ff92 100644
--- a/drivers/staging/greybus/connection.h
+++ b/drivers/staging/greybus/connection.h
@@ -25,7 +25,7 @@
 };
 
 struct gb_connection *gb_connection_create(struct greybus_host_device *hd,
-				u16 cport_id, struct gb_function *function);
+					struct gb_function *function);
 void gb_connection_destroy(struct gb_connection *connection);
 
 u16 gb_connection_op_id(struct gb_connection *connection);