]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
greybus: connection: call gb_svc_connection_create() from gb_connection_init()
authorViresh Kumar <viresh.kumar@linaro.org>
Mon, 7 Sep 2015 10:31:21 +0000 (16:01 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Tue, 15 Sep 2015 04:19:46 +0000 (21:19 -0700)
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 <johan@hovoldconsulting.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/connection.c

index c25e5705f8651e99d750fcfeae1f5d6528c788bf..973d841d8e91d3aee94fc5ad984f05c0456b0963 100644 (file)
@@ -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.