ft2232_quit() is called on errors and should clean up after any device
initialization that has been done by ft2232_init().
---
 src/jtag/drivers/ft2232.c |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c
index cb50c50..219d41f 100644
--- a/src/jtag/drivers/ft2232.c
+++ b/src/jtag/drivers/ft2232.c
@@ -217,6 +217,8 @@ static void ktlink_blink(void);
 static void lisa_l_blink(void);
 static void flossjtag_blink(void);
 
+static int ft2232_quit(void);
+
 /* common transport support options */
 
 //static const char *jtag_and_swd[] = { "jtag", "swd", NULL };
@@ -2463,7 +2465,7 @@ static int ft2232_init(void)
        ft2232_buffer = malloc(FT2232_BUFFER_SIZE);
 
        if (layout->init() != ERROR_OK)
-               return ERROR_JTAG_INIT_FAILED;
+               goto quit;
 
        if (ft2232_device_is_highspeed())
        {
@@ -2476,23 +2478,28 @@ static int ft2232_init(void)
 #endif
                /* make sure the legacy mode is disabled */
                if (ft2232h_ft4232h_clk_divide_by_5(false) != ERROR_OK)
-                       return ERROR_JTAG_INIT_FAILED;
+                       goto quit;
        }
 
        buf[0] = 0x85; /* Disconnect TDI/DO to TDO/DI for Loopback */
        if ((retval = ft2232_write(buf, 1, &bytes_written)) != ERROR_OK)
        {
                LOG_ERROR("couldn't write to FT2232 to disable loopback");
-               return ERROR_JTAG_INIT_FAILED;
+               goto quit;
        }
 
 #if BUILD_FT2232_FTD2XX == 1
-       return ft2232_purge_ftd2xx();
+       if (ft2232_purge_ftd2xx() != ERROR_OK)
 #elif BUILD_FT2232_LIBFTDI == 1
-       return ft2232_purge_libftdi();
+       if (ft2232_purge_libftdi() != ERROR_OK)
 #endif
+               goto quit;
 
        return ERROR_OK;
+
+quit:
+       ft2232_quit();
+       return ERROR_JTAG_INIT_FAILED;
 }
 
 /** Updates defaults for DBUS signals:  the four JTAG signals
-- 
1.7.4.1.343.ga91df.dirty

_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to