diff --git a/dummyflasher.c b/dummyflasher.c
index edcaf7a..ba3c633 100644
--- a/dummyflasher.c
+++ b/dummyflasher.c
@@ -20,16 +20,52 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <ctype.h>
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <errno.h>
 #include "flash.h"
 
+char *dummytype = NULL;
+
 int dummy_init(void)
 {
+	int i;
 	printf_debug("%s\n", __func__);
-	spi_controller = SPI_CONTROLLER_DUMMY;
+
+	/* "all" is equivalent to specifying no type. */
+	if (!strcmp(dummytype, "all")) {
+		free(dummytype);
+		dummytype = NULL;
+	}
+	if (!dummytype)
+		dummytype = strdup("parallel,lpc,fwh,spi");
+	/* Convert the parameters to lowercase. */
+	for (i = 0; dummytype[i] != '\0'; i++)
+		dummytype[i] = (char)tolower(dummytype[i]);
+
+	buses_supported = CHIP_BUSTYPE_NONE;
+	if (strstr(dummytype, "parallel")) {
+		buses_supported |= CHIP_BUSTYPE_PARALLEL;
+		printf_debug("Enabling support for %s flash.\n", "parallel");
+	}
+	if (strstr(dummytype, "lpc")) {
+		buses_supported |= CHIP_BUSTYPE_LPC;
+		printf_debug("Enabling support for %s flash.\n", "LPC");
+	}
+	if (strstr(dummytype, "fwh")) {
+		buses_supported |= CHIP_BUSTYPE_FWH;
+		printf_debug("Enabling support for %s flash.\n", "FWH");
+	}
+	if (strstr(dummytype, "spi")) {
+		buses_supported |= CHIP_BUSTYPE_SPI;
+		spi_controller = SPI_CONTROLLER_DUMMY;
+		printf_debug("Enabling support for %s flash.\n", "SPI");
+	}
+	if (buses_supported == CHIP_BUSTYPE_NONE)
+		printf_debug("Support for all flash bus types disabled.\n");
+	free(dummytype);
 	return 0; 
 }
 
diff --git a/flash.h b/flash.h
index becab69..1668a57 100644
--- a/flash.h
+++ b/flash.h
@@ -122,6 +122,7 @@
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 
 enum chipbustype {
+	CHIP_BUSTYPE_NONE	= 0,
 	CHIP_BUSTYPE_PARALLEL	= 1 << 0,
 	CHIP_BUSTYPE_LPC	= 1 << 1,
 	CHIP_BUSTYPE_FWH	= 1 << 2,
@@ -646,6 +647,7 @@
 #endif
 
 /* dummyflasher.c */
+extern char *dummytype;
 int dummy_init(void);
 int dummy_shutdown(void);
 void *dummy_map(const char *descr, unsigned long phys_addr, size_t len);
diff --git a/flashrom.8 b/flashrom.8
index 8a7baba..7a52725 100644
--- a/flashrom.8
+++ b/flashrom.8
@@ -135,6 +135,18 @@
 .sp
 .BR "* it87spi" " (for flash ROMs behind a IT87xx SuperI/O LPC/SPI translation unit)"
 .sp
+The dummy programmer has an optional parameter specifying the bus types it
+should support. For that you have to use the
+.B "flashrom -p dummy=type"
+syntax where
+.B type
+can be any comma-separated combination of
+.B parallel lpc fwh spi all
+in any order.
+.sp
+Example:
+.B "flashrom -p dummy=lpc,fwh"
+.sp
 If you have multiple supported PCI cards which can program flash chips
 (NICs, SATA/IDE controllers, etc.) in your system, you must use the
 .B "flashrom -p xxxx=bb:dd.f"
diff --git a/flashrom.c b/flashrom.c
index 5113a6b..0eb502d 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -537,6 +537,8 @@
 				programmer = PROGRAMMER_INTERNAL;
 			} else if (strncmp(optarg, "dummy", 5) == 0) {
 				programmer = PROGRAMMER_DUMMY;
+				if (optarg[5] == '=')
+					dummytype = strdup(optarg + 6);
 			} else if (strncmp(optarg, "nic3com", 7) == 0) {
 				programmer = PROGRAMMER_NIC3COM;
 				if (optarg[7] == '=')
