]> git.karo-electronics.de Git - linux-beck.git/commitdiff
greybus: connection: move CPort Buffer configuration out of svc helpers
authorJohan Hovold <johan@hovoldconsulting.com>
Fri, 27 May 2016 15:26:31 +0000 (17:26 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Fri, 27 May 2016 19:19:29 +0000 (12:19 -0700)
The CPort Buffer configuration in the host-device needs to match the
CPort feature flags set by the SVC, but they need not always be
configured at the same point in time.

This will be used when implementing proper connection tear down.

Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/connection.c

index 9c7133e3ed4b4450e5811202b5e40c6f48e8a546..f3a3915de272c91056779663f1d86ea6ea6fdcce 100644 (file)
@@ -345,7 +345,7 @@ gb_connection_svc_connection_create(struct gb_connection *connection)
        int ret;
 
        if (gb_connection_is_static(connection))
-               return gb_connection_hd_cport_features_enable(connection);
+               return 0;
 
        intf = connection->intf;
 
@@ -373,23 +373,12 @@ gb_connection_svc_connection_create(struct gb_connection *connection)
                return ret;
        }
 
-       ret = gb_connection_hd_cport_features_enable(connection);
-       if (ret) {
-               gb_svc_connection_destroy(hd->svc, hd->svc->ap_intf_id,
-                                         connection->hd_cport_id,
-                                         intf->interface_id,
-                                         connection->intf_cport_id);
-               return ret;
-       }
-
        return 0;
 }
 
 static void
 gb_connection_svc_connection_destroy(struct gb_connection *connection)
 {
-       gb_connection_hd_cport_features_disable(connection);
-
        if (gb_connection_is_static(connection))
                return;
 
@@ -557,6 +546,10 @@ static int _gb_connection_enable(struct gb_connection *connection, bool rx)
        if (ret)
                goto err_hd_cport_disable;
 
+       ret = gb_connection_hd_cport_features_enable(connection);
+       if (ret)
+               goto err_svc_connection_destroy;
+
        spin_lock_irq(&connection->lock);
        if (connection->handler && rx)
                connection->state = GB_CONNECTION_STATE_ENABLED;
@@ -576,6 +569,8 @@ err_flush_operations:
        gb_connection_cancel_operations(connection, -ESHUTDOWN);
        spin_unlock_irq(&connection->lock);
 
+       gb_connection_hd_cport_features_disable(connection);
+err_svc_connection_destroy:
        gb_connection_svc_connection_destroy(connection);
 err_hd_cport_disable:
        gb_connection_hd_cport_disable(connection);
@@ -654,6 +649,7 @@ void gb_connection_disable(struct gb_connection *connection)
        gb_connection_cancel_operations(connection, -ESHUTDOWN);
        spin_unlock_irq(&connection->lock);
 
+       gb_connection_hd_cport_features_disable(connection);
        gb_connection_svc_connection_destroy(connection);
        gb_connection_hd_cport_disable(connection);
 
@@ -675,6 +671,7 @@ void gb_connection_disable_forced(struct gb_connection *connection)
        gb_connection_cancel_operations(connection, -ESHUTDOWN);
        spin_unlock_irq(&connection->lock);
 
+       gb_connection_hd_cport_features_disable(connection);
        gb_connection_svc_connection_destroy(connection);
        gb_connection_hd_cport_disable(connection);