diff --git a/doc/openocd.texi b/doc/openocd.texi
index aa8bed1b1a601615259b0318bded7f3d253a567e..c6113abdb340e14e545b036bf1e291b028e7d17e 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -2130,6 +2130,7 @@ to debug some other target.  It can support the SWO trace mechanism.
 @item @b{olimex-jtag} Olimex ARM-USB-OCD and ARM-USB-Tiny
 @item @b{oocdlink} OOCDLink
 @c oocdlink ~= jtagkey_prototype_v1
+@item @b{redbee-econotag} Integrated with a Redbee development board.
 @item @b{sheevaplug} Marvell Sheevaplug development kit
 @item @b{signalyzer} Xverve Signalyzer
 @item @b{stm32stick} Hitex STM32 Performance Stick
diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c
index 5c6b655ce88aa68ed3064e92a8931b89ff9b089c..d2e96d0791af7fee6d6ffc0d109e6ffa46f073a1 100644
--- a/src/jtag/drivers/ft2232.c
+++ b/src/jtag/drivers/ft2232.c
@@ -162,6 +162,7 @@ static int icebear_jtag_init(void);
 static int cortino_jtag_init(void);
 static int signalyzer_h_init(void);
 static int ktlink_init(void);
+static int redbee_init(void);
 
 /* reset procedures for supported layouts */
 static void usbjtag_reset(int trst, int srst);
@@ -176,6 +177,7 @@ static void sheevaplug_reset(int trst, int srst);
 static void icebear_jtag_reset(int trst, int srst);
 static void signalyzer_h_reset(int trst, int srst);
 static void ktlink_reset(int trst, int srst);
+static void redbee_reset(int trst, int srst);
 
 /* blink procedures for layouts that support a blinking led */
 static void olimex_jtag_blink(void);
@@ -263,6 +265,10 @@ static const struct ft2232_layout  ft2232_layouts[] =
 		.reset = ktlink_reset,
 		.blink = ktlink_blink
 	},
+	{ .name = "redbee-econotag",
+		.init = redbee_init,
+		.reset = redbee_reset,
+	},
 	{ .name = NULL, /* END OF TABLE */ },
 };
 
@@ -1577,6 +1583,36 @@ static void sheevaplug_reset(int trst, int srst)
 	LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output, high_direction);
 }
 
+static void redbee_reset(int trst, int srst)
+{
+	if (trst == 1)
+	{
+		tap_set_state(TAP_RESET);
+		high_output &= ~nTRST;
+	}
+	else if (trst == 0)
+	{
+		high_output |= nTRST;
+	}
+
+	if (srst == 1)
+	{
+		high_output &= ~nSRST;
+	}
+	else if (srst == 0)
+	{
+		high_output |= nSRST;
+	}
+
+	/* command "set data bits low byte" */
+	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);
+}
+
 static int ft2232_execute_runtest(struct jtag_command *cmd)
 {
 	int retval;
@@ -2478,6 +2514,73 @@ static int axm0432_jtag_init(void)
 	return ERROR_OK;
 }
 
+static int redbee_init(void)
+{
+	uint8_t  buf[3];
+	uint32_t bytes_written;
+
+	low_output    = 0x08;
+	low_direction = 0x2b;
+
+	/* initialize low byte for jtag */
+	/* command "set data bits low byte" */
+	buf[0] = 0x80;
+	/* 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;
+	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))
+	{
+		LOG_ERROR("couldn't initialize FT2232 with 'redbee' layout");
+		return ERROR_JTAG_INIT_FAILED;
+	}
+
+	nTRST    = 0x08;
+	nTRSTnOE = 0x0;     /* No output enable for TRST*/
+	nSRST    = 0x04;
+	nSRSTnOE = 0x0;     /* No output enable for SRST*/
+
+	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 redbee");
+	}
+	else
+	{
+		high_output |= nTRST;
+	}
+
+	if (jtag_reset_config & RESET_SRST_PUSH_PULL)
+	{
+		LOG_ERROR("can't set nSRST to push-pull on redbee");
+	}
+	else
+	{
+		high_output |= nSRST;
+	}
+
+	/* initialize high port */
+	buf[0] = 0x82;              /* command "set data bits high byte" */
+	buf[1] = high_output;       /* value */
+	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))
+	{
+		LOG_ERROR("couldn't initialize FT2232 with 'redbee' layout");
+		return ERROR_JTAG_INIT_FAILED;
+	}
+
+	return ERROR_OK;
+}
+
 static int jtagkey_init(void)
 {
 	uint8_t  buf[3];
diff --git a/tcl/board/redbee-econotag.cfg b/tcl/board/redbee-econotag.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..7a02ce0d9f690ee19fb3628b72326e58c4a81fa5
--- /dev/null
+++ b/tcl/board/redbee-econotag.cfg
@@ -0,0 +1,8 @@
+source [find target/mc13224v.cfg]
+
+# The redbee-econotag has an onboard ft2232h with channel A wired
+# to the JTAG pins on the mc13224v
+# channel B is wired to UART1
+interface ft2232
+ft2232_layout redbee-econotag
+ft2232_vid_pid 0x0403 0x6010