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