summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/interface.c
diff options
context:
space:
mode:
authorDavid Lin <dtwlin@google.com>2016-08-05 15:08:40 -0700
committerGreg Kroah-Hartman <gregkh@google.com>2016-08-06 11:08:48 +0200
commit4523eae6f8446e3943415683bc9a136ce11fb32b (patch)
tree6547b69c61c60d77b67521c99ca0fe9b95267ef3 /drivers/staging/greybus/interface.c
parent33cc283928249b2230a6519a2303fe30161cf788 (diff)
downloadop-kernel-dev-4523eae6f8446e3943415683bc9a136ce11fb32b.zip
op-kernel-dev-4523eae6f8446e3943415683bc9a136ce11fb32b.tar.gz
greybus: interface: fix timesync registration sequencing
When enabling an interface, control device should be registered after having successfully added the timesync. Similarly for the interface disable path, control device should be removed first before removing timesync. Testing Done: - Enable and disable the interface Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Reviewed-by: Johan Hovold <johan@hovoldconsulting.com> Suggested-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: David Lin <dtwlin@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/interface.c')
-rw-r--r--drivers/staging/greybus/interface.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/staging/greybus/interface.c b/drivers/staging/greybus/interface.c
index 76569f8..c3ed3d7 100644
--- a/drivers/staging/greybus/interface.c
+++ b/drivers/staging/greybus/interface.c
@@ -1152,17 +1152,17 @@ int gb_interface_enable(struct gb_interface *intf)
if (ret)
goto err_destroy_bundles;
- /* Register the control device and any bundles */
- ret = gb_control_add(intf->control);
- if (ret)
- goto err_destroy_bundles;
-
ret = gb_timesync_interface_add(intf);
if (ret) {
dev_err(&intf->dev, "failed to add to timesync: %d\n", ret);
- goto err_del_control;
+ goto err_destroy_bundles;
}
+ /* Register the control device and any bundles */
+ ret = gb_control_add(intf->control);
+ if (ret)
+ goto err_remove_timesync;
+
pm_runtime_use_autosuspend(&intf->dev);
pm_runtime_get_noresume(&intf->dev);
pm_runtime_set_active(&intf->dev);
@@ -1186,8 +1186,8 @@ int gb_interface_enable(struct gb_interface *intf)
return 0;
-err_del_control:
- gb_control_del(intf->control);
+err_remove_timesync:
+ gb_timesync_interface_remove(intf);
err_destroy_bundles:
list_for_each_entry_safe(bundle, tmp, &intf->bundles, links)
gb_bundle_destroy(bundle);
@@ -1229,8 +1229,8 @@ void gb_interface_disable(struct gb_interface *intf)
if (!intf->mode_switch && !intf->disconnected)
gb_control_interface_deactivate_prepare(intf->control);
- gb_timesync_interface_remove(intf);
gb_control_del(intf->control);
+ gb_timesync_interface_remove(intf);
gb_control_disable(intf->control);
gb_control_put(intf->control);
intf->control = NULL;
OpenPOWER on IntegriCloud