summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2017-03-13 08:16:44 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2017-03-13 08:16:44 +0100
commit6b926567c0cfd360d7ab8bedc3745610eda379bd (patch)
tree2fb531e8d1ab89c3ae0fd349c1717564841a784c /drivers
parenta2e3bad25f6033e35e7a0f729cbd164d2d079c17 (diff)
parent2b9bcff79a02f770fa730e2689ba35cc03c0da7d (diff)
downloadbarebox-6b926567c0cfd360d7ab8bedc3745610eda379bd.tar.gz
barebox-6b926567c0cfd360d7ab8bedc3745610eda379bd.tar.xz
Merge branch 'for-next/usb'
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/multi.c23
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);
+}