Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4523eae6 authored by David Lin's avatar David Lin Committed by Greg Kroah-Hartman
Browse files

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: default avatarViresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Suggested-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarDavid Lin <dtwlin@google.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 33cc2839
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -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;