diff options
Diffstat (limited to 'src/jtag/drivers/ft2232.c')
-rw-r--r-- | src/jtag/drivers/ft2232.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c index 6758dc7..9a40ed9 100644 --- a/src/jtag/drivers/ft2232.c +++ b/src/jtag/drivers/ft2232.c @@ -156,6 +156,7 @@ static char *ft2232_device_desc; static char *ft2232_serial; static uint8_t ft2232_latency = 2; static unsigned ft2232_max_tck = FTDI_2232C_MAX_TCK; +static int ft2232_channel = INTERFACE_ANY; #define MAX_USB_IDS 8 /* vid = pid = 0 marks the end of the list */ @@ -2358,7 +2359,7 @@ static int ft2232_init(void) more, &try_more); #elif BUILD_FT2232_LIBFTDI == 1 retval = ft2232_init_libftdi(ft2232_vid[i], ft2232_pid[i], - more, &try_more, layout->channel); + more, &try_more, ft2232_channel); #endif if (retval >= 0) break; @@ -3203,6 +3204,7 @@ COMMAND_HANDLER(ft2232_handle_layout_command) for (const struct ft2232_layout *l = ft2232_layouts; l->name; l++) { if (strcmp(l->name, CMD_ARGV[0]) == 0) { layout = l; + ft2232_channel = l->channel; return ERROR_OK; } } @@ -3251,6 +3253,18 @@ COMMAND_HANDLER(ft2232_handle_latency_command) return ERROR_OK; } +COMMAND_HANDLER(ft2232_handle_channel_command) +{ + if (CMD_ARGC == 1) { + ft2232_channel = atoi(CMD_ARGV[0]); + if (ft2232_channel < 0 || ft2232_channel > 4) + LOG_ERROR("ft2232_channel must be in the 0 to 4 range"); + } else + LOG_ERROR("expected exactly one argument to ft2232_channel <ch>"); + + return ERROR_OK; +} + static int ft2232_stableclocks(int num_cycles, struct jtag_command *cmd) { int retval = 0; @@ -4258,6 +4272,13 @@ static const struct command_registration ft2232_command_handlers[] = { .help = "set the FT2232 latency timer to a new value", .usage = "value", }, + { + .name = "ft2232_channel", + .handler = &ft2232_handle_channel_command, + .mode = COMMAND_CONFIG, + .help = "set the FT2232 channel to a new value", + .usage = "value", + }, COMMAND_REGISTRATION_DONE }; |