From: Viresh Kumar Date: Mon, 7 Sep 2015 10:31:21 +0000 (+0530) Subject: greybus: connection: call gb_svc_connection_create() from gb_connection_init() X-Git-Tag: v4.9-rc1~119^2~378^2~21^2~1214 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=a1163fae63079f01c24d9c062b1e22e5ada89f91;p=karo-tx-linux.git greybus: connection: call gb_svc_connection_create() from gb_connection_init() There are two operations which very much work together: - AP asks the SVC to create a connection between a cport of AP and a cport of module. - AP tells the module that the connection is created. Its better (logically) to do these two operations together and so call gb_svc_connection_create() from gb_connection_init() instead. Also check its return value properly. Reviewed-by: Johan Hovold Signed-off-by: Viresh Kumar Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c index c25e5705f865..973d841d8e91 100644 --- a/drivers/staging/greybus/connection.c +++ b/drivers/staging/greybus/connection.c @@ -258,14 +258,6 @@ gb_connection_create_range(struct greybus_host_device *hd, spin_unlock_irq(&gb_connections_lock); - if (hd_cport_id != GB_SVC_CPORT_ID) { - gb_svc_connection_create(hd->svc, - hd->endo->ap_intf_id, hd_cport_id, - bundle->intf->interface_id, cport_id); - if (hd->driver->connection_create) - hd->driver->connection_create(connection); - } - gb_connection_bind_protocol(connection); if (!connection->protocol) dev_warn(&connection->dev, @@ -345,8 +337,29 @@ static void gb_connection_disconnected(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; int ret; + /* + * Request the SVC to create a connection from AP's cport to interface's + * cport. + */ + if (connection->hd_cport_id != GB_SVC_CPORT_ID) { + 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; + } + + if (hd->driver->connection_create) + hd->driver->connection_create(connection); + } + /* * Inform Interface about Active CPorts. We don't need to do this * operation for control cport.