diff --git a/drivers/usb/gadget/g_dnl.c b/drivers/usb/gadget/g_dnl.c index 0491a0eea941902bb6cf494dccb9e8f64d6eae20..039331a5afd9cadc2b9306da9af848b218e397d6 100644 --- a/drivers/usb/gadget/g_dnl.c +++ b/drivers/usb/gadget/g_dnl.c @@ -19,6 +19,8 @@ #include <dfu.h> #include <thor.h> +#include <env_callback.h> + #include "gadget_chips.h" #include "composite.c" @@ -202,6 +204,19 @@ static int g_dnl_get_bcd_device_number(struct usb_composite_dev *cdev) return g_dnl_get_board_bcd_device_number(gcnum); } +/** + * Update internal serial number variable when the "serial#" env var changes. + * + * Handle all cases, even when flags == H_PROGRAMMATIC or op == env_op_delete. + */ +static int on_serialno(const char *name, const char *value, enum env_op op, + int flags) +{ + g_dnl_set_serialnumber((char *)value); + return 0; +} +U_BOOT_ENV_CALLBACK(serialno, on_serialno); + static int g_dnl_bind(struct usb_composite_dev *cdev) { struct usb_gadget *gadget = cdev->gadget; diff --git a/include/env_callback.h b/include/env_callback.h index 90b95b5e6676087f00d234721c98c7e475cf4268..5c4a30c2deeed2fd810f6f7fbb6c7dfdd2aacde0 100644 --- a/include/env_callback.h +++ b/include/env_callback.h @@ -72,6 +72,7 @@ SILENT_CALLBACK \ SPLASHIMAGE_CALLBACK \ "stdin:console,stdout:console,stderr:console," \ + "serial#:serialno," \ CONFIG_ENV_CALLBACK_LIST_STATIC struct env_clbk_tbl {