diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c
index b88abed2e1ad5cf4e50db6d35f1a5a42b25cb729..0cd716d58a3aa854120f2f4e6196ed0f046e0e4d 100644
--- a/drivers/staging/greybus/connection.c
+++ b/drivers/staging/greybus/connection.c
@@ -111,6 +111,30 @@ struct device_type greybus_connection_type = {
 };
 
 
+int svc_update_connection(struct gb_interface *intf,
+			  struct gb_connection *connection)
+{
+	struct gb_bundle *bundle;
+
+	bundle = gb_bundle_create(intf, GB_SVC_BUNDLE_ID, GREYBUS_CLASS_SVC);
+	if (!bundle)
+		return -EINVAL;
+
+	device_del(&connection->dev);
+	connection->bundle = bundle;
+	connection->dev.parent = &bundle->dev;
+	dev_set_name(&connection->dev, "%s:%d", dev_name(&bundle->dev),
+		     GB_SVC_CPORT_ID);
+
+	WARN_ON(device_add(&connection->dev));
+
+	spin_lock_irq(&gb_connections_lock);
+	list_add(&connection->bundle_links, &bundle->connections);
+	spin_unlock_irq(&gb_connections_lock);
+
+	return 0;
+}
+
 void gb_connection_bind_protocol(struct gb_connection *connection)
 {
 	struct gb_protocol *protocol;
diff --git a/drivers/staging/greybus/connection.h b/drivers/staging/greybus/connection.h
index 6b40c4aeeeacb6f6b1c3b39a98d9cdba381d7cc0..f02b9d9fb0845223b378dc5bc3f5b977983951bc 100644
--- a/drivers/staging/greybus/connection.h
+++ b/drivers/staging/greybus/connection.h
@@ -47,6 +47,8 @@ struct gb_connection {
 };
 #define to_gb_connection(d) container_of(d, struct gb_connection, dev)
 
+int svc_update_connection(struct gb_interface *intf,
+			  struct gb_connection *connection);
 struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
 				u16 cport_id, u8 protocol_id);
 struct gb_connection *gb_connection_create_range(struct greybus_host_device *hd,
diff --git a/drivers/staging/greybus/svc.c b/drivers/staging/greybus/svc.c
index ebd282d33e66479c75db7c8efa86803667d75730..28a4ca9f8aca5a200822f5f865e4e663db9e7661 100644
--- a/drivers/staging/greybus/svc.c
+++ b/drivers/staging/greybus/svc.c
@@ -43,7 +43,6 @@ gb_ap_interface_create(struct greybus_host_device *hd,
 {
 	struct gb_interface *intf;
 	struct device *dev = &hd->endo->dev;
-	int ret;
 
 	intf = gb_interface_create(hd, interface_id);
 	if (!intf) {
@@ -53,20 +52,7 @@ gb_ap_interface_create(struct greybus_host_device *hd,
 	}
 
 	intf->device_id = GB_DEVICE_ID_AP;
-
-	/*
-	 * XXX: Disable the initial svc connection here, but don't destroy it
-	 * yet. We do need to send a response of 'svc-hello message' on that.
-	 */
-
-	/* Establish new control CPort connection */
-	ret = gb_create_bundle_connection(intf, GREYBUS_CLASS_SVC);
-	if (ret) {
-		dev_err(&intf->dev, "%s: Failed to create svc connection (%d %d)\n",
-			__func__, interface_id, ret);
-		gb_interface_destroy(intf);
-		intf = NULL;
-	}
+	svc_update_connection(intf, connection);
 
 	return intf;
 }