diff --git a/flash.h b/flash.h
index 4649bba..d978624 100644
--- a/flash.h
+++ b/flash.h
@@ -368,6 +368,9 @@
 extern struct pcidev_status satas_sii[];
 
 /* ft2232_spi.c */
+#define FTDI_FT2232H 0x6010
+#define FTDI_FT4232H 0x6011
+extern char *ft2232spi_param;
 int ft2232_spi_init(void);
 int ft2232_spi_command(unsigned int writecnt, unsigned int readcnt, const unsigned char *writearr, unsigned char *readarr);
 int ft2232_spi_read(struct flashchip *flash, uint8_t *buf, int start, int len);
diff --git a/flashrom.8 b/flashrom.8
index 446315e..cdc055f 100644
--- a/flashrom.8
+++ b/flashrom.8
@@ -183,6 +183,23 @@
 Currently the following programmers support this mechanism:
 .BR nic3com ,
 .BR satasii .
+.sp
+The ft2232spi has an optional parameter specifying the controller type and
+interface/port it should support. For that you have to use the
+.B "flashrom -p ft2232spi=model,port=interface"
+syntax where
+.B model
+can be any of
+.B 2232H 4232H
+and
+.B interface
+can be any of
+.B A
+.BR B .
+The default model is
+.B 4232H
+and the default interface is
+.BR B .
 .TP
 .B "\-h, \-\-help"
 Show a help text and exit.
diff --git a/flashrom.c b/flashrom.c
index 6822b4f..af8281e 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -649,10 +649,12 @@
 				programmer = PROGRAMMER_IT87SPI;
 			} else if (strncmp(optarg, "ft2232spi", 9) == 0) {
 				programmer = PROGRAMMER_FT2232SPI;
- 			} else if (strncmp(optarg, "serprog", 7) == 0) {
- 				programmer = PROGRAMMER_SERPROG;
- 				if (optarg[7] == '=')
- 					serprog_param = strdup(optarg + 8);
+				if (optarg[9] == '=')
+					ft2232spi_param = strdup(optarg + 10);
+			} else if (strncmp(optarg, "serprog", 7) == 0) {
+				programmer = PROGRAMMER_SERPROG;
+				if (optarg[7] == '=')
+					serprog_param = strdup(optarg + 8);
 			} else {
 				printf("Error: Unknown programmer.\n");
 				exit(1);
diff --git a/ft2232_spi.c b/ft2232_spi.c
index 36b8969..d8ca743 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -22,9 +22,12 @@
 #include <stdint.h>
 #include <string.h>
 #include <stdlib.h>
+#include <ctype.h>
 #include "flash.h"
 #include "spi.h"
 
+char *ft2232spi_param = NULL;
+
 #if FT2232_SPI_SUPPORT == 1
 
 #include <ftdi.h>
@@ -71,15 +74,47 @@
 	struct ftdi_context *ftdic = &ftdic_context;
 	unsigned char buf[512];
 	unsigned char port_val = 0;
-
+	char *portpos = NULL;
+	int ft2232_type = FTDI_FT4232H;
+	enum ftdi_interface ft2232_interface = INTERFACE_B;
 
 	if (ftdi_init(ftdic) < 0) {
 		fprintf(stderr, "ftdi_init failed\n");
 		return EXIT_FAILURE;
 	}
 
-	// f = ftdi_usb_open(ftdic, 0x0403, 0x6010); // FT2232
-	f = ftdi_usb_open(ftdic, 0x0403, 0x6011); // FT4232
+	if (ft2232spi_param && !strlen(ft2232spi_param)) {
+		free(ft2232spi_param);
+		ft2232spi_param = NULL;
+	}
+	if (ft2232spi_param) {
+		if (strstr(ft2232spi_param, "2232"))
+			ft2232_type = FTDI_FT2232H;
+		if (strstr(ft2232spi_param, "4232"))
+			ft2232_type = FTDI_FT4232H;
+		portpos = strstr(ft2232spi_param, "port=");
+		if (portpos) {
+			portpos += 5;
+			switch (toupper(*portpos)) {
+			case 'A':
+				ft2232_interface = INTERFACE_A;
+				break;
+			case 'B':
+				ft2232_interface = INTERFACE_B;
+				break;
+			default:
+				fprintf(stderr, "Invalid interface specified, "
+					"using default.\n");
+			}
+		}
+		free(ft2232spi_param);
+	}
+	printf_debug("Using device type %s ",
+		     (ft2232_type == FTDI_FT2232H) ? "2232H" : "4232H");
+	printf_debug("interface %s\n",
+		     (ft2232_interface == INTERFACE_A) ? "A" : "B");
+
+	f = ftdi_usb_open(ftdic, 0x0403, ft2232_type);
 
 	if (f < 0 && f != -5) {
 		fprintf(stderr, "Unable to open ftdi device: %d (%s)\n", f,
@@ -87,8 +122,8 @@
 		exit(-1);
 	}
 
-	if (ftdi_set_interface(ftdic, INTERFACE_B) < 0) {
-		fprintf(stderr, "Unable to select FT2232 channel B: %s\n",
+	if (ftdi_set_interface(ftdic, ft2232_interface) < 0) {
+		fprintf(stderr, "Unable to select interface: %s\n",
 				ftdic->error_str);
 	}
 
