|
@@ -315,6 +315,9 @@ void usb_remove_function(struct usb_configuration *c, struct usb_function *f)
|
|
list_del(&f->list);
|
|
list_del(&f->list);
|
|
if (f->unbind)
|
|
if (f->unbind)
|
|
f->unbind(c, f);
|
|
f->unbind(c, f);
|
|
|
|
+
|
|
|
|
+ if (f->bind_deactivated)
|
|
|
|
+ usb_function_activate(f);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(usb_remove_function);
|
|
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,
|
|
f = list_first_entry(&config->functions,
|
|
struct usb_function, list);
|
|
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);
|
|
list_del(&config->list);
|
|
if (config->unbind) {
|
|
if (config->unbind) {
|