From: Johan Hovold Date: Sat, 23 Apr 2016 16:47:23 +0000 (+0200) Subject: greybus: svc: refactor interface re-enable X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=844fcbfeb6491d95b7e19b4705f9eb576a210536;p=linux-beck.git greybus: svc: refactor interface re-enable Add interface re-enable helper that is used during mode switch to disable and re-enable (enumerate) an interface. Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/greybus/svc.c b/drivers/staging/greybus/svc.c index f9829f1f6741..cde59d02400b 100644 --- a/drivers/staging/greybus/svc.c +++ b/drivers/staging/greybus/svc.c @@ -665,6 +665,24 @@ static int gb_svc_hello(struct gb_operation *op) return 0; } +static void gb_svc_intf_reenable(struct gb_svc *svc, struct gb_interface *intf) +{ + int ret; + + /* Mark as disconnected to prevent I/O during disable. */ + intf->disconnected = true; + gb_interface_disable(intf); + intf->disconnected = false; + + ret = gb_interface_enable(intf); + if (ret) { + dev_err(&svc->dev, "failed to enable interface %u: %d\n", + intf->interface_id, ret); + + gb_interface_deactivate(intf); + } +} + static void gb_svc_process_intf_hotplug(struct gb_operation *operation) { struct gb_svc_intf_hotplug_request *request; @@ -686,12 +704,7 @@ static void gb_svc_process_intf_hotplug(struct gb_operation *operation) dev_info(&svc->dev, "mode switch detected on interface %u\n", intf_id); - /* Mark as disconnected to prevent I/O during disable. */ - intf->disconnected = true; - gb_interface_disable(intf); - intf->disconnected = false; - - goto enable_interface; + return gb_svc_intf_reenable(svc, intf); } intf = gb_interface_create(hd, intf_id); @@ -713,7 +726,6 @@ static void gb_svc_process_intf_hotplug(struct gb_operation *operation) if (ret) goto err_interface_deactivate; -enable_interface: ret = gb_interface_enable(intf); if (ret) { dev_err(&svc->dev, "failed to enable interface %u: %d\n",