ft2232: ft2232_channel option added 95/1095/5
authorRodrigo Melo <rmelo@inti.gob.ar>
Thu, 27 Dec 2012 22:31:21 +0000 (19:31 -0300)
committerSpencer Oliver <spen@spen-soft.co.uk>
Wed, 13 Mar 2013 12:32:45 +0000 (12:32 +0000)
With this option a different channel of the ft2232 chip can be selected using
a previously existing layout. It was made for a partner called Salvador
Tropea.

Change-Id: Ia0dedb2f50e232d089e73788735edc8f47ee23e6
Signed-off-by: Rodrigo Melo <rmelo@inti.gob.ar>
Reviewed-on: http://openocd.zylin.com/1095
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/jtag/drivers/ft2232.c

index 6758dc7..9a40ed9 100644 (file)
@@ -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
 };