summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/gadget/f_fastboot.c18
-rw-r--r--drivers/usb/gadget/multi.c1
-rw-r--r--include/usb/fastboot.h7
3 files changed, 26 insertions, 0 deletions
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index 0f2c02ee47..85c64c05c8 100644
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -283,6 +283,21 @@ out:
return ret;
}
+static int fastboot_add_bbu_variables(struct bbu_handler *handler, void *ctx)
+{
+ struct f_fastboot *f_fb = ctx;
+ char *name;
+ int ret;
+
+ name = basprintf("bbu-%s", handler->name);
+
+ ret = file_list_add_entry(f_fb->files, name, handler->devicefile, 0);
+
+ free(name);
+
+ return ret;
+}
+
static int fastboot_bind(struct usb_configuration *c, struct usb_function *f)
{
struct usb_composite_dev *cdev = c->cdev;
@@ -302,6 +317,9 @@ static int fastboot_bind(struct usb_configuration *c, struct usb_function *f)
var = fb_addvar(f_fb, "bootloader-version");
fb_setvar(var, release_string);
+ if (IS_ENABLED(CONFIG_BAREBOX_UPDATE) && opts->export_bbu)
+ bbu_handlers_iterate(fastboot_add_bbu_variables, f_fb);
+
file_list_for_each_entry(f_fb->files, fentry) {
ret = fastboot_add_partition_variables(f_fb, fentry);
if (ret)
diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c
index 6eeeb4e982..44969be0c9 100644
--- a/drivers/usb/gadget/multi.c
+++ b/drivers/usb/gadget/multi.c
@@ -128,6 +128,7 @@ static int multi_bind_fastboot(struct usb_composite_dev *cdev)
opts = container_of(fi_fastboot, struct f_fastboot_opts, func_inst);
opts->files = gadget_multi_opts->fastboot_opts.files;
+ opts->export_bbu = gadget_multi_opts->fastboot_opts.export_bbu;
f_fastboot = usb_get_function(fi_fastboot);
if (IS_ERR(f_fastboot)) {
diff --git a/include/usb/fastboot.h b/include/usb/fastboot.h
index dab5a9a299..ced890c9ab 100644
--- a/include/usb/fastboot.h
+++ b/include/usb/fastboot.h
@@ -5,9 +5,16 @@
#include <file-list.h>
#include <usb/composite.h>
+/**
+ * struct f_fastboot_opts - options to configure the fastboot gadget
+ * @func_inst: The USB function instance to register on
+ * @files: A file_list containing the files (partitions) to export via fastboot
+ * @export_bbu: Automatically include the partitions provided by barebox update (bbu)
+ */
struct f_fastboot_opts {
struct usb_function_instance func_inst;
struct file_list *files;
+ bool export_bbu;
};
#endif /* _USB_FASTBOOT_H */