Add Tincantools Flyswatter2 support
authorMarek Vasut <marek.vasut@gmail.com>
Fri, 11 Nov 2011 22:38:36 +0000 (23:38 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Tue, 15 Nov 2011 20:55:11 +0000 (20:55 +0000)
This is a successor to the Flyswatter cable and is very close to the original.
The new revision is based on FT2232H.

Change-Id: Icc6efcf0e4f9d8a10b65df8679b4973f6b375a9f
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Cc: David Anders <danders@tincantools.com>
Reviewed-on: http://openocd.zylin.com/193
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/jtag/drivers/ft2232.c
tcl/interface/flyswatter2.cfg [new file with mode: 0644]

index 881d7c772b79ac01f729326e65ee2db75ca4c56a..73aea01f673a0830bf6792f6e64ccee86696b3a8 100644 (file)
@@ -177,7 +177,8 @@ static int jtagkey_init(void);
 static int lm3s811_jtag_init(void);
 static int icdi_jtag_init(void);
 static int olimex_jtag_init(void);
-static int flyswatter_init(void);
+static int flyswatter1_init(void);
+static int flyswatter2_init(void);
 static int minimodule_init(void);
 static int turtle_init(void);
 static int comstick_init(void);
@@ -198,7 +199,8 @@ static int xds100v2_init(void);
 static void ftx23_reset(int trst, int srst);
 static void jtagkey_reset(int trst, int srst);
 static void olimex_jtag_reset(int trst, int srst);
-static void flyswatter_reset(int trst, int srst);
+static void flyswatter1_reset(int trst, int srst);
+static void flyswatter2_reset(int trst, int srst);
 static void minimodule_reset(int trst, int srst);
 static void turtle_reset(int trst, int srst);
 static void comstick_reset(int trst, int srst);
@@ -213,7 +215,8 @@ static void xds100v2_reset(int trst, int srst);
 
 /* blink procedures for layouts that support a blinking led */
 static void olimex_jtag_blink(void);
-static void flyswatter_jtag_blink(void);
+static void flyswatter1_jtag_blink(void);
+static void flyswatter2_jtag_blink(void);
 static void turtle_jtag_blink(void);
 static void signalyzer_h_blink(void);
 static void ktlink_blink(void);
@@ -260,9 +263,14 @@ static const struct ft2232_layout  ft2232_layouts[] =
                .blink = olimex_jtag_blink
        },
        { .name = "flyswatter",
-               .init = flyswatter_init,
-               .reset = flyswatter_reset,
-               .blink = flyswatter_jtag_blink
+               .init = flyswatter1_init,
+               .reset = flyswatter1_reset,
+               .blink = flyswatter1_jtag_blink
+       },
+       { .name = "flyswatter2",
+               .init = flyswatter2_init,
+               .reset = flyswatter2_reset,
+               .blink = flyswatter2_jtag_blink
        },
        { .name = "minimodule",
                .init = minimodule_init,
@@ -1571,6 +1579,16 @@ static void flyswatter_reset(int trst, int srst)
        LOG_DEBUG("trst: %i, srst: %i, low_output: 0x%2.2x, low_direction: 0x%2.2x", trst, srst, low_output, low_direction);
 }
 
+static void flyswatter1_reset(int trst, int srst)
+{
+       flyswatter_reset(trst, srst);
+}
+
+static void flyswatter2_reset(int trst, int srst)
+{
+       flyswatter_reset(trst, !srst);
+}
+
 static void minimodule_reset(int trst, int srst)
 {
        if (srst == 1)
@@ -2911,10 +2929,18 @@ static int olimex_jtag_init(void)
        return ERROR_OK;
 }
 
-static int flyswatter_init(void)
+static int flyswatter_init(int rev)
 {
        low_output    = 0x18;
-       low_direction = 0xfb;
+       low_direction = 0x7b;
+
+       if ((rev < 0) || (rev > 3)) {
+               LOG_ERROR("bogus 'flyswatter' revision supplied (%i)", rev);
+               return ERROR_JTAG_INIT_FAILED;
+       }
+
+       if (rev == 1)
+               low_direction |= 1 << 7;
 
        /* initialize low byte for jtag */
        if (ft2232_set_data_bits_low_byte(low_output,low_direction) != ERROR_OK)
@@ -2929,7 +2955,11 @@ static int flyswatter_init(void)
        nSRSTnOE = 0x00;    /* no output enable for nSRST */
 
        high_output    = 0x00;
-       high_direction = 0x0c;
+
+       if (rev == 1)
+               high_direction = 0x0c;
+       else
+               high_direction = 0x01;
 
        /* turn red LED3 on, LED2 off */
        high_output |= 0x08;
@@ -2944,6 +2974,16 @@ static int flyswatter_init(void)
        return ERROR_OK;
 }
 
+static int flyswatter1_init(void)
+{
+       return flyswatter_init(1);
+}
+
+static int flyswatter2_init(void)
+{
+       return flyswatter_init(2);
+}
+
 static int minimodule_init(void)
 {
        low_output    = 0x18;//check if srst should be 1 or 0 initially. (0x08) (flyswatter was 0x18)
@@ -3251,16 +3291,27 @@ static void olimex_jtag_blink(void)
        buffer_write(high_direction);
 }
 
-static void flyswatter_jtag_blink(void)
+static void flyswatter_jtag_blink(unsigned char led)
+{
+       buffer_write(0x82);
+       buffer_write(high_output ^ led);
+       buffer_write(high_direction);
+}
+
+static void flyswatter1_jtag_blink(void)
 {
        /*
         * Flyswatter has two LEDs connected to ACBUS2 and ACBUS3
         */
-       high_output ^= 0x0c;
+       flyswatter_jtag_blink(0xc);
+}
 
-       buffer_write(0x82);
-       buffer_write(high_output);
-       buffer_write(high_direction);
+static void flyswatter2_jtag_blink(void)
+{
+       /*
+        * Flyswatter2 only has one LED connected to ACBUS2
+        */
+       flyswatter_jtag_blink(0x4);
 }
 
 static void turtle_jtag_blink(void)
diff --git a/tcl/interface/flyswatter2.cfg b/tcl/interface/flyswatter2.cfg
new file mode 100644 (file)
index 0000000..ecefd2f
--- /dev/null
@@ -0,0 +1,10 @@
+#
+# TinCanTools Flyswatter 2
+#
+# http://www.tincantools.com/product.php?productid=16134
+#
+
+interface ft2232
+ft2232_device_desc "Flyswatter2"
+ft2232_layout "flyswatter2"
+ft2232_vid_pid 0x0403 0x6010