spin_unlock_irq(&connection->lock);
}
+/*
+ * Request the SVC to create a connection from AP's cport to interface's
+ * cport.
+ */
+static int
+gb_connection_svc_connection_create(struct gb_connection *connection)
+{
+ struct greybus_host_device *hd = connection->hd;
+ struct gb_protocol *protocol = connection->protocol;
+ int ret;
+
+ if (protocol->flags & GB_PROTOCOL_SKIP_SVC_CONNECTION)
+ return 0;
+
+ ret = gb_svc_connection_create(hd->svc,
+ hd->endo->ap_intf_id,
+ connection->hd_cport_id,
+ connection->bundle->intf->interface_id,
+ connection->intf_cport_id);
+ if (ret) {
+ dev_err(&connection->dev,
+ "failed to create svc connection: %d\n", ret);
+ return ret;
+ }
+
+ if (hd->driver->connection_create)
+ hd->driver->connection_create(connection);
+
+ return 0;
+}
+
static void
gb_connection_svc_connection_destroy(struct gb_connection *connection)
{
static int gb_connection_init(struct gb_connection *connection)
{
int cport_id = connection->intf_cport_id;
- struct greybus_host_device *hd = connection->hd;
struct gb_protocol *protocol = connection->protocol;
int ret;
- /*
- * Request the SVC to create a connection from AP's cport to interface's
- * cport.
- */
- if (!(protocol->flags & GB_PROTOCOL_SKIP_SVC_CONNECTION)) {
- ret = gb_svc_connection_create(hd->svc,
- hd->endo->ap_intf_id, connection->hd_cport_id,
- connection->bundle->intf->interface_id,
- cport_id);
- if (ret) {
- dev_err(&connection->dev,
- "%s: Failed to create svc connection (%d)\n",
- __func__, ret);
- return ret;
- }
+ ret = gb_connection_svc_connection_create(connection);
+ if (ret)
+ return ret;
- if (hd->driver->connection_create)
- hd->driver->connection_create(connection);
- }
/* Inform Interface about active CPorts */
if (!(protocol->flags & GB_PROTOCOL_SKIP_CONTROL_CONNECTED)) {
struct gb_control *control = connection->bundle->intf->control;