diff options
-rw-r--r-- | drivers/usb/gadget/f_fastboot.c | 18 | ||||
-rw-r--r-- | drivers/usb/gadget/multi.c | 1 | ||||
-rw-r--r-- | include/usb/fastboot.h | 7 |
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 */ |