
In case anything errors out during the DFU registration, detach the controller instead of bailing out right away. This way, the controller can be reattached on next attempt.
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Marek Vasut marex@denx.de --- Cc: Angus Ainslie angus@akkea.ca Cc: Dmitrii Merkurev dimorinny@google.com Cc: Eddie Cai eddie.cai.linux@gmail.com Cc: Kever Yang kever.yang@rock-chips.com Cc: Lukasz Majewski lukma@denx.de Cc: Miquel Raynal miquel.raynal@bootlin.com Cc: Mattijs Korpershoek mkorpershoek@baylibre.com Cc: Nishanth Menon nm@ti.com Cc: Patrice Chotard patrice.chotard@foss.st.com Cc: Patrick Delaunay patrick.delaunay@foss.st.com Cc: Philipp Tomsich philipp.tomsich@vrull.eu Cc: Simon Glass sjg@chromium.org Cc: Stefan Roese sr@denx.de Cc: kernel@puri.sm --- V2: Add RB from Mattijs --- common/dfu.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/common/dfu.c b/common/dfu.c index 96190889ab7..32fba84da16 100644 --- a/common/dfu.c +++ b/common/dfu.c @@ -34,7 +34,8 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget) ret = g_dnl_register(usb_dnl_gadget); if (ret) { pr_err("g_dnl_register failed"); - return CMD_RET_FAILURE; + ret = CMD_RET_FAILURE; + goto err_detach; }
#ifdef CONFIG_DFU_TIMEOUT @@ -106,6 +107,7 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget) } exit: g_dnl_unregister(); +err_detach: usb_gadget_release(usbctrl_index);
if (dfu_reset)