Marcel Jost <marcel.jost@bfh.ch>:
[openocd.git] / src / jtag / ft2232.c
index b4415983f96f8aa0771ce2afe37d8fcde2c13569..4cba9d908560453b472005d50d46c151619c4c9d 100644 (file)
@@ -40,8 +40,8 @@
 #endif
 
 /* project specific includes */
-#define INCLUDE_JTAG_INTERFACE_H
-#include "jtag.h"
+#include "interface.h"
+#include "commands.h"
 #include "time_support.h"
 
 #if IS_CYGWIN == 1
@@ -50,9 +50,9 @@
 
 #include <assert.h>
 
-#if (BUILD_FT2232_FTD2XX==1 && BUILD_FT2232_LIBFTDI==1)
+#if (BUILD_FT2232_FTD2XX == 1 && BUILD_FT2232_LIBFTDI == 1)
 #error "BUILD_FT2232_FTD2XX && BUILD_FT2232_LIBFTDI are mutually exclusive"
-#elif(BUILD_FT2232_FTD2XX!=1 && BUILD_FT2232_LIBFTDI!=1)
+#elif (BUILD_FT2232_FTD2XX != 1 && BUILD_FT2232_LIBFTDI != 1)
 #error "BUILD_FT2232_FTD2XX || BUILD_FT2232_LIBFTDI must be chosen"
 #endif
 
@@ -83,28 +83,32 @@ static int ft2232_handle_latency_command(struct command_context_s* cmd_ctx, char
 
 
 /**
- * Function ft2232_stableclocks
- * will send out \a num_cycles on the TCK line while the TAP(s)
- * are in a stable state.  Calling code must ensure that current state is
- * stable, that verification is not done in here.
- * @param num_cycles is the count of clocks cycles to send.
- * @return int - ERROR_OK or ERROR_JTAG_QUEUE_FAILED
+ * Send out \a num_cycles on the TCK line while the TAP(s) are in a
+ * stable state.  Calling code must ensure that current state is stable,
+ * that verification is not done in here.
+ *
+ * @param num_cycles The number of clocks cycles to send.
+ * @param cmd The command to send.
+ *
+ * @returns ERROR_OK on success, or ERROR_JTAG_QUEUE_FAILED on failure.
  */
 static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd);
 
+/* max TCK for the high speed devices 30000 kHz */
+#define        FTDI_2232H_4232H_MAX_TCK        30000
 
 static char *       ft2232_device_desc_A = NULL;
 static char*        ft2232_device_desc = NULL;
 static char*        ft2232_serial  = NULL;
 static char*        ft2232_layout  = NULL;
-static u8                      ft2232_latency = 2;
-static unsigned                ft2232_max_tck = 6000;
+static uint8_t         ft2232_latency = 2;
+static unsigned                ft2232_max_tck = 6000;
 
 
 #define MAX_USB_IDS 8
 /* vid = pid = 0 marks the end of the list */
-static u16 ft2232_vid[MAX_USB_IDS + 1] = { 0x0403, 0 };
-static u16 ft2232_pid[MAX_USB_IDS + 1] = { 0x6010, 0 };
+static uint16_t ft2232_vid[MAX_USB_IDS + 1] = { 0x0403, 0 };
+static uint16_t ft2232_pid[MAX_USB_IDS + 1] = { 0x6010, 0 };
 
 typedef struct ft2232_layout_s
 {
@@ -115,17 +119,17 @@ typedef struct ft2232_layout_s
 } ft2232_layout_t;
 
 /* init procedures for supported layouts */
-static int  usbjtag_init(void);
-static int  jtagkey_init(void);
-static int  olimex_jtag_init(void);
-static int  flyswatter_init(void);
-static int  turtle_init(void);
-static int  comstick_init(void);
-static int  stm32stick_init(void);
-static int     axm0432_jtag_init(void);
-static int     sheevaplug_init(void);
-static int     icebear_jtag_init(void);
-static int     cortino_jtag_init(void);
+static int usbjtag_init(void);
+static int jtagkey_init(void);
+static int olimex_jtag_init(void);
+static int flyswatter_init(void);
+static int turtle_init(void);
+static int comstick_init(void);
+static int stm32stick_init(void);
+static int axm0432_jtag_init(void);
+static int sheevaplug_init(void);
+static int icebear_jtag_init(void);
+static int cortino_jtag_init(void);
 
 /* reset procedures for supported layouts */
 static void usbjtag_reset(int trst, int srst);
@@ -144,7 +148,7 @@ static void olimex_jtag_blink(void);
 static void flyswatter_jtag_blink(void);
 static void turtle_jtag_blink(void);
 
-ft2232_layout_t  ft2232_layouts[] =
+static const ft2232_layout_t  ft2232_layouts[] =
 {
        { "usbjtag",              usbjtag_init,              usbjtag_reset,      NULL                    },
        { "jtagkey",              jtagkey_init,              jtagkey_reset,      NULL                    },
@@ -152,6 +156,7 @@ ft2232_layout_t  ft2232_layouts[] =
        { "oocdlink",             jtagkey_init,              jtagkey_reset,      NULL                    },
        { "signalyzer",           usbjtag_init,              usbjtag_reset,      NULL                    },
        { "evb_lm3s811",          usbjtag_init,              usbjtag_reset,      NULL                    },
+       { "luminary_icdi",        usbjtag_init,              usbjtag_reset,      NULL                    },
        { "olimex-jtag",          olimex_jtag_init,          olimex_jtag_reset,  olimex_jtag_blink       },
        { "flyswatter",           flyswatter_init,           flyswatter_reset,   flyswatter_jtag_blink   },
        { "turtelizer2",          turtle_init,               turtle_reset,       turtle_jtag_blink       },
@@ -164,16 +169,17 @@ ft2232_layout_t  ft2232_layouts[] =
        { NULL,                   NULL,                      NULL,               NULL                    },
 };
 
-static u8                  nTRST, nTRSTnOE, nSRST, nSRSTnOE;
+static uint8_t                  nTRST, nTRSTnOE, nSRST, nSRSTnOE;
 
-static ft2232_layout_t*    layout;
-static u8                  low_output     = 0x0;
-static u8                  low_direction  = 0x0;
-static u8                  high_output    = 0x0;
-static u8                  high_direction = 0x0;
+static const ft2232_layout_t *layout;
+static uint8_t                  low_output     = 0x0;
+static uint8_t                  low_direction  = 0x0;
+static uint8_t                  high_output    = 0x0;
+static uint8_t                  high_direction = 0x0;
 
 #if BUILD_FT2232_FTD2XX == 1
-static FT_HANDLE       ftdih = NULL;
+static FT_HANDLE       ftdih = NULL;
+static FT_DEVICE       ftdi_device = 0;
 #elif BUILD_FT2232_LIBFTDI == 1
 static struct ftdi_context ftdic;
 #endif
@@ -183,7 +189,7 @@ static jtag_command_t* first_unsent;        /* next command that has to be sent
 static int             require_send;
 
 
-/*     http://urjtag.wiki.sourceforge.net/Cable+FT2232 says:
+/*     http://urjtag.wiki.sourceforge.net/Cable + FT2232 says:
 
        "There is a significant difference between libftdi and libftd2xx. The latter
        one allows to schedule up to 64*64 bytes of result data while libftdi fails
@@ -198,7 +204,7 @@ static int             require_send;
 
 #define FT2232_BUFFER_SIZE 131072
 
-static u8*             ft2232_buffer = NULL;
+static uint8_t*             ft2232_buffer = NULL;
 static int             ft2232_buffer_size  = 0;
 static int             ft2232_read_pointer = 0;
 static int             ft2232_expect_read  = 0;
@@ -208,10 +214,10 @@ static int             ft2232_expect_read  = 0;
  * writes a byte into the byte buffer, "ft2232_buffer", which must be sent later.
  * @param val is the byte to send.
  */
-static inline void buffer_write( u8 val )
+static inline void buffer_write(uint8_t val)
 {
-       assert( ft2232_buffer );
-       assert( (unsigned) ft2232_buffer_size < (unsigned) FT2232_BUFFER_SIZE );
+       assert(ft2232_buffer);
+       assert((unsigned) ft2232_buffer_size < (unsigned) FT2232_BUFFER_SIZE);
        ft2232_buffer[ft2232_buffer_size++] = val;
 }
 
@@ -219,63 +225,65 @@ static inline void buffer_write( u8 val )
  * Function buffer_read
  * returns a byte from the byte buffer.
  */
-static inline u8 buffer_read(void)
+static inline uint8_t buffer_read(void)
 {
-       assert( ft2232_buffer );
-       assert( ft2232_read_pointer < ft2232_buffer_size );
+       assert(ft2232_buffer);
+       assert(ft2232_read_pointer < ft2232_buffer_size);
        return ft2232_buffer[ft2232_read_pointer++];
 }
 
 
 /**
- * Function clock_tms
- * clocks out \a bit_count bits on the TMS line, starting with the least
+ * Clocks out \a bit_count bits on the TMS line, starting with the least
  * significant bit of tms_bits and progressing to more significant bits.
  * Rigorous state transition logging is done here via tap_set_state().
  *
- * @param pmsse_cmd is one of the MPSSE TMS oriented commands such as 0x4b or 0x6b.  See
- *   the MPSSE spec referenced above for their functionality. The MPSSE command
- *   "Clock Data to TMS/CS Pin (no Read)" is often used for this, 0x4b.
+ * @param mpsse_cmd One of the MPSSE TMS oriented commands such as
+ *     0x4b or 0x6b.  See the MPSSE spec referenced above for their
+ *     functionality. The MPSSE command "Clock Data to TMS/CS Pin (no Read)"
+ *     is often used for this, 0x4b.
+ *
+ * @param tms_bits Holds the sequence of bits to send.
+ * @param tms_count Tells how many bits in the sequence.
+ * @param tdi_bit A single bit to pass on to TDI before the first TCK
+ *     cycle and held static for the duration of TMS clocking.
  *
- * @param tms_bits holds the sequence of bits to send.
- * @param tms_count tells how many bits in the sequence.
- * @param tdi_bit is a single bit which is passed on to TDI before the first TCK cycle
- *   and is held static for the duration of TMS clocking.  See the MPSSE spec referenced above.
+ * See the MPSSE spec referenced above.
  */
-static void clock_tms( u8 mpsse_cmd, int tms_bits, int tms_count, bool tdi_bit )
+static void clock_tms(uint8_t mpsse_cmd, int tms_bits, int tms_count, bool tdi_bit)
 {
-       u8      tms_byte;
+       uint8_t tms_byte;
        int     i;
        int     tms_ndx;                                /* bit index into tms_byte */
 
-       assert( tms_count > 0 );
+       assert(tms_count > 0);
 
-//     LOG_DEBUG("mpsse cmd=%02x, tms_bits=0x%08x, bit_count=%d", mpsse_cmd, tms_bits, tms_count );
+//     LOG_DEBUG("mpsse cmd=%02x, tms_bits = 0x%08x, bit_count=%d", mpsse_cmd, tms_bits, tms_count);
 
        for (tms_byte = tms_ndx = i = 0;   i < tms_count;   ++i, tms_bits>>=1)
        {
                bool bit = tms_bits & 1;
 
-               if(bit)
-                       tms_byte |= (1<<tms_ndx);
+               if (bit)
+                       tms_byte |= (1 << tms_ndx);
 
                /* always do state transitions in public view */
-               tap_set_state( tap_state_transition(tap_get_state(), bit) );
+               tap_set_state(tap_state_transition(tap_get_state(), bit));
 
-               /*      we wrote a bit to tms_byte just above, increment bit index.  if bit was zero
+               /*      we wrote a bit to tms_byte just above, increment bit index.  if bit was zero
                        also increment.
                */
                ++tms_ndx;
 
-               if( tms_ndx==7  || i==tms_count-1 )
+               if (tms_ndx == 7  || i == tms_count-1)
                {
-                       buffer_write( mpsse_cmd );
-                       buffer_write( tms_ndx - 1 );
+                       buffer_write(mpsse_cmd);
+                       buffer_write(tms_ndx - 1);
 
-                       /*      Bit 7 of the byte is passed on to TDI/DO before the first TCK/SK of
+                       /*      Bit 7 of the byte is passed on to TDI/DO before the first TCK/SK of
                                TMS/CS and is held static for the duration of TMS/CS clocking.
                        */
-                       buffer_write( tms_byte | (tdi_bit << 7) );
+                       buffer_write(tms_byte | (tdi_bit << 7));
                }
        }
 }
@@ -286,7 +294,7 @@ static void clock_tms( u8 mpsse_cmd, int tms_bits, int tms_count, bool tdi_bit )
  * returns what clock_tms() will consume if called with
  * same \a bit_count.
  */
-static inline int get_tms_buffer_requirements( int bit_count )
+static inline int get_tms_buffer_requirements(int bit_count)
 {
        return ((bit_count + 6)/7) * 3;
 }
@@ -300,11 +308,11 @@ static inline int get_tms_buffer_requirements( int bit_count )
  *
  * @param goal_state is the destination state for the move.
  */
-static void move_to_state( tap_state_t goal_state )
+static void move_to_state(tap_state_t goal_state)
 {
-       tap_state_t     start_state = tap_get_state();
+       tap_state_t     start_state = tap_get_state();
 
-       /*      goal_state is 1/2 of a tuple/pair of states which allow convenient
+       /*      goal_state is 1/2 of a tuple/pair of states which allow convenient
                lookup of the required TMS pattern to move to this state from the
                start state.
        */
@@ -313,30 +321,30 @@ static void move_to_state( tap_state_t goal_state )
        int tms_bits  = tap_get_tms_path(start_state, goal_state);
        int tms_count = tap_get_tms_path_len(start_state, goal_state);
 
-       DEBUG_JTAG_IO( "start=%s goal=%s", tap_state_name(start_state), tap_state_name(goal_state) );
+       DEBUG_JTAG_IO("start=%s goal=%s", tap_state_name(start_state), tap_state_name(goal_state));
 
-       clock_tms( 0x4b,  tms_bits, tms_count, 0 );
+       clock_tms(0x4b,  tms_bits, tms_count, 0);
 }
 
 
 jtag_interface_t ft2232_interface =
 {
-       .name               = "ft2232",
-       .execute_queue = ft2232_execute_queue,
-       .speed     = ft2232_speed,
-       .speed_div = ft2232_speed_div,
-       .khz                = ft2232_khz,
-       .register_commands  = ft2232_register_commands,
-       .init = ft2232_init,
-       .quit = ft2232_quit,
+       .name                   = "ft2232",
+       .execute_queue          = ft2232_execute_queue,
+       .speed                  = ft2232_speed,
+       .speed_div              = ft2232_speed_div,
+       .khz                    = ft2232_khz,
+       .register_commands      = ft2232_register_commands,
+       .init                   = ft2232_init,
+       .quit                   = ft2232_quit,
 };
 
-static int ft2232_write(u8* buf, int size, u32* bytes_written)
+static int ft2232_write(uint8_t* buf, int size, uint32_t* bytes_written)
 {
 #if BUILD_FT2232_FTD2XX == 1
        FT_STATUS status;
-       DWORD           dw_bytes_written;
-       if ( ( status = FT_Write(ftdih, buf, size, &dw_bytes_written) ) != FT_OK )
+       DWORD   dw_bytes_written;
+       if ((status = FT_Write(ftdih, buf, size, &dw_bytes_written)) != FT_OK)
        {
                *bytes_written = dw_bytes_written;
                LOG_ERROR("FT_Write returned: %lu", status);
@@ -349,10 +357,10 @@ static int ft2232_write(u8* buf, int size, u32* bytes_written)
        }
 #elif BUILD_FT2232_LIBFTDI == 1
        int retval;
-       if ( ( retval = ftdi_write_data(&ftdic, buf, size) ) < 0 )
+       if ((retval = ftdi_write_data(&ftdic, buf, size)) < 0)
        {
                *bytes_written = 0;
-               LOG_ERROR( "ftdi_write_data: %s", ftdi_get_error_string(&ftdic) );
+               LOG_ERROR("ftdi_write_data: %s", ftdi_get_error_string(&ftdic));
                return ERROR_JTAG_DEVICE_ERROR;
        }
        else
@@ -364,7 +372,7 @@ static int ft2232_write(u8* buf, int size, u32* bytes_written)
 }
 
 
-static int ft2232_read(u8* buf, u32 size, u32* bytes_read)
+static int ft2232_read(uint8_t* buf, uint32_t size, uint32_t* bytes_read)
 {
 #if BUILD_FT2232_FTD2XX == 1
        DWORD     dw_bytes_read;
@@ -372,10 +380,10 @@ static int ft2232_read(u8* buf, u32 size, u32* bytes_read)
        int       timeout = 5;
        *bytes_read = 0;
 
-       while ( (*bytes_read < size) && timeout-- )
+       while ((*bytes_read < size) && timeout--)
        {
-               if ( ( status = FT_Read(ftdih, buf + *bytes_read, size -
-                                         *bytes_read, &dw_bytes_read) ) != FT_OK )
+               if ((status = FT_Read(ftdih, buf + *bytes_read, size -
+                                         *bytes_read, &dw_bytes_read)) != FT_OK)
                {
                        *bytes_read = 0;
                        LOG_ERROR("FT_Read returned: %lu", status);
@@ -389,12 +397,12 @@ static int ft2232_read(u8* buf, u32 size, u32* bytes_read)
        int timeout = 100;
        *bytes_read = 0;
 
-       while ( (*bytes_read < size) && timeout-- )
+       while ((*bytes_read < size) && timeout--)
        {
-               if ( ( retval = ftdi_read_data(&ftdic, buf + *bytes_read, size - *bytes_read) ) < 0 )
+               if ((retval = ftdi_read_data(&ftdic, buf + *bytes_read, size - *bytes_read)) < 0)
                {
                        *bytes_read = 0;
-                       LOG_ERROR( "ftdi_read_data: %s", ftdi_get_error_string(&ftdic) );
+                       LOG_ERROR("ftdi_read_data: %s", ftdi_get_error_string(&ftdic));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
                *bytes_read += retval;
@@ -404,26 +412,70 @@ static int ft2232_read(u8* buf, u32 size, u32* bytes_read)
 
        if (*bytes_read < size)
        {
-               LOG_ERROR("couldn't read the requested number of bytes from FT2232 device (%i < %i)", *bytes_read, size);
+               LOG_ERROR("couldn't read the requested number of bytes from FT2232 device (%i < %i)",
+                         (unsigned int)(*bytes_read),
+                         (unsigned int)size);
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
        return ERROR_OK;
 }
 
+#ifdef BUILD_FTD2XX_HIGHSPEED
+static bool ft2232_device_is_highspeed(void)
+{
+       return (ftdi_device == FT_DEVICE_2232H) || (ftdi_device == FT_DEVICE_4232H);
+}
+
+static int ft2232_adaptive_clocking(int speed)
+{
+       bool use_adaptive_clocking = FALSE;
+       if (0 == speed)
+       {
+               if (ft2232_device_is_highspeed())
+                       use_adaptive_clocking = TRUE;
+               else
+               {
+                       LOG_ERROR("ft2232 device %lu does not support RTCK", ftdi_device);
+                       return ERROR_OK;
+               }
+       }
+
+       uint8_t  buf = use_adaptive_clocking ? 0x96 : 0x97;
+       LOG_DEBUG("%2.2x", buf);
+
+       uint32_t bytes_written;
+       int retval = ft2232_write(&buf, 1, &bytes_written);
+       if (ERROR_OK != retval || bytes_written != 1)
+       {
+               LOG_ERROR("unable to set adative clocking: %d", retval);
+               return retval;
+       }
+
+       return ERROR_OK;
+}
+#else
+static int ft2232_adaptive_clocking(int speed)
+{
+       // not implemented on low-speed devices
+       return speed ? ERROR_OK : -1234;
+}
+#endif
 
 static int ft2232_speed(int speed)
 {
-       u8  buf[3];
+       uint8_t  buf[3];
        int retval;
-       u32 bytes_written;
+       uint32_t bytes_written;
 
-       buf[0] = 0x86;                          /* command "set divisor" */
-       buf[1] = speed & 0xff;          /* valueL (0=6MHz, 1=3MHz, 2=2.0MHz, ...*/
+       ft2232_adaptive_clocking(speed);
+
+       buf[0] = 0x86;                  /* command "set divisor" */
+       buf[1] = speed & 0xff;          /* valueL (0 = 6MHz, 1 = 3MHz, 2 = 2.0MHz, ...*/
        buf[2] = (speed >> 8) & 0xff;   /* valueH */
 
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
-       if ( ( ( retval = ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((retval = ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't set FT2232 TCK speed");
                return retval;
@@ -447,10 +499,17 @@ static int ft2232_speed_div(int speed, int* khz)
 
 static int ft2232_khz(int khz, int* jtag_speed)
 {
-       if (khz==0)
+       if (khz == 0)
        {
-               LOG_DEBUG("RTCK not supported");
+#ifdef BUILD_FTD2XX_HIGHSPEED
+               *jtag_speed = 0;
+               return ERROR_OK;
+#else
+               LOG_DEBUG("RCLK not supported");
+               LOG_DEBUG("If you have a high-speed FTDI device, then "
+                       "OpenOCD may be built with --enable-ftd2xx-highspeed.");
                return ERROR_FAIL;
+#endif
        }
 
        /* Take a look in the FT2232 manual,
@@ -502,7 +561,7 @@ static int ft2232_register_commands(struct command_context_s* cmd_ctx)
 }
 
 
-void ft2232_end_state(tap_state_t state)
+static void ft2232_end_state(tap_state_t state)
 {
        if (tap_is_state_stable(state))
                tap_set_end_state(state);
@@ -513,7 +572,7 @@ void ft2232_end_state(tap_state_t state)
        }
 }
 
-static void ft2232_read_scan(enum scan_type type, u8* buffer, int scan_size)
+static void ft2232_read_scan(enum scan_type type, uint8_t* buffer, int scan_size)
 {
        int num_bytes = (scan_size + 7) / 8;
        int bits_left = scan_size;
@@ -527,13 +586,13 @@ static void ft2232_read_scan(enum scan_type type, u8* buffer, int scan_size)
 
        buffer[cur_byte] = 0x0;
 
-       /* There is one more partial byte left from the clock data in/out instructions */ 
+       /* There is one more partial byte left from the clock data in/out instructions */
        if (bits_left > 1)
        {
                buffer[cur_byte] = buffer_read() >> 1;
        }
        /* This shift depends on the length of the clock data to tms instruction, insterted at end of the scan, now fixed to a two step transition in ft2232_add_scan */
-       buffer[cur_byte] = ( buffer[cur_byte] | ( ( (buffer_read()) << 1 ) & 0x80 )) >> (8 - bits_left);
+       buffer[cur_byte] = (buffer[cur_byte] | (((buffer_read()) << 1) & 0x80)) >> (8 - bits_left);
 }
 
 
@@ -561,12 +620,12 @@ static void ft2232_debug_dump_buffer(void)
 static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last)
 {
        jtag_command_t* cmd;
-       u8*             buffer;
+       uint8_t*             buffer;
        int             scan_size;
        enum scan_type  type;
        int             retval;
-       u32             bytes_written=0;
-       u32             bytes_read=0;
+       uint32_t             bytes_written = 0;
+       uint32_t             bytes_read = 0;
 
 #ifdef _DEBUG_USB_IO_
        struct timeval  start, inter, inter2, end;
@@ -582,7 +641,7 @@ static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last)
        gettimeofday(&start, NULL);
 #endif
 
-       if ( ( retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written) ) != ERROR_OK )
+       if ((retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written)) != ERROR_OK)
        {
                LOG_ERROR("couldn't write MPSSE commands to FT2232");
                return retval;
@@ -601,7 +660,7 @@ static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last)
                gettimeofday(&inter2, NULL);
 #endif
 
-               if ( ( retval = ft2232_read(ft2232_buffer, ft2232_expect_read, &bytes_read) ) != ERROR_OK )
+               if ((retval = ft2232_read(ft2232_buffer, ft2232_expect_read, &bytes_read)) != ERROR_OK)
                {
                        LOG_ERROR("couldn't read from FT2232");
                        return retval;
@@ -686,58 +745,58 @@ static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last)
  *   ending with the last state at path[num_states-1]
  * @param num_states is the count of state steps to move through
  */
-static void ft2232_add_pathmove( tap_state_t* path, int num_states )
+static void ft2232_add_pathmove(tap_state_t* path, int num_states)
 {
        int                     tms_bits = 0;
        int                     state_ndx;
        tap_state_t     walker = tap_get_state();
 
-       assert( (unsigned) num_states <= 32u );         /* tms_bits only holds 32 bits */
+       assert((unsigned) num_states <= 32u);           /* tms_bits only holds 32 bits */
 
        /* this loop verifies that the path is legal and logs each state in the path */
-       for( state_ndx = 0; state_ndx < num_states;  ++state_ndx )
+       for (state_ndx = 0; state_ndx < num_states;  ++state_ndx)
        {
                tap_state_t     desired_next_state = path[state_ndx];
 
-               if (tap_state_transition(walker, false) == desired_next_state )
+               if (tap_state_transition(walker, false) == desired_next_state)
                        ;       /* bit within tms_bits at index state_ndx is already zero */
-               else if (tap_state_transition(walker, true) == desired_next_state )
-                       tms_bits |= (1<<state_ndx);
+               else if (tap_state_transition(walker, true) == desired_next_state)
+                       tms_bits |= (1 << state_ndx);
                else
                {
-                       LOG_ERROR( "BUG: %s -> %s isn't a valid TAP transition",
-                                       tap_state_name(walker), tap_state_name(desired_next_state) );
+                       LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition",
+                                       tap_state_name(walker), tap_state_name(desired_next_state));
                        exit(-1);
                }
 
                walker = desired_next_state;
        }
 
-       clock_tms( 0x4b,  tms_bits, num_states, 0 );
+       clock_tms(0x4b,  tms_bits, num_states, 0);
 
        tap_set_end_state(tap_get_state());
 }
 
 
-void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int scan_size)
+static void ft2232_add_scan(bool ir_scan, enum scan_type type, uint8_t* buffer, int scan_size)
 {
        int num_bytes = (scan_size + 7) / 8;
        int bits_left = scan_size;
        int cur_byte  = 0;
        int last_bit;
 
-       if ( !ir_scan )
+       if (!ir_scan)
        {
                if (tap_get_state() != TAP_DRSHIFT)
                {
-                       move_to_state( TAP_DRSHIFT );
+                       move_to_state(TAP_DRSHIFT);
                }
        }
        else
        {
                if (tap_get_state() != TAP_IRSHIFT)
                {
-                       move_to_state( TAP_IRSHIFT );
+                       move_to_state(TAP_IRSHIFT);
                }
        }
 
@@ -748,34 +807,34 @@ void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int scan_siz
                if (type == SCAN_IO)
                {
                        /* Clock Data Bytes In and Out LSB First */
-                       buffer_write( 0x39 );
+                       buffer_write(0x39);
                        /* LOG_DEBUG("added TDI bytes (io %i)", num_bytes); */
                }
                else if (type == SCAN_OUT)
                {
                        /* Clock Data Bytes Out on -ve Clock Edge LSB First (no Read) */
-                       buffer_write( 0x19 );
+                       buffer_write(0x19);
                        /* LOG_DEBUG("added TDI bytes (o)"); */
                }
                else if (type == SCAN_IN)
                {
                        /* Clock Data Bytes In on +ve Clock Edge LSB First (no Write) */
-                       buffer_write( 0x28 );
+                       buffer_write(0x28);
                        /* LOG_DEBUG("added TDI bytes (i %i)", num_bytes); */
                }
 
                thisrun_bytes = (num_bytes > 65537) ? 65536 : (num_bytes - 1);
                num_bytes    -= thisrun_bytes;
 
-               buffer_write( (u8) (thisrun_bytes - 1) );
-               buffer_write( (u8) ((thisrun_bytes - 1) >> 8) );
+               buffer_write((uint8_t) (thisrun_bytes - 1));
+               buffer_write((uint8_t) ((thisrun_bytes - 1) >> 8));
 
                if (type != SCAN_IN)
                {
                        /* add complete bytes */
                        while (thisrun_bytes-- > 0)
                        {
-                               buffer_write( buffer[cur_byte++] );
+                               buffer_write(buffer[cur_byte++]);
                                bits_left -= 8;
                        }
                }
@@ -787,7 +846,7 @@ void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int scan_siz
 
        /* the most signifcant bit is scanned during TAP movement */
        if (type != SCAN_IN)
-               last_bit = ( buffer[cur_byte] >> (bits_left - 1) ) & 0x1;
+               last_bit = (buffer[cur_byte] >> (bits_left - 1)) & 0x1;
        else
                last_bit = 0;
 
@@ -797,56 +856,56 @@ void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int scan_siz
                if (type == SCAN_IO)
                {
                        /* Clock Data Bits In and Out LSB First */
-                       buffer_write( 0x3b );
+                       buffer_write(0x3b);
                        /* LOG_DEBUG("added TDI bits (io) %i", bits_left - 1); */
                }
                else if (type == SCAN_OUT)
                {
                        /* Clock Data Bits Out on -ve Clock Edge LSB First (no Read) */
-                       buffer_write( 0x1b );
+                       buffer_write(0x1b);
                        /* LOG_DEBUG("added TDI bits (o)"); */
                }
                else if (type == SCAN_IN)
                {
                        /* Clock Data Bits In on +ve Clock Edge LSB First (no Write) */
-                       buffer_write( 0x2a );
+                       buffer_write(0x2a);
                        /* LOG_DEBUG("added TDI bits (i %i)", bits_left - 1); */
                }
 
-               buffer_write( bits_left - 2 );
+               buffer_write(bits_left - 2);
                if (type != SCAN_IN)
-                       buffer_write( buffer[cur_byte] );
+                       buffer_write(buffer[cur_byte]);
        }
 
-       if ( (  ir_scan && (tap_get_end_state() == TAP_IRSHIFT) )
-         || ( !ir_scan && (tap_get_end_state() == TAP_DRSHIFT) ) )
+       if ((ir_scan && (tap_get_end_state() == TAP_IRSHIFT))
+         || (!ir_scan && (tap_get_end_state() == TAP_DRSHIFT)))
        {
                if (type == SCAN_IO)
                {
                        /* Clock Data Bits In and Out LSB First */
-                       buffer_write( 0x3b );
+                       buffer_write(0x3b);
                        /* LOG_DEBUG("added TDI bits (io) %i", bits_left - 1); */
                }
                else if (type == SCAN_OUT)
                {
                        /* Clock Data Bits Out on -ve Clock Edge LSB First (no Read) */
-                       buffer_write( 0x1b );
+                       buffer_write(0x1b);
                        /* LOG_DEBUG("added TDI bits (o)"); */
                }
                else if (type == SCAN_IN)
                {
                        /* Clock Data Bits In on +ve Clock Edge LSB First (no Write) */
-                       buffer_write( 0x2a );
+                       buffer_write(0x2a);
                        /* LOG_DEBUG("added TDI bits (i %i)", bits_left - 1); */
                }
-               buffer_write( 0x0 );
-               buffer_write( last_bit );
+               buffer_write(0x0);
+               buffer_write(last_bit);
        }
        else
        {
                int tms_bits;
                int tms_count;
-               u8      mpsse_cmd;
+               uint8_t mpsse_cmd;
 
                /* move from Shift-IR/DR to end state */
                if (type != SCAN_OUT)
@@ -861,33 +920,33 @@ void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int scan_siz
                }
                else
                {
-                       tms_bits  = tap_get_tms_path( tap_get_state(), tap_get_end_state() );
-                       tms_count = tap_get_tms_path_len( tap_get_state(), tap_get_end_state() );
+                       tms_bits  = tap_get_tms_path(tap_get_state(), tap_get_end_state());
+                       tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
                        /* Clock Data to TMS/CS Pin (no Read) */
                        mpsse_cmd = 0x4b;
                        /* LOG_DEBUG("added TMS scan (no read)"); */
                }
 
-               clock_tms( mpsse_cmd, tms_bits, tms_count, last_bit );
+               clock_tms(mpsse_cmd, tms_bits, tms_count, last_bit);
        }
-       
+
        if (tap_get_state() != tap_get_end_state())
        {
-               move_to_state( tap_get_end_state() );
+               move_to_state(tap_get_end_state());
        }
 }
 
 
-static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffer, int scan_size)
+static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, uint8_t* buffer, int scan_size)
 {
        int num_bytes = (scan_size + 7) / 8;
        int bits_left = scan_size;
        int cur_byte  = 0;
        int last_bit;
-       u8* receive_buffer  = malloc( CEIL(scan_size, 8) );
-       u8* receive_pointer = receive_buffer;
-       u32 bytes_written;
-       u32 bytes_read;
+       uint8_t* receive_buffer  = malloc(CEIL(scan_size, 8));
+       uint8_t* receive_pointer = receive_buffer;
+       uint32_t bytes_written;
+       uint32_t bytes_read;
        int retval;
        int thisrun_read = 0;
 
@@ -899,15 +958,16 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
 
        if (tap_get_state() != TAP_DRSHIFT)
        {
-               move_to_state( TAP_DRSHIFT );
+               move_to_state(TAP_DRSHIFT);
        }
 
-       if ( ( retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written) ) != ERROR_OK )
+       if ((retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written)) != ERROR_OK)
        {
                LOG_ERROR("couldn't write MPSSE commands to FT2232");
                exit(-1);
        }
-       LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, bytes_written);
+       LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i",
+                 ft2232_buffer_size, (int)bytes_written);
        ft2232_buffer_size = 0;
 
        /* add command for complete bytes */
@@ -918,34 +978,34 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                if (type == SCAN_IO)
                {
                        /* Clock Data Bytes In and Out LSB First */
-                       buffer_write( 0x39 );
+                       buffer_write(0x39);
                        /* LOG_DEBUG("added TDI bytes (io %i)", num_bytes); */
                }
                else if (type == SCAN_OUT)
                {
                        /* Clock Data Bytes Out on -ve Clock Edge LSB First (no Read) */
-                       buffer_write( 0x19 );
+                       buffer_write(0x19);
                        /* LOG_DEBUG("added TDI bytes (o)"); */
                }
                else if (type == SCAN_IN)
                {
                        /* Clock Data Bytes In on +ve Clock Edge LSB First (no Write) */
-                       buffer_write( 0x28 );
+                       buffer_write(0x28);
                        /* LOG_DEBUG("added TDI bytes (i %i)", num_bytes); */
                }
 
                thisrun_bytes = (num_bytes > 65537) ? 65536 : (num_bytes - 1);
                thisrun_read  = thisrun_bytes;
                num_bytes    -= thisrun_bytes;
-               buffer_write( (u8) (thisrun_bytes - 1) );
-               buffer_write( (u8) ( (thisrun_bytes - 1) >> 8 ));
+               buffer_write((uint8_t) (thisrun_bytes - 1));
+               buffer_write((uint8_t) ((thisrun_bytes - 1) >> 8));
 
                if (type != SCAN_IN)
                {
                        /* add complete bytes */
                        while (thisrun_bytes-- > 0)
                        {
-                               buffer_write( buffer[cur_byte] );
+                               buffer_write(buffer[cur_byte]);
                                cur_byte++;
                                bits_left -= 8;
                        }
@@ -955,22 +1015,26 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                        bits_left -= 8 * (thisrun_bytes);
                }
 
-               if ( ( retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written) ) != ERROR_OK )
+               if ((retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written)) != ERROR_OK)
                {
                        LOG_ERROR("couldn't write MPSSE commands to FT2232");
                        exit(-1);
                }
-               LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, bytes_written);
+               LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i",
+                         ft2232_buffer_size,
+                         (int)bytes_written);
                ft2232_buffer_size = 0;
 
                if (type != SCAN_OUT)
                {
-                       if ( ( retval = ft2232_read(receive_pointer, thisrun_read, &bytes_read) ) != ERROR_OK )
+                       if ((retval = ft2232_read(receive_pointer, thisrun_read, &bytes_read)) != ERROR_OK)
                        {
                                LOG_ERROR("couldn't read from FT2232");
                                exit(-1);
                        }
-                       LOG_DEBUG("thisrun_read: %i, bytes_read: %i", thisrun_read, bytes_read);
+                       LOG_DEBUG("thisrun_read: %i, bytes_read: %i",
+                                 thisrun_read,
+                                 (int)bytes_read);
                        receive_pointer += bytes_read;
                }
        }
@@ -979,7 +1043,7 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
 
        /* the most signifcant bit is scanned during TAP movement */
        if (type != SCAN_IN)
-               last_bit = ( buffer[cur_byte] >> (bits_left - 1) ) & 0x1;
+               last_bit = (buffer[cur_byte] >> (bits_left - 1)) & 0x1;
        else
                last_bit = 0;
 
@@ -989,24 +1053,24 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                if (type == SCAN_IO)
                {
                        /* Clock Data Bits In and Out LSB First */
-                       buffer_write( 0x3b );
+                       buffer_write(0x3b);
                        /* LOG_DEBUG("added TDI bits (io) %i", bits_left - 1); */
                }
                else if (type == SCAN_OUT)
                {
                        /* Clock Data Bits Out on -ve Clock Edge LSB First (no Read) */
-                       buffer_write( 0x1b );
+                       buffer_write(0x1b);
                        /* LOG_DEBUG("added TDI bits (o)"); */
                }
                else if (type == SCAN_IN)
                {
                        /* Clock Data Bits In on +ve Clock Edge LSB First (no Write) */
-                       buffer_write( 0x2a );
+                       buffer_write(0x2a);
                        /* LOG_DEBUG("added TDI bits (i %i)", bits_left - 1); */
                }
-               buffer_write( bits_left - 2 );
+               buffer_write(bits_left - 2);
                if (type != SCAN_IN)
-                       buffer_write( buffer[cur_byte] );
+                       buffer_write(buffer[cur_byte]);
 
                if (type != SCAN_OUT)
                        thisrun_read += 2;
@@ -1017,29 +1081,29 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                if (type == SCAN_IO)
                {
                        /* Clock Data Bits In and Out LSB First */
-                       buffer_write( 0x3b );
+                       buffer_write(0x3b);
                        /* LOG_DEBUG("added TDI bits (io) %i", bits_left - 1); */
                }
                else if (type == SCAN_OUT)
                {
                        /* Clock Data Bits Out on -ve Clock Edge LSB First (no Read) */
-                       buffer_write( 0x1b );
+                       buffer_write(0x1b);
                        /* LOG_DEBUG("added TDI bits (o)"); */
                }
                else if (type == SCAN_IN)
                {
                        /* Clock Data Bits In on +ve Clock Edge LSB First (no Write) */
-                       buffer_write( 0x2a );
+                       buffer_write(0x2a);
                        /* LOG_DEBUG("added TDI bits (i %i)", bits_left - 1); */
                }
-               buffer_write( 0x0 );
-               buffer_write( last_bit );
+               buffer_write(0x0);
+               buffer_write(last_bit);
        }
        else
        {
-               int tms_bits  = tap_get_tms_path( tap_get_state(), tap_get_end_state() );
-               int tms_count = tap_get_tms_path_len( tap_get_state(), tap_get_end_state() );
-               u8      mpsse_cmd;
+               int tms_bits  = tap_get_tms_path(tap_get_state(), tap_get_end_state());
+               int tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
+               uint8_t mpsse_cmd;
 
                /* move from Shift-IR/DR to end state */
                if (type != SCAN_OUT)
@@ -1055,28 +1119,32 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                        /* LOG_DEBUG("added TMS scan (no read)"); */
                }
 
-               clock_tms( mpsse_cmd, tms_bits, tms_count, last_bit );
+               clock_tms(mpsse_cmd, tms_bits, tms_count, last_bit);
        }
 
        if (type != SCAN_OUT)
                thisrun_read += 1;
 
-       if ( ( retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written) ) != ERROR_OK )
+       if ((retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written)) != ERROR_OK)
        {
                LOG_ERROR("couldn't write MPSSE commands to FT2232");
                exit(-1);
        }
-       LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, bytes_written);
+       LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i",
+                 ft2232_buffer_size,
+                 (int)bytes_written);
        ft2232_buffer_size = 0;
 
        if (type != SCAN_OUT)
        {
-               if ( ( retval = ft2232_read(receive_pointer, thisrun_read, &bytes_read) ) != ERROR_OK )
+               if ((retval = ft2232_read(receive_pointer, thisrun_read, &bytes_read)) != ERROR_OK)
                {
                        LOG_ERROR("couldn't read from FT2232");
                        exit(-1);
                }
-               LOG_DEBUG("thisrun_read: %i, bytes_read: %i", thisrun_read, bytes_read);
+               LOG_DEBUG("thisrun_read: %i, bytes_read: %i",
+                         thisrun_read,
+                         (int)bytes_read);
                receive_pointer += bytes_read;
        }
 
@@ -1090,7 +1158,7 @@ static int ft2232_predict_scan_out(int scan_size, enum scan_type type)
        int num_bytes = (scan_size - 1) / 8;
 
        if (tap_get_state() != TAP_DRSHIFT)
-               predicted_size += get_tms_buffer_requirements( tap_get_tms_path_len( tap_get_state(), TAP_DRSHIFT) );
+               predicted_size += get_tms_buffer_requirements(tap_get_tms_path_len(tap_get_state(), TAP_DRSHIFT));
 
        if (type == SCAN_IN)    /* only from device to host */
        {
@@ -1098,7 +1166,7 @@ static int ft2232_predict_scan_out(int scan_size, enum scan_type type)
                predicted_size += CEIL(num_bytes, 65536) * 3;
 
                /* remaining bits - 1 (up to 7) */
-               predicted_size += ( (scan_size - 1) % 8 ) ? 2 : 0;
+               predicted_size += ((scan_size - 1) % 8) ? 2 : 0;
        }
        else                    /* host to device, or bidirectional */
        {
@@ -1106,7 +1174,7 @@ static int ft2232_predict_scan_out(int scan_size, enum scan_type type)
                predicted_size += num_bytes + CEIL(num_bytes, 65536) * 3;
 
                /* remaining bits -1 (up to 7) */
-               predicted_size += ( (scan_size - 1) % 8 ) ? 3 : 0;
+               predicted_size += ((scan_size - 1) % 8) ? 3 : 0;
        }
 
        return predicted_size;
@@ -1123,7 +1191,7 @@ static int ft2232_predict_scan_in(int scan_size, enum scan_type type)
                predicted_size += (CEIL(scan_size, 8) > 1) ? (CEIL(scan_size, 8) - 1) : 0;
 
                /* remaining bits - 1 */
-               predicted_size += ( (scan_size - 1) % 8 ) ? 1 : 0;
+               predicted_size += ((scan_size - 1) % 8) ? 1 : 0;
 
                /* last bit (from TMS scan) */
                predicted_size += 1;
@@ -1137,6 +1205,7 @@ static int ft2232_predict_scan_in(int scan_size, enum scan_type type)
 
 static void usbjtag_reset(int trst, int srst)
 {
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (trst == 1)
        {
                if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
@@ -1168,14 +1237,15 @@ static void usbjtag_reset(int trst, int srst)
        }
 
        /* command "set data bits low byte" */
-       buffer_write( 0x80 );
-       buffer_write( low_output );
-       buffer_write( low_direction );
+       buffer_write(0x80);
+       buffer_write(low_output);
+       buffer_write(low_direction);
 }
 
 
 static void jtagkey_reset(int trst, int srst)
 {
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (trst == 1)
        {
                if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
@@ -1207,9 +1277,9 @@ static void jtagkey_reset(int trst, int srst)
        }
 
        /* command "set data bits high byte" */
-       buffer_write( 0x82 );
-       buffer_write( high_output );
-       buffer_write( high_direction );
+       buffer_write(0x82);
+       buffer_write(high_output);
+       buffer_write(high_direction);
        LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output,
                        high_direction);
 }
@@ -1217,6 +1287,7 @@ static void jtagkey_reset(int trst, int srst)
 
 static void olimex_jtag_reset(int trst, int srst)
 {
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (trst == 1)
        {
                if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
@@ -1242,9 +1313,9 @@ static void olimex_jtag_reset(int trst, int srst)
        }
 
        /* command "set data bits high byte" */
-       buffer_write( 0x82 );
-       buffer_write( high_output );
-       buffer_write( high_direction );
+       buffer_write(0x82);
+       buffer_write(high_output);
+       buffer_write(high_direction);
        LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output,
                        high_direction);
 }
@@ -1272,9 +1343,9 @@ static void axm0432_jtag_reset(int trst, int srst)
        }
 
        /* command "set data bits low byte" */
-       buffer_write( 0x82 );
-       buffer_write( high_output );
-       buffer_write( high_direction );
+       buffer_write(0x82);
+       buffer_write(high_output);
+       buffer_write(high_direction);
        LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output,
                        high_direction);
 }
@@ -1301,9 +1372,9 @@ static void flyswatter_reset(int trst, int srst)
        }
 
        /* command "set data bits low byte" */
-       buffer_write( 0x80 );
-       buffer_write( low_output );
-       buffer_write( low_direction );
+       buffer_write(0x80);
+       buffer_write(low_output);
+       buffer_write(low_direction);
        LOG_DEBUG("trst: %i, srst: %i, low_output: 0x%2.2x, low_direction: 0x%2.2x", trst, srst, low_output, low_direction);
 }
 
@@ -1322,9 +1393,9 @@ static void turtle_reset(int trst, int srst)
        }
 
        /* command "set data bits low byte" */
-       buffer_write( 0x80 );
-       buffer_write( low_output );
-       buffer_write( low_direction );
+       buffer_write(0x80);
+       buffer_write(low_output);
+       buffer_write(low_direction);
        LOG_DEBUG("srst: %i, low_output: 0x%2.2x, low_direction: 0x%2.2x", srst, low_output, low_direction);
 }
 
@@ -1350,9 +1421,9 @@ static void comstick_reset(int trst, int srst)
        }
 
        /* command "set data bits high byte" */
-       buffer_write( 0x82 );
-       buffer_write( high_output );
-       buffer_write( high_direction );
+       buffer_write(0x82);
+       buffer_write(high_output);
+       buffer_write(high_direction);
        LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output,
                        high_direction);
 }
@@ -1379,14 +1450,14 @@ static void stm32stick_reset(int trst, int srst)
        }
 
        /* command "set data bits low byte" */
-       buffer_write( 0x80 );
-       buffer_write( low_output );
-       buffer_write( low_direction );
+       buffer_write(0x80);
+       buffer_write(low_output);
+       buffer_write(low_direction);
 
        /* command "set data bits high byte" */
-       buffer_write( 0x82 );
-       buffer_write( high_output );
-       buffer_write( high_direction );
+       buffer_write(0x82);
+       buffer_write(high_output);
+       buffer_write(high_direction);
        LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output,
                        high_direction);
 }
@@ -1406,9 +1477,9 @@ static void sheevaplug_reset(int trst, int srst)
                high_output |= nSRSTnOE;
 
        /* command "set data bits high byte" */
-       buffer_write( 0x82 );
-       buffer_write( high_output );
-       buffer_write( high_direction );
+       buffer_write(0x82);
+       buffer_write(high_output);
+       buffer_write(high_direction);
        LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output, high_direction);
 }
 
@@ -1428,9 +1499,9 @@ static int ft2232_execute_runtest(jtag_command_t *cmd)
        if (tap_get_state() != TAP_IDLE)
                predicted_size += 3;
        predicted_size += 3 * CEIL(cmd->cmd.runtest->num_cycles, 7);
-       if ( (cmd->cmd.runtest->end_state != TAP_INVALID) && (cmd->cmd.runtest->end_state != TAP_IDLE) )
+       if (cmd->cmd.runtest->end_state != TAP_IDLE)
                predicted_size += 3;
-       if ( (cmd->cmd.runtest->end_state == TAP_INVALID) && (tap_get_end_state() != TAP_IDLE) )
+       if (tap_get_end_state() != TAP_IDLE)
                predicted_size += 3;
        if (ft2232_buffer_size + predicted_size + 1 > FT2232_BUFFER_SIZE)
        {
@@ -1441,7 +1512,7 @@ static int ft2232_execute_runtest(jtag_command_t *cmd)
        }
        if (tap_get_state() != TAP_IDLE)
        {
-               move_to_state( TAP_IDLE );
+               move_to_state(TAP_IDLE);
                require_send = 1;
        }
        i = cmd->cmd.runtest->num_cycles;
@@ -1450,30 +1521,29 @@ static int ft2232_execute_runtest(jtag_command_t *cmd)
                /* there are no state transitions in this code, so omit state tracking */
 
                /* command "Clock Data to TMS/CS Pin (no Read)" */
-               buffer_write( 0x4b );
+               buffer_write(0x4b);
 
                /* scan 7 bits */
-               buffer_write( (i > 7) ? 6 : (i - 1) );
+               buffer_write((i > 7) ? 6 : (i - 1));
 
                /* TMS data bits */
-               buffer_write( 0x0 );
+               buffer_write(0x0);
                tap_set_state(TAP_IDLE);
 
                i -= (i > 7) ? 7 : i;
                /* LOG_DEBUG("added TMS scan (no read)"); */
        }
 
-       if (cmd->cmd.runtest->end_state != TAP_INVALID)
-               ft2232_end_state(cmd->cmd.runtest->end_state);
+       ft2232_end_state(cmd->cmd.runtest->end_state);
 
-       if ( tap_get_state() != tap_get_end_state() )
+       if (tap_get_state() != tap_get_end_state())
        {
-               move_to_state( tap_get_end_state() );
+               move_to_state(tap_get_end_state());
        }
 
        require_send = 1;
 #ifdef _DEBUG_JTAG_IO_
-       LOG_DEBUG( "runtest: %i, end in %s", cmd->cmd.runtest->num_cycles, tap_state_name( tap_get_end_state() ) );
+       LOG_DEBUG("runtest: %i, end in %s", cmd->cmd.runtest->num_cycles, tap_state_name(tap_get_end_state()));
 #endif
 
        return retval;
@@ -1482,8 +1552,8 @@ static int ft2232_execute_runtest(jtag_command_t *cmd)
 
 static int ft2232_execute_statemove(jtag_command_t *cmd)
 {
-       int     predicted_size = 0;
-       int     retval = ERROR_OK;
+       int     predicted_size = 0;
+       int     retval = ERROR_OK;
 
        DEBUG_JTAG_IO("statemove end in %i", cmd->cmd.statemove->end_state);
 
@@ -1496,13 +1566,12 @@ static int ft2232_execute_statemove(jtag_command_t *cmd)
                require_send = 0;
                first_unsent = cmd;
        }
-       if (cmd->cmd.statemove->end_state != TAP_INVALID)
-               ft2232_end_state(cmd->cmd.statemove->end_state);
+       ft2232_end_state(cmd->cmd.statemove->end_state);
 
        /* move to end state */
-       if ( tap_get_state() != tap_get_end_state() )
+       if (tap_get_state() != tap_get_end_state())
        {
-               move_to_state( tap_get_end_state() );
+               move_to_state(tap_get_end_state());
                require_send = 1;
        }
 
@@ -1511,16 +1580,16 @@ static int ft2232_execute_statemove(jtag_command_t *cmd)
 
 static int ft2232_execute_pathmove(jtag_command_t *cmd)
 {
-       int     predicted_size = 0;
+       int     predicted_size = 0;
        int     retval = ERROR_OK;
 
        tap_state_t*     path = cmd->cmd.pathmove->path;
        int     num_states    = cmd->cmd.pathmove->num_states;
 
        DEBUG_JTAG_IO("pathmove: %i states, current: %s  end: %s", num_states,
-                       tap_state_name( tap_get_state() ),
-                       tap_state_name( path[num_states-1] )
-                       );
+                       tap_state_name(tap_get_state()),
+                       tap_state_name(path[num_states-1])
+);
 
        /* only send the maximum buffer size that FT2232C can handle */
        predicted_size = 3 * CEIL(num_states, 7);
@@ -1533,7 +1602,7 @@ static int ft2232_execute_pathmove(jtag_command_t *cmd)
                first_unsent = cmd;
        }
 
-       ft2232_add_pathmove( path, num_states );
+       ft2232_add_pathmove(path, num_states);
        require_send = 1;
 
        return retval;
@@ -1542,19 +1611,19 @@ static int ft2232_execute_pathmove(jtag_command_t *cmd)
 
 static int ft2232_execute_scan(jtag_command_t *cmd)
 {
-       u8*             buffer;
+       uint8_t*             buffer;
        int             scan_size;                  /* size of IR or DR scan */
        int             predicted_size = 0;
        int                             retval = ERROR_OK;
 
        enum scan_type  type = jtag_scan_type(cmd->cmd.scan);
 
-       DEBUG_JTAG_IO( "%s type:%d", cmd->cmd.scan->ir_scan ? "IRSCAN" : "DRSCAN", type );
+       DEBUG_JTAG_IO("%s type:%d", cmd->cmd.scan->ir_scan ? "IRSCAN" : "DRSCAN", type);
 
        scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
 
        predicted_size = ft2232_predict_scan_out(scan_size, type);
-       if ( (predicted_size + 1) > FT2232_BUFFER_SIZE )
+       if ((predicted_size + 1) > FT2232_BUFFER_SIZE)
        {
                LOG_DEBUG("oversized ft2232 scan (predicted_size > FT2232_BUFFER_SIZE)");
                /* unsent commands before this */
@@ -1563,8 +1632,7 @@ static int ft2232_execute_scan(jtag_command_t *cmd)
                                retval = ERROR_JTAG_QUEUE_FAILED;
 
                /* current command */
-               if (cmd->cmd.scan->end_state != TAP_INVALID)
-                       ft2232_end_state(cmd->cmd.scan->end_state);
+               ft2232_end_state(cmd->cmd.scan->end_state);
                ft2232_large_scan(cmd->cmd.scan, type, buffer, scan_size);
                require_send = 0;
                first_unsent = cmd->next;
@@ -1584,15 +1652,14 @@ static int ft2232_execute_scan(jtag_command_t *cmd)
        }
        ft2232_expect_read += ft2232_predict_scan_in(scan_size, type);
        /* LOG_DEBUG("new read size: %i", ft2232_expect_read); */
-       if (cmd->cmd.scan->end_state != TAP_INVALID)
-               ft2232_end_state(cmd->cmd.scan->end_state);
+       ft2232_end_state(cmd->cmd.scan->end_state);
        ft2232_add_scan(cmd->cmd.scan->ir_scan, type, buffer, scan_size);
        require_send = 1;
        if (buffer)
                free(buffer);
 #ifdef _DEBUG_JTAG_IO_
-       LOG_DEBUG( "%s scan, %i bits, end in %s", (cmd->cmd.scan->ir_scan) ? "IR" : "DR", scan_size,
-                       tap_state_name( tap_get_end_state() ) );
+       LOG_DEBUG("%s scan, %i bits, end in %s", (cmd->cmd.scan->ir_scan) ? "IR" : "DR", scan_size,
+                       tap_state_name(tap_get_end_state()));
 #endif
        return retval;
 
@@ -1638,7 +1705,7 @@ static int ft2232_execute_sleep(jtag_command_t *cmd)
        first_unsent = cmd->next;
        jtag_sleep(cmd->cmd.sleep->us);
 #ifdef _DEBUG_JTAG_IO_
-                       LOG_DEBUG( "sleep %i usec while in %s", cmd->cmd.sleep->us, tap_state_name( tap_get_state() ) );
+                       LOG_DEBUG("sleep %i usec while in %s", cmd->cmd.sleep->us, tap_state_name(tap_get_state()));
 #endif
 
        return retval;
@@ -1655,7 +1722,7 @@ static int ft2232_execute_stableclocks(jtag_command_t *cmd)
        if (ft2232_stableclocks(cmd->cmd.stableclocks->num_cycles, cmd) != ERROR_OK)
                retval = ERROR_JTAG_QUEUE_FAILED;
 #ifdef _DEBUG_JTAG_IO_
-       LOG_DEBUG( "clocks %i while in %s", cmd->cmd.stableclocks->num_cycles, tap_state_name( tap_get_state() ) );
+       LOG_DEBUG("clocks %i while in %s", cmd->cmd.stableclocks->num_cycles, tap_state_name(tap_get_state()));
 #endif
 
        return retval;
@@ -1668,13 +1735,13 @@ static int ft2232_execute_command(jtag_command_t *cmd)
 
        switch (cmd->type)
        {
-       case JTAG_RESET:                        retval = ft2232_execute_reset(cmd); break;
-       case JTAG_RUNTEST:      retval = ft2232_execute_runtest(cmd); break;
-       case JTAG_STATEMOVE:    retval = ft2232_execute_statemove(cmd); break;
-       case JTAG_PATHMOVE:     retval = ft2232_execute_pathmove(cmd); break;
-       case JTAG_SCAN:                         retval = ft2232_execute_scan(cmd); break;
-       case JTAG_SLEEP:                        retval = ft2232_execute_sleep(cmd); break;
-       case JTAG_STABLECLOCKS:         retval = ft2232_execute_stableclocks(cmd); break;
+       case JTAG_RESET:        retval = ft2232_execute_reset(cmd); break;
+       case JTAG_RUNTEST:      retval = ft2232_execute_runtest(cmd); break;
+       case JTAG_STATEMOVE: retval = ft2232_execute_statemove(cmd); break;
+       case JTAG_PATHMOVE:     retval = ft2232_execute_pathmove(cmd); break;
+       case JTAG_SCAN:         retval = ft2232_execute_scan(cmd); break;
+       case JTAG_SLEEP:        retval = ft2232_execute_sleep(cmd); break;
+       case JTAG_STABLECLOCKS: retval = ft2232_execute_stableclocks(cmd); break;
        default:
                LOG_ERROR("BUG: unknown JTAG command type encountered");
                exit(-1);
@@ -1725,18 +1792,21 @@ static int ft2232_execute_queue()
 
 
 #if BUILD_FT2232_FTD2XX == 1
-static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more)
+static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_more)
 {
-       FT_STATUS       status;
-       DWORD           openex_flags  = 0;
-       char*           openex_string = NULL;
-       u8              latency_timer;
+       FT_STATUS       status;
+       DWORD           deviceID;
+       char            SerialNumber[16];
+       char            Description[64];
+       DWORD   openex_flags  = 0;
+       char*   openex_string = NULL;
+       uint8_t latency_timer;
 
        LOG_DEBUG("'ft2232' interface using FTD2XX with '%s' layout (%4.4x:%4.4x)", ft2232_layout, vid, pid);
 
 #if IS_WIN32 == 0
        /* Add non-standard Vid/Pid to the linux driver */
-       if ( ( status = FT_SetVIDPID(vid, pid) ) != FT_OK )
+       if ((status = FT_SetVIDPID(vid, pid)) != FT_OK)
        {
                LOG_WARNING("couldn't add %4.4x:%4.4x", vid, pid);
        }
@@ -1767,27 +1837,27 @@ static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more)
        }
 
        status = FT_OpenEx(openex_string, openex_flags, &ftdih);
-       if( status != FT_OK ){
+       if (status != FT_OK) {
                // under Win32, the FTD2XX driver appends an "A" to the end
                // of the description, if we tried by the desc, then
                // try by the alternate "A" description.
-               if( openex_string == ft2232_device_desc ){
+               if (openex_string == ft2232_device_desc) {
                        // Try the alternate method.
                        openex_string = ft2232_device_desc_A;
                        status = FT_OpenEx(openex_string, openex_flags, &ftdih);
-                       if( status == FT_OK ){
+                       if (status == FT_OK) {
                                // yea, the "alternate" method worked!
                        } else {
                                // drat, give the user a meaningfull message.
                                // telling the use we tried *BOTH* methods.
                                LOG_WARNING("Unable to open FTDI Device tried: '%s' and '%s'\n",
                                                        ft2232_device_desc,
-                                                       ft2232_device_desc_A );
+                                                       ft2232_device_desc_A);
                        }
                }
        }
 
-       if ( status != FT_OK )
+       if (status != FT_OK)
        {
                DWORD num_devices;
 
@@ -1801,8 +1871,8 @@ static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more)
                status = FT_ListDevices(&num_devices, NULL, FT_LIST_NUMBER_ONLY);
                if (status == FT_OK)
                {
-                       char** desc_array = malloc( sizeof(char*) * (num_devices + 1) );
-                       u32 i;
+                       char** desc_array = malloc(sizeof(char*) * (num_devices + 1));
+                       uint32_t i;
 
                        for (i = 0; i < num_devices; i++)
                                desc_array[i] = malloc(64);
@@ -1830,13 +1900,13 @@ static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more)
                return ERROR_JTAG_INIT_FAILED;
        }
 
-       if ( ( status = FT_SetLatencyTimer(ftdih, ft2232_latency) ) != FT_OK )
+       if ((status = FT_SetLatencyTimer(ftdih, ft2232_latency)) != FT_OK)
        {
                LOG_ERROR("unable to set latency timer: %lu", status);
                return ERROR_JTAG_INIT_FAILED;
        }
 
-       if ( ( status = FT_GetLatencyTimer(ftdih, &latency_timer) ) != FT_OK )
+       if ((status = FT_GetLatencyTimer(ftdih, &latency_timer)) != FT_OK)
        {
                LOG_ERROR("unable to get latency timer: %lu", status);
                return ERROR_JTAG_INIT_FAILED;
@@ -1846,18 +1916,39 @@ static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more)
                LOG_DEBUG("current latency timer: %i", latency_timer);
        }
 
-       if ( ( status = FT_SetTimeouts(ftdih, 5000, 5000) ) != FT_OK )
+       if ((status = FT_SetTimeouts(ftdih, 5000, 5000)) != FT_OK)
        {
                LOG_ERROR("unable to set timeouts: %lu", status);
                return ERROR_JTAG_INIT_FAILED;
        }
 
-       if ( ( status = FT_SetBitMode(ftdih, 0x0b, 2) ) != FT_OK )
+       if ((status = FT_SetBitMode(ftdih, 0x0b, 2)) != FT_OK)
        {
                LOG_ERROR("unable to enable bit i/o mode: %lu", status);
                return ERROR_JTAG_INIT_FAILED;
        }
 
+       if ((status = FT_GetDeviceInfo(ftdih, &ftdi_device, &deviceID, SerialNumber, Description, NULL)) != FT_OK)
+       {
+               LOG_ERROR("unable to get FT_GetDeviceInfo: %lu", status);
+               return ERROR_JTAG_INIT_FAILED;
+       }
+       else
+       {
+               LOG_INFO("device: %lu", ftdi_device);
+               LOG_INFO("deviceID: %lu", deviceID);
+               LOG_INFO("SerialNumber: %s", SerialNumber);
+               LOG_INFO("Description: %s", Description);
+
+#ifdef BUILD_FTD2XX_HIGHSPEED
+               if (ft2232_device_is_highspeed())
+               {
+                       ft2232_max_tck = FTDI_2232H_4232H_MAX_TCK;
+                       LOG_INFO("max TCK change to: %u kHz", ft2232_max_tck);
+               }
+#endif
+       }
+
        return ERROR_OK;
 }
 
@@ -1866,7 +1957,7 @@ static int ft2232_purge_ftd2xx(void)
 {
        FT_STATUS status;
 
-       if ( ( status = FT_Purge(ftdih, FT_PURGE_RX | FT_PURGE_TX) ) != FT_OK )
+       if ((status = FT_Purge(ftdih, FT_PURGE_RX | FT_PURGE_TX)) != FT_OK)
        {
                LOG_ERROR("error purging ftd2xx device: %lu", status);
                return ERROR_JTAG_INIT_FAILED;
@@ -1879,9 +1970,9 @@ static int ft2232_purge_ftd2xx(void)
 #endif /* BUILD_FT2232_FTD2XX == 1 */
 
 #if BUILD_FT2232_LIBFTDI == 1
-static int ft2232_init_libftdi(u16 vid, u16 pid, int more, int* try_more)
+static int ft2232_init_libftdi(uint16_t vid, uint16_t pid, int more, int* try_more)
 {
-       u8 latency_timer;
+       uint8_t latency_timer;
 
        LOG_DEBUG("'ft2232' interface using libftdi with '%s' layout (%4.4x:%4.4x)",
                        ft2232_layout, vid, pid);
@@ -1953,22 +2044,22 @@ static int ft2232_purge_libftdi(void)
 
 static int ft2232_init(void)
 {
-       u8  buf[1];
+       uint8_t  buf[1];
        int retval;
-       u32 bytes_written;
-       ft2232_layout_t* cur_layout = ft2232_layouts;
+       uint32_t bytes_written;
+       const ft2232_layout_t* cur_layout = ft2232_layouts;
        int i;
 
-       if (tap_get_tms_path_len(TAP_IRPAUSE,TAP_IRPAUSE)==7)
-       { 
+       if (tap_get_tms_path_len(TAP_IRPAUSE,TAP_IRPAUSE) == 7)
+       {
                LOG_DEBUG("ft2232 interface using 7 step jtag state transitions");
        }
        else
        {
                LOG_DEBUG("ft2232 interface using shortest path jtag state transitions");
-       
+
        }
-       if ( (ft2232_layout == NULL) || (ft2232_layout[0] == 0) )
+       if ((ft2232_layout == NULL) || (ft2232_layout[0] == 0))
        {
                ft2232_layout = "usbjtag";
                LOG_WARNING("No ft2232 layout specified, using default 'usbjtag'");
@@ -2023,10 +2114,10 @@ static int ft2232_init(void)
        if (layout->init() != ERROR_OK)
                return ERROR_JTAG_INIT_FAILED;
 
-       ft2232_speed(jtag_speed);
+       ft2232_speed(jtag_get_speed());
 
        buf[0] = 0x85; /* Disconnect TDI/DO to TDO/DI for Loopback */
-       if ( ( ( retval = ft2232_write(buf, 1, &bytes_written) ) != ERROR_OK ) || (bytes_written != 1) )
+       if (((retval = ft2232_write(buf, 1, &bytes_written)) != ERROR_OK) || (bytes_written != 1))
        {
                LOG_ERROR("couldn't write to FT2232 to disable loopback");
                return ERROR_JTAG_INIT_FAILED;
@@ -2044,8 +2135,8 @@ static int ft2232_init(void)
 
 static int usbjtag_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x0b;
@@ -2073,12 +2164,22 @@ static int usbjtag_init(void)
                low_output    = 0x88;
                low_direction = 0x8b;
        }
+       else if (strcmp(ft2232_layout, "luminary_icdi") == 0)
+       {
+               nTRST = 0x0;
+               nTRSTnOE = 0x00;
+               nSRST = 0x20;
+               nSRSTnOE = 0x20;
+               low_output    = 0x88;
+               low_direction = 0xcb;
+       }
        else
        {
                LOG_ERROR("BUG: usbjtag_init called for unknown layout '%s'", ft2232_layout);
                return ERROR_JTAG_INIT_FAILED;
        }
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
        {
                low_direction &= ~nTRSTnOE; /* nTRST input */
@@ -2103,11 +2204,11 @@ static int usbjtag_init(void)
 
        /* initialize low byte for jtag */
        buf[0] = 0x80;          /* command "set data bits low byte" */
-       buf[1] = low_output;    /* value (TMS=1,TCK=0, TDI=0, xRST high) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in */
+       buf[1] = low_output;    /* value (TMS = 1,TCK = 0, TDI = 0, xRST high) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'USBJTAG' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2119,19 +2220,19 @@ static int usbjtag_init(void)
 
 static int axm0432_jtag_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x2b;
 
        /* initialize low byte for jtag */
        buf[0] = 0x80;          /* command "set data bits low byte" */
-       buf[1] = low_output;    /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in, nOE=out */
+       buf[1] = low_output;    /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE = out */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'JTAGkey' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2153,6 +2254,7 @@ static int axm0432_jtag_init(void)
        high_output    = 0x0;
        high_direction = 0x0c;
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
        {
                LOG_ERROR("can't set nTRSTOE to push-pull on the Dicarlo jtag");
@@ -2177,7 +2279,7 @@ static int axm0432_jtag_init(void)
        buf[2] = high_direction;    /* all outputs (xRST and xRSTnOE) */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'Dicarlo' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2189,19 +2291,19 @@ static int axm0432_jtag_init(void)
 
 static int jtagkey_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x1b;
 
        /* initialize low byte for jtag */
        buf[0] = 0x80;          /* command "set data bits low byte" */
-       buf[1] = low_output;    /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in, nOE=out */
+       buf[1] = low_output;    /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE = out */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'JTAGkey' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2214,8 +2316,8 @@ static int jtagkey_init(void)
                nSRST    = 0x02;
                nSRSTnOE = 0x08;
        }
-       else if ( (strcmp(layout->name, "jtagkey_prototype_v1") == 0)
-                        || (strcmp(layout->name, "oocdlink") == 0) )
+       else if ((strcmp(layout->name, "jtagkey_prototype_v1") == 0)
+                        || (strcmp(layout->name, "oocdlink") == 0))
        {
                nTRST    = 0x02;
                nTRSTnOE = 0x1;
@@ -2231,6 +2333,7 @@ static int jtagkey_init(void)
        high_output    = 0x0;
        high_direction = 0x0f;
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
        {
                high_output |= nTRSTnOE;
@@ -2259,7 +2362,7 @@ static int jtagkey_init(void)
        buf[2] = high_direction;    /* all outputs (xRST and xRSTnOE) */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'JTAGkey' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2271,21 +2374,21 @@ static int jtagkey_init(void)
 
 static int olimex_jtag_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x1b;
 
        /* initialize low byte for jtag */
        buf[0] = 0x80;          /* command "set data bits low byte" */
-       buf[1] = low_output;    /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in, nOE=out */
+       buf[1] = low_output;    /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE = out */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
-               LOG_ERROR("couldn't initialize FT2232 with 'JTAGkey' layout");
+               LOG_ERROR("couldn't initialize FT2232 with 'Olimex' layout");
                return ERROR_JTAG_INIT_FAILED;
        }
 
@@ -2297,6 +2400,7 @@ static int olimex_jtag_init(void)
        high_output    = 0x0;
        high_direction = 0x0f;
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
        {
                high_output |= nTRSTnOE;
@@ -2326,9 +2430,9 @@ static int olimex_jtag_init(void)
        buf[2] = high_direction;    /* all outputs (xRST and xRSTnOE) */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if ((ft2232_write(buf, 3, &bytes_written) != ERROR_OK) || (bytes_written != 3))
        {
-               LOG_ERROR("couldn't initialize FT2232 with 'JTAGkey' layout");
+               LOG_ERROR("couldn't initialize FT2232 with 'Olimex' layout");
                return ERROR_JTAG_INIT_FAILED;
        }
 
@@ -2338,19 +2442,19 @@ static int olimex_jtag_init(void)
 
 static int flyswatter_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x18;
        low_direction = 0xfb;
 
        /* initialize low byte for jtag */
        buf[0] = 0x80;          /* command "set data bits low byte" */
-       buf[1] = low_output;    /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in, nOE[12]=out, n[ST]srst=out */
+       buf[1] = low_output;    /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE[12]=out, n[ST]srst = out */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'flyswatter' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2373,7 +2477,7 @@ static int flyswatter_init(void)
        buf[2] = high_direction;    /* all outputs (xRST and xRSTnOE) */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'flyswatter' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2385,19 +2489,19 @@ static int flyswatter_init(void)
 
 static int turtle_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x5b;
 
        /* initialize low byte for jtag */
        buf[0] = 0x80;          /* command "set data bits low byte" */
-       buf[1] = low_output;    /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in, nOE=out */
+       buf[1] = low_output;    /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE = out */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'turtelizer2' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2414,7 +2518,7 @@ static int turtle_init(void)
        buf[2] = high_direction;
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'turtelizer2' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2426,19 +2530,19 @@ static int turtle_init(void)
 
 static int comstick_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x0b;
 
        /* initialize low byte for jtag */
        buf[0] = 0x80;          /* command "set data bits low byte" */
-       buf[1] = low_output;    /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in, nOE=out */
+       buf[1] = low_output;    /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE = out */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'comstick' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2458,7 +2562,7 @@ static int comstick_init(void)
        buf[2] = high_direction;
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'comstick' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2470,19 +2574,19 @@ static int comstick_init(void)
 
 static int stm32stick_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x88;
        low_direction = 0x8b;
 
        /* initialize low byte for jtag */
        buf[0] = 0x80;          /* command "set data bits low byte" */
-       buf[1] = low_output;    /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in, nOE=out */
+       buf[1] = low_output;    /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE = out */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'stm32stick' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2502,7 +2606,7 @@ static int stm32stick_init(void)
        buf[2] = high_direction;
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'stm32stick' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2514,16 +2618,16 @@ static int stm32stick_init(void)
 
 static int sheevaplug_init(void)
 {
-       u8 buf[3];
-       u32 bytes_written;
+       uint8_t buf[3];
+       uint32_t bytes_written;
 
        low_output = 0x08;
        low_direction = 0x1b;
 
        /* initialize low byte for jtag */
        buf[0] = 0x80; /* command "set data bits low byte" */
-       buf[1] = low_output; /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in */
+       buf[1] = low_output; /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
        if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
@@ -2563,21 +2667,21 @@ static int sheevaplug_init(void)
        return ERROR_OK;
 }
 
-static int     cortino_jtag_init(void)
+static int cortino_jtag_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x1b;
 
        /* initialize low byte for jtag */
        buf[0] = 0x80;          /* command "set data bits low byte" */
-       buf[1] = low_output;    /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
-       buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in, nOE=out */
+       buf[1] = low_output;    /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+       buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE = out */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'cortino' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2597,7 +2701,7 @@ static int        cortino_jtag_init(void)
        buf[2] = high_direction;
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3))
        {
                LOG_ERROR("couldn't initialize FT2232 with 'stm32stick' layout");
                return ERROR_JTAG_INIT_FAILED;
@@ -2622,9 +2726,9 @@ static void olimex_jtag_blink(void)
                high_output |= 0x08;
        }
 
-       buffer_write( 0x82 );
-       buffer_write( high_output );
-       buffer_write( high_direction );
+       buffer_write(0x82);
+       buffer_write(high_output);
+       buffer_write(high_direction);
 }
 
 
@@ -2635,9 +2739,9 @@ static void flyswatter_jtag_blink(void)
         */
        high_output ^= 0x0c;
 
-       buffer_write( 0x82 );
-       buffer_write( high_output );
-       buffer_write( high_direction );
+       buffer_write(0x82);
+       buffer_write(high_output);
+       buffer_write(high_direction);
 }
 
 
@@ -2655,9 +2759,9 @@ static void turtle_jtag_blink(void)
                high_output = 0x08;
        }
 
-       buffer_write( 0x82 );
-       buffer_write( high_output );
-       buffer_write( high_direction );
+       buffer_write(0x82);
+       buffer_write(high_output);
+       buffer_write(high_direction);
 }
 
 
@@ -2687,23 +2791,23 @@ static int ft2232_handle_device_desc_command(struct command_context_s* cmd_ctx,
        if (argc == 1)
        {
                ft2232_device_desc = strdup(args[0]);
-               cp = strchr( ft2232_device_desc, 0 );
+               cp = strchr(ft2232_device_desc, 0);
                // under Win32, the FTD2XX driver appends an "A" to the end
                // of the description, this examines the given desc
                // and creates the 'missing' _A or non_A variable.
-               if( (cp[-1] == 'A') && (cp[-2]==' ') ){
+               if ((cp[-1] == 'A') && (cp[-2]==' ')) {
                        // it was, so make this the "A" version.
                        ft2232_device_desc_A = ft2232_device_desc;
                        // and *CREATE* the non-A version.
-                       strcpy( buf, ft2232_device_desc );
-                       cp = strchr( buf, 0 );
+                       strcpy(buf, ft2232_device_desc);
+                       cp = strchr(buf, 0);
                        cp[-2] = 0;
-                       ft2232_device_desc =  strdup( buf );
+                       ft2232_device_desc =  strdup(buf);
                } else {
-                       // <space>A not defined
+                       // <space > A not defined
                        // so create it
-                       sprintf( buf, "%s A", ft2232_device_desc );
-                       ft2232_device_desc_A = strdup( buf );
+                       sprintf(buf, "%s A", ft2232_device_desc);
+                       ft2232_device_desc_A = strdup(buf);
                }
        }
        else
@@ -2744,25 +2848,31 @@ static int ft2232_handle_layout_command(struct command_context_s* cmd_ctx, char*
 
 static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc)
 {
-       int i;
-
        if (argc > MAX_USB_IDS * 2)
        {
                LOG_WARNING("ignoring extra IDs in ft2232_vid_pid "
                                        "(maximum is %d pairs)", MAX_USB_IDS);
                argc = MAX_USB_IDS * 2;
        }
-       if ( argc < 2 || (argc & 1) )
+       if (argc < 2 || (argc & 1))
        {
                LOG_WARNING("incomplete ft2232_vid_pid configuration directive");
                if (argc < 2)
-                       return ERROR_OK;
+                       return ERROR_COMMAND_SYNTAX_ERROR;
+               // remove the incomplete trailing id
+               argc -= 1;
        }
 
-       for (i = 0; i + 1 < argc; i += 2)
+       int i;
+       int retval = ERROR_OK;
+       for (i = 0; i < argc; i += 2)
        {
-               ft2232_vid[i >> 1] = strtol(args[i], NULL, 0);
-               ft2232_pid[i >> 1] = strtol(args[i + 1], NULL, 0);
+               retval = parse_u16(args[i], &ft2232_vid[i >> 1]);
+               if (ERROR_OK != retval)
+                       break;
+               retval = parse_u16(args[i + 1], &ft2232_pid[i >> 1]);
+               if (ERROR_OK != retval)
+                       break;
        }
 
        /*
@@ -2771,7 +2881,7 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char
         */
        ft2232_vid[i >> 1] = ft2232_pid[i >> 1] = 0;
 
-       return ERROR_OK;
+       return retval;
 }
 
 
@@ -2795,7 +2905,7 @@ static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd)
        int retval = 0;
 
        /* 7 bits of either ones or zeros. */
-       u8  tms = (tap_get_state() == TAP_RESET ? 0x7F : 0x00);
+       uint8_t  tms = (tap_get_state() == TAP_RESET ? 0x7F : 0x00);
 
        while (num_cycles > 0)
        {
@@ -2816,13 +2926,13 @@ static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd)
                /* there are no state transitions in this code, so omit state tracking */
 
                /* command "Clock Data to TMS/CS Pin (no Read)" */
-               buffer_write( 0x4b );
+               buffer_write(0x4b);
 
                /* scan 7 bit */
-               buffer_write( bitcount_per_command - 1 );
+               buffer_write(bitcount_per_command - 1);
 
                /* TMS data bits are either all zeros or ones to stay in the current stable state */
-               buffer_write( tms );
+               buffer_write(tms);
 
                require_send = 1;
 
@@ -2835,7 +2945,7 @@ static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd)
 
 /* ---------------------------------------------------------------------
  * Support for IceBear JTAG adapter from Section5:
- *     http://section5.ch/icebear
+ *     http://section5.ch/icebear
  *
  * Author: Sten, debian@sansys-electronic.com
  */
@@ -2860,14 +2970,15 @@ static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd)
  * ADBUS7 -   GND
  */
 static int icebear_jtag_init(void) {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_direction   = 0x0b; /* output: TCK TDI TMS; input: TDO */
        low_output      = 0x08; /* high: TMS; low: TCK TDI */
        nTRST           = 0x10;
        nSRST           = 0x20;
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if ((jtag_reset_config & RESET_TRST_OPEN_DRAIN) != 0) {
                low_direction   &= ~nTRST;      /* nTRST high impedance */
        }
@@ -2885,7 +2996,7 @@ static int icebear_jtag_init(void) {
        buf[2] = low_direction;
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) ) {
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3)) {
                LOG_ERROR("couldn't initialize FT2232 with 'IceBear' layout (low)");
                return ERROR_JTAG_INIT_FAILED;
        }
@@ -2900,7 +3011,7 @@ static int icebear_jtag_init(void) {
        buf[2] = high_direction;    /* all outputs (xRST and xRSTnOE) */
        LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
 
-       if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) ) {
+       if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3)) {
                LOG_ERROR("couldn't initialize FT2232 with 'IceBear' layout (high)");
                return ERROR_JTAG_INIT_FAILED;
        }
@@ -2915,6 +3026,7 @@ static void icebear_jtag_reset(int trst, int srst) {
                low_output      &= ~nTRST;
        }
        else if (trst == 0) {
+               enum reset_types jtag_reset_config = jtag_get_reset_config();
                if ((jtag_reset_config & RESET_TRST_OPEN_DRAIN) != 0)
                        low_direction   &= ~nTRST;
                else
@@ -2929,9 +3041,9 @@ static void icebear_jtag_reset(int trst, int srst) {
        }
 
        /* command "set data bits low byte" */
-       buffer_write( 0x80 );
-       buffer_write( low_output );
-       buffer_write( low_direction );
+       buffer_write(0x80);
+       buffer_write(low_output);
+       buffer_write(low_direction);
 
        LOG_DEBUG("trst: %i, srst: %i, low_output: 0x%2.2x, low_direction: 0x%2.2x", trst, srst, low_output, low_direction);
 }

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)