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.

Signed-off-by: Marek Vasut <[email protected]>
---
Cc: Angus Ainslie <[email protected]>
Cc: Dmitrii Merkurev <[email protected]>
Cc: Eddie Cai <[email protected]>
Cc: Kever Yang <[email protected]>
Cc: Lukasz Majewski <[email protected]>
Cc: Miquel Raynal <[email protected]>
Cc: Mattijs Korpershoek <[email protected]>
Cc: Nishanth Menon <[email protected]>
Cc: Patrice Chotard <[email protected]>
Cc: Patrick Delaunay <[email protected]>
Cc: Philipp Tomsich <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Stefan Roese <[email protected]>
Cc: [email protected]
---
 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

Reply via email to