diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c index 4ae7153ff863971f221f38fe68bb0e5be136ec67..34e26dc6e249ec41551ef3db31fbe4f10ce6c5bb 100644 --- a/drivers/staging/greybus/connection.c +++ b/drivers/staging/greybus/connection.c @@ -314,7 +314,7 @@ gb_connection_svc_connection_create(struct gb_connection *connection) int ret; if (gb_connection_is_static(connection)) - return 0; + return gb_connection_hd_fct_flow_enable(connection); intf = connection->intf; ret = gb_svc_connection_create(hd->svc, @@ -330,12 +330,23 @@ gb_connection_svc_connection_create(struct gb_connection *connection) return ret; } + ret = gb_connection_hd_fct_flow_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_fct_flow_disable(connection); + if (gb_connection_is_static(connection)) return;