summaryrefslogtreecommitdiffstats
path: root/commands
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2021-10-07 08:51:11 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2021-10-07 08:51:11 +0200
commitab7647dbd8aa54fcb0178829ac9e5fccb053d4ef (patch)
tree907492c209e5639af4faac074df9939f78aa078d /commands
parentb06ef2e54303443d21dd98a773a13289e66812fb (diff)
parent6fb511fa62efe3faa8be67800cd934c143405fca (diff)
downloadbarebox-ab7647dbd8aa54fcb0178829ac9e5fccb053d4ef.tar.gz
barebox-ab7647dbd8aa54fcb0178829ac9e5fccb053d4ef.tar.xz
Merge branch 'for-next/misc'
Diffstat (limited to 'commands')
-rw-r--r--commands/dfu.c29
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;
}