diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2017-03-13 08:16:44 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-03-13 08:16:44 +0100 |
commit | 6b926567c0cfd360d7ab8bedc3745610eda379bd (patch) | |
tree | 2fb531e8d1ab89c3ae0fd349c1717564841a784c /drivers | |
parent | a2e3bad25f6033e35e7a0f729cbd164d2d079c17 (diff) | |
parent | 2b9bcff79a02f770fa730e2689ba35cc03c0da7d (diff) | |
download | barebox-6b926567c0cfd360d7ab8bedc3745610eda379bd.tar.gz barebox-6b926567c0cfd360d7ab8bedc3745610eda379bd.tar.xz |
Merge branch 'for-next/usb'
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/gadget/multi.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c index 13fa622f01..6385c16186 100644 --- a/drivers/usb/gadget/multi.c +++ b/drivers/usb/gadget/multi.c @@ -234,6 +234,11 @@ static struct usb_composite_driver multi_driver = { int usb_multi_register(struct f_multi_opts *opts) { + if (gadget_multi_opts) { + pr_err("USB multi gadget already registered\n"); + return -EBUSY; + } + gadget_multi_opts = opts; return usb_composite_probe(&multi_driver); @@ -241,8 +246,22 @@ int usb_multi_register(struct f_multi_opts *opts) void usb_multi_unregister(void) { - if (gadget_multi_opts) - usb_composite_unregister(&multi_driver); + if (!gadget_multi_opts) + return; + + usb_composite_unregister(&multi_driver); + if (gadget_multi_opts->release) + gadget_multi_opts->release(gadget_multi_opts); gadget_multi_opts = NULL; } + +void usb_multi_opts_release(struct f_multi_opts *opts) +{ + if (opts->fastboot_opts.files) + file_list_free(opts->fastboot_opts.files); + if (opts->dfu_opts.files) + file_list_free(opts->dfu_opts.files); + + free(opts); +} |