|
@@ -1473,8 +1473,22 @@ static int functionfs_bind_config(struct usb_composite_dev *cdev,
|
|
|
|
|
|
static void ffs_func_free(struct ffs_function *func)
|
|
|
{
|
|
|
+ struct ffs_ep *ep = func->eps;
|
|
|
+ unsigned count = func->ffs->eps_count;
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
ENTER();
|
|
|
|
|
|
+ /* cleanup after autoconfig */
|
|
|
+ spin_lock_irqsave(&func->ffs->eps_lock, flags);
|
|
|
+ do {
|
|
|
+ if (ep->ep && ep->req)
|
|
|
+ usb_ep_free_request(ep->ep, ep->req);
|
|
|
+ ep->req = NULL;
|
|
|
+ ++ep;
|
|
|
+ } while (--count);
|
|
|
+ spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
|
|
|
+
|
|
|
ffs_data_put(func->ffs);
|
|
|
|
|
|
kfree(func->eps);
|