diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2021-10-07 08:51:11 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-10-07 08:51:11 +0200 |
commit | ab7647dbd8aa54fcb0178829ac9e5fccb053d4ef (patch) | |
tree | 907492c209e5639af4faac074df9939f78aa078d /commands | |
parent | b06ef2e54303443d21dd98a773a13289e66812fb (diff) | |
parent | 6fb511fa62efe3faa8be67800cd934c143405fca (diff) | |
download | barebox-ab7647dbd8aa54fcb0178829ac9e5fccb053d4ef.tar.gz barebox-ab7647dbd8aa54fcb0178829ac9e5fccb053d4ef.tar.xz |
Merge branch 'for-next/misc'
Diffstat (limited to 'commands')
-rw-r--r-- | commands/dfu.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/commands/dfu.c b/commands/dfu.c index 3132a7479d..1734947fe0 100644 --- a/commands/dfu.c +++ b/commands/dfu.c @@ -11,6 +11,7 @@ #include <fs.h> #include <xfuncs.h> #include <usb/dfu.h> +#include <usb/gadget-multi.h> #include <linux/err.h> /* dfu /dev/self0(bootloader)sr,/dev/nand0.root.bb(root) @@ -20,28 +21,28 @@ */ static int do_dfu(int argc, char *argv[]) { - struct f_dfu_opts opts; - char *argstr; - struct usb_dfu_dev *dfu_alts = NULL; + struct usbgadget_funcs funcs = {}; int ret; if (argc != optind + 1) return COMMAND_ERROR_USAGE; - argstr = argv[optind]; + funcs.flags |= USBGADGET_DFU; + funcs.dfu_opts = argv[optind]; + ret = usbgadget_register(&funcs); + if (ret) + return ret; - opts.files = file_list_parse(argstr); - if (IS_ERR(opts.files)) { - ret = PTR_ERR(opts.files); - goto out; + command_slice_release(); + while (!usb_dfu_detached()) { + if (ctrlc()) { + ret = -EINTR; + break; + } } + command_slice_acquire(); - ret = usb_dfu_register(&opts); - - file_list_free(opts.files); -out: - - free(dfu_alts); + usb_multi_unregister(); return ret; } |