
In case anything errors out during the SDP transfer, 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: - Call g_dnl_unregister() in case sdp_init() fails and on regular exit - Add RB from Mattijs --- common/spl/spl_sdp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/common/spl/spl_sdp.c b/common/spl/spl_sdp.c index cc4fb4f7cca..aae886d2e57 100644 --- a/common/spl/spl_sdp.c +++ b/common/spl/spl_sdp.c @@ -25,13 +25,13 @@ static int spl_sdp_load_image(struct spl_image_info *spl_image, ret = g_dnl_register("usb_dnl_sdp"); if (ret) { pr_err("SDP dnl register failed: %d\n", ret); - return ret; + goto err_detach; }
ret = sdp_init(controller_index); if (ret) { pr_err("SDP init failed: %d\n", ret); - return -ENODEV; + goto err_unregister; }
/* @@ -42,6 +42,9 @@ static int spl_sdp_load_image(struct spl_image_info *spl_image, ret = spl_sdp_handle(controller_index, spl_image, bootdev); debug("SDP ended\n");
+err_unregister: + g_dnl_unregister(); +err_detach: usb_gadget_release(controller_index); return ret; }