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

Commit 0e3e9752 authored by Felipe Balbi's avatar Felipe Balbi
Browse files

usb: gadget: composite: make sure to reactivate function on unbind



If a function sets bind_deactivated flag, upon removal we will be left
with an unbalanced deactivation. Let's make sure that we conditionally
call usb_function_activate() from usb_remove_function() and make sure
usb_remove_function() is called from remove_config().

Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent afbbc791
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -315,6 +315,9 @@ void usb_remove_function(struct usb_configuration *c, struct usb_function *f)
	list_del(&f->list);
	if (f->unbind)
		f->unbind(c, f);

	if (f->bind_deactivated)
		usb_function_activate(f);
}
EXPORT_SYMBOL_GPL(usb_remove_function);

@@ -956,12 +959,8 @@ static void remove_config(struct usb_composite_dev *cdev,

		f = list_first_entry(&config->functions,
				struct usb_function, list);
		list_del(&f->list);
		if (f->unbind) {
			DBG(cdev, "unbind function '%s'/%p\n", f->name, f);
			f->unbind(config, f);
			/* may free memory for "f" */
		}

		usb_remove_function(config, f);
	}
	list_del(&config->list);
	if (config->unbind) {