ft2232_spi: add an ability to use GPIO for chip selection

Change-Id: I6db05619e0d69ad18549c8556ef69225337b1532
Signed-off-by: Sergey Alirzaev <zl29ah@gmail.com>
Reviewed-on: https://review.coreboot.org/28911
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
diff --git a/ft2232_spi.c b/ft2232_spi.c
index 819744c..95584aa 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -327,6 +327,23 @@
 	}
 	free(arg);
 
+	arg = extract_programmer_param("csgpiol");
+	if (arg) {
+		char *endptr;
+		unsigned int temp = strtoul(arg, &endptr, 10);
+		if (*endptr || endptr == arg || temp > 3) {
+			msg_perr("Error: Invalid GPIOL specified: \"%s\".\n"
+				 "Valid values are between 0 and 3.\n", arg);
+			free(arg);
+			return -2;
+		} else {
+			unsigned int pin = temp + 4;
+			cs_bits |= 1 << pin;
+			pindir |= 1 << pin;
+		}
+	}
+	free(arg);
+
 	msg_pdbg("Using device type %s %s ",
 		 get_ft2232_vendorname(ft2232_vid, ft2232_type),
 		 get_ft2232_devicename(ft2232_vid, ft2232_type));