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 <mkorpersh...@baylibre.com> Signed-off-by: Marek Vasut <ma...@denx.de> --- Cc: Angus Ainslie <an...@akkea.ca> Cc: Dmitrii Merkurev <dimori...@google.com> Cc: Eddie Cai <eddie.cai.li...@gmail.com> Cc: Kever Yang <kever.y...@rock-chips.com> Cc: Lukasz Majewski <lu...@denx.de> Cc: Miquel Raynal <miquel.ray...@bootlin.com> Cc: Mattijs Korpershoek <mkorpersh...@baylibre.com> Cc: Nishanth Menon <n...@ti.com> Cc: Patrice Chotard <patrice.chot...@foss.st.com> Cc: Patrick Delaunay <patrick.delau...@foss.st.com> Cc: Philipp Tomsich <philipp.toms...@vrull.eu> Cc: Simon Glass <s...@chromium.org> Cc: Stefan Roese <s...@denx.de> Cc: ker...@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) -- 2.40.1