Add bus type annotation to struct flashchips

Right now, the annotation only differentiates between SPI and non-SPI.
Anyone who knows more about a specific flash chip should feel free to
update it.

The existing flashbus variable was abused to denote the SPI controller
type. Use an aptly named variable for that purpose.

Once this patch is merged, the chipset/programmer init functions can set
supported flash chip types and flashrom can automatically select only
matching probe/read/erase/write functions. A side benefit of that will
be the elimination of the Winbond W29EE011 vs. AMIC A49LF040A conflict.

Corresponding to flashrom svn r556.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
diff --git a/chipset_enable.c b/chipset_enable.c
index 8fbbe86..5436493 100644
--- a/chipset_enable.c
+++ b/chipset_enable.c
@@ -42,8 +42,7 @@
  * Eventually, this will become an array when multiple flash support works.
  */
 
-flashbus_t flashbus = BUS_TYPE_LPC;
-void *spibar = NULL;
+enum chipbustype buses_supported = CHIP_BUSTYPE_UNKNOWN;
 
 extern int ichspi_lock;
 
@@ -218,7 +217,7 @@
 	printf_debug("0x6c: 0x%04x     (CLOCK/DEBUG)\n",
 		     mmio_readw(spibar + 0x6c));
 
-	flashbus = BUS_TYPE_VIA_SPI;
+	spi_controller = SPI_CONTROLLER_VIA;
 	ich_init_opcodes();
 
 	return 0;
@@ -269,17 +268,17 @@
 
 	switch (ich_generation) {
 	case 7:
-		flashbus = BUS_TYPE_ICH7_SPI;
+		spi_controller = SPI_CONTROLLER_ICH7;
 		spibar_offset = 0x3020;
 		break;
 	case 8:
-		flashbus = BUS_TYPE_ICH9_SPI;
+		spi_controller = SPI_CONTROLLER_ICH9;
 		spibar_offset = 0x3020;
 		break;
 	case 9:
 	case 10:
 	default:		/* Future version might behave the same */
-		flashbus = BUS_TYPE_ICH9_SPI;
+		spi_controller = SPI_CONTROLLER_ICH9;
 		spibar_offset = 0x3800;
 		break;
 	}
@@ -290,8 +289,8 @@
 	/* Assign Virtual Address */
 	spibar = rcrb + spibar_offset;
 
-	switch (flashbus) {
-	case BUS_TYPE_ICH7_SPI:
+	switch (spi_controller) {
+	case SPI_CONTROLLER_ICH7:
 		printf_debug("0x00: 0x%04x     (SPIS)\n",
 			     mmio_readw(spibar + 0));
 		printf_debug("0x02: 0x%04x     (SPIC)\n",
@@ -329,7 +328,7 @@
 		}
 		ich_init_opcodes();
 		break;
-	case BUS_TYPE_ICH9_SPI:
+	case SPI_CONTROLLER_ICH9:
 		tmp2 = mmio_readw(spibar + 4);
 		printf_debug("0x04: 0x%04x (HSFS)\n", tmp2);
 		printf_debug("FLOCKDN %i, ", (tmp2 >> 15 & 1));
@@ -729,7 +728,7 @@
 	}
 
 	if (has_spi)
-		flashbus = BUS_TYPE_SB600_SPI;
+		spi_controller = SPI_CONTROLLER_SB600;
 
 	/* Read ROM strap override register. */
 	OUTB(0x8f, 0xcd6);
diff --git a/dummyflasher.c b/dummyflasher.c
index c03aead..edcaf7a 100644
--- a/dummyflasher.c
+++ b/dummyflasher.c
@@ -29,7 +29,7 @@
 int dummy_init(void)
 {
 	printf_debug("%s\n", __func__);
-	flashbus = BUS_TYPE_DUMMY_SPI;
+	spi_controller = SPI_CONTROLLER_DUMMY;
 	return 0; 
 }
 
diff --git a/flash.h b/flash.h
index fd15e87..c056f6e 100644
--- a/flash.h
+++ b/flash.h
@@ -120,9 +120,21 @@
 
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 
+enum chipbustype {
+	CHIP_BUSTYPE_PARALLEL	= 1 << 0,
+	CHIP_BUSTYPE_LPC	= 1 << 1,
+	CHIP_BUSTYPE_FWH	= 1 << 2,
+	CHIP_BUSTYPE_SPI	= 1 << 3,
+	CHIP_BUSTYPE_NONSPI	= CHIP_BUSTYPE_PARALLEL | CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH,
+	CHIP_BUSTYPE_UNKNOWN	= CHIP_BUSTYPE_PARALLEL | CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_SPI,
+};
+
 struct flashchip {
 	const char *vendor;
 	const char *name;
+
+	enum chipbustype bustype;
+
 	/*
 	 * With 32bit manufacture_id and model_id we can cover IDs up to
 	 * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's
@@ -592,25 +604,12 @@
 void print_supported_boards(void);
 
 /* chipset_enable.c */
+extern enum chipbustype buses_supported;
 int chipset_flash_enable(void);
 void print_supported_chipsets(void);
 
 extern unsigned long flashbase;
 
-typedef enum {
-	BUS_TYPE_LPC,
-	BUS_TYPE_ICH7_SPI,
-	BUS_TYPE_ICH9_SPI,
-	BUS_TYPE_IT87XX_SPI,
-	BUS_TYPE_SB600_SPI,
-	BUS_TYPE_VIA_SPI,
-	BUS_TYPE_WBSIO_SPI,
-	BUS_TYPE_DUMMY_SPI
-} flashbus_t;
-
-extern flashbus_t flashbus;
-extern void *spibar;
-
 /* physmap.c */
 void *physmap(const char *descr, unsigned long phys_addr, size_t len);
 void physunmap(void *virt_addr, size_t len);
@@ -691,6 +690,18 @@
 extern char *lb_part, *lb_vendor;
 
 /* spi.c */
+enum spi_controller {
+	SPI_CONTROLLER_NONE,
+	SPI_CONTROLLER_ICH7,
+	SPI_CONTROLLER_ICH9,
+	SPI_CONTROLLER_IT87XX,
+	SPI_CONTROLLER_SB600,
+	SPI_CONTROLLER_VIA,
+	SPI_CONTROLLER_WBSIO,
+	SPI_CONTROLLER_DUMMY,
+};
+extern enum spi_controller spi_controller;
+extern void *spibar;
 int probe_spi_rdid(struct flashchip *flash);
 int probe_spi_rdid4(struct flashchip *flash);
 int probe_spi_rems(struct flashchip *flash);
diff --git a/flashchips.c b/flashchips.c
index 857ffd5..cf96db7 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -40,6 +40,7 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F002(N)BB",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29F002BB,
 		.total_size	= 256,
@@ -54,6 +55,7 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F002(N)BT",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29F002BT,
 		.total_size	= 256,
@@ -68,6 +70,7 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F016D",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29F016D,
 		.total_size	= 2048,
@@ -82,6 +85,7 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F040B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29F040B,
 		.total_size	= 512,
@@ -96,6 +100,7 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F080B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= 0x01,
 		.model_id	= 0xd5,
 		.total_size	= 1024,
@@ -110,6 +115,7 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29LV040B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29LV040B,
 		.total_size	= 512,
@@ -124,6 +130,7 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29LV081B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= 0x01,
 		.model_id	= 0x38,
 		.total_size	= 1024,
@@ -138,6 +145,7 @@
 	{
 		.vendor		= "ASD",
 		.name		= "AE49F2008",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ASD_ID,
 		.model_id	= ASD_AE49F2008,
 		.total_size	= 256,
@@ -152,6 +160,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF021",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF021,
 		.total_size	= 256,
@@ -166,6 +175,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF041A",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF041A,
 		.total_size	= 512,
@@ -180,6 +190,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF081",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF081,
 		.total_size	= 1024,
@@ -194,6 +205,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF161",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF161,
 		.total_size	= 2048,
@@ -208,6 +220,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF321",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF321,
 		.total_size	= 4096,
@@ -222,6 +235,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF321A",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF321A,
 		.total_size	= 4096,
@@ -236,6 +250,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF641",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF641,
 		.total_size	= 8192,
@@ -250,6 +265,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25F512B",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25F512B,
 		.total_size	= 64,
@@ -264,6 +280,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25FS010",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25FS010,
 		.total_size	= 128,
@@ -278,6 +295,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25FS040",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25FS040,
 		.total_size	= 512,
@@ -292,6 +310,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26DF041",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF041,
 		.total_size	= 512,
@@ -306,6 +325,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26DF081A",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF081A,
 		.total_size	= 1024,
@@ -320,6 +340,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26DF161",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF161,
 		.total_size	= 2048,
@@ -334,6 +355,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26DF161A",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF161A,
 		.total_size	= 2048,
@@ -349,6 +371,7 @@
 	/*{
 		.vendor		= "Atmel",
 		.name		= "AT26DF321",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF321,
 		.total_size	= 4096,
@@ -363,6 +386,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26F004",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26F004,
 		.total_size	= 512,
@@ -377,6 +401,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT29C010A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_29C010A,
 		.total_size	= 128,
@@ -391,6 +416,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT29C020",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_29C020,
 		.total_size	= 256,
@@ -405,6 +431,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT29C040A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_29C040A,
 		.total_size	= 512,
@@ -419,6 +446,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45CS1282",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45CS1282,
 		.total_size	= 16896 /* No power of two sizes */,
@@ -433,6 +461,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB011D",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB011D,
 		.total_size	= 128 /* Size can only be determined from status register */,
@@ -447,6 +476,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB021D",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB021D,
 		.total_size	= 256 /* Size can only be determined from status register */,
@@ -461,6 +491,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB041D",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB041D,
 		.total_size	= 512 /* Size can only be determined from status register */,
@@ -475,6 +506,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB081D",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB081D,
 		.total_size	= 1024 /* Size can only be determined from status register */,
@@ -489,6 +521,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB161D",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB161D,
 		.total_size	= 2048 /* Size can only be determined from status register */,
@@ -503,6 +536,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB321C",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB321C,
 		.total_size	= 4224 /* No power of two sizes */,
@@ -517,6 +551,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB321D",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB321D,
 		.total_size	= 4096 /* Size can only be determined from status register */,
@@ -531,6 +566,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB642D",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB642D,
 		.total_size	= 8192 /* Size can only be determined from status register */,
@@ -545,6 +581,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT49BV512",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_49BV512,
 		.total_size	= 64,
@@ -559,6 +596,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT49F002(N)",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_49F002N,
 		.total_size	= 256,
@@ -573,6 +611,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT49F002(N)T",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_49F002NT,
 		.total_size	= 256,
@@ -587,6 +626,7 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A25L40P",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= AMIC_ID,
 		.model_id	= AMIC_A25L40P,
 		.total_size	= 512,
@@ -601,6 +641,7 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A29002B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= AMIC_ID_NOPREFIX,
 		.model_id	= AMIC_A29002B,
 		.total_size	= 256,
@@ -615,6 +656,7 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A29002T",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= AMIC_ID_NOPREFIX,
 		.model_id	= AMIC_A29002T,
 		.total_size	= 256,
@@ -629,6 +671,7 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A29040B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= AMIC_ID_NOPREFIX,
 		.model_id	= AMIC_A29040B,
 		.total_size	= 512,
@@ -643,6 +686,7 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A49LF040A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= AMIC_ID_NOPREFIX,
 		.model_id	= AMIC_A49LF040A,
 		.total_size	= 512,
@@ -657,6 +701,7 @@
 	{
 		.vendor		= "EMST",
 		.name		= "F49B002UA",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= EMST_ID,
 		.model_id	= EMST_F49B002UA,
 		.total_size	= 256,
@@ -671,6 +716,7 @@
 	{
 		.vendor		= "EON",
 		.name		= "EN29F002(A)(N)B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= EON_ID,
 		.model_id	= EN_29F002B,
 		.total_size	= 256,
@@ -685,6 +731,7 @@
 	{
 		.vendor		= "EON",
 		.name		= "EN29F002(A)(N)T",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= EON_ID,
 		.model_id	= EN_29F002T,
 		.total_size	= 256,
@@ -699,6 +746,7 @@
 	{
 		.vendor		= "Fujitsu",
 		.name		= "MBM29F004BC",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= FUJITSU_ID,
 		.model_id	= MBM29F004BC,
 		.total_size	= 512,
@@ -713,6 +761,7 @@
 	{
 		.vendor		= "Fujitsu",
 		.name		= "MBM29F004TC",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= FUJITSU_ID,
 		.model_id	= MBM29F004TC,
 		.total_size	= 512,
@@ -727,6 +776,7 @@
 	{
 		.vendor		= "Fujitsu",
 		.name		= "MBM29F400BC",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= FUJITSU_ID,
 		.model_id	= MBM29F400BC,
 		.total_size	= 512,
@@ -741,6 +791,7 @@
 	{
 		.vendor		= "Fujitsu",
 		.name		= "MBM29F400TC",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= FUJITSU_ID,
 		.model_id	= MBM29F400TC,
 		.total_size	= 512,
@@ -755,6 +806,7 @@
 	{
 		.vendor		= "Intel",
 		.name		= "28F001BX-B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= INTEL_ID,
 		.model_id	= P28F001BXB,
 		.total_size	= 128,
@@ -769,6 +821,7 @@
 	{
 		.vendor		= "Intel",
 		.name		= "28F001BX-T",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= INTEL_ID,
 		.model_id	= P28F001BXT,
 		.total_size	= 128,
@@ -783,6 +836,7 @@
 	{
 		.vendor		= "Intel",
 		.name		= "82802AB",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= INTEL_ID,
 		.model_id	= 173,
 		.total_size	= 512,
@@ -797,6 +851,7 @@
 	{
 		.vendor		= "Intel",
 		.name		= "82802AC",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= INTEL_ID,
 		.model_id	= 172,
 		.total_size	= 1024,
@@ -811,6 +866,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L512",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L512,
 		.total_size	= 64,
@@ -825,6 +881,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L1005",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L1005,
 		.total_size	= 128,
@@ -839,6 +896,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L2005",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L2005,
 		.total_size	= 256,
@@ -853,6 +911,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L4005",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L4005,
 		.total_size	= 512,
@@ -867,6 +926,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L8005",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L8005,
 		.total_size	= 1024,
@@ -881,6 +941,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L1605",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L1605,
 		.total_size	= 2048,
@@ -895,6 +956,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L1635D",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L1635D,
 		.total_size	= 2048,
@@ -909,6 +971,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L3205",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L3205,
 		.total_size	= 4096,
@@ -923,6 +986,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L3235D",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L3235D,
 		.total_size	= 4096,
@@ -937,6 +1001,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L6405",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L6405,
 		.total_size	= 8192,
@@ -951,6 +1016,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L12805",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L12805,
 		.total_size	= 16384,
@@ -965,6 +1031,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX29F002B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_29F002B,
 		.total_size	= 256,
@@ -979,6 +1046,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX29F002T",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_29F002T,
 		.total_size	= 256,
@@ -993,6 +1061,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX29LV040C",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_29LV040C,
 		.total_size	= 512,
@@ -1007,6 +1076,7 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE10",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8011,
 		.total_size	= 128,
@@ -1021,6 +1091,7 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE20",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8012,
 		.total_size	= 256,
@@ -1035,6 +1106,7 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE40",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8013,
 		.total_size	= 256,
@@ -1049,6 +1121,7 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE80",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8014,
 		.total_size	= 1024,
@@ -1063,6 +1136,7 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE16",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8015,
 		.total_size	= 2048,
@@ -1077,6 +1151,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV010",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV010,
 		.total_size	= 128,
@@ -1091,6 +1166,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV016B",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV016B,
 		.total_size	= 2048,
@@ -1105,6 +1181,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV020",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV020,
 		.total_size	= 256,
@@ -1119,6 +1196,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV040",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV040,
 		.total_size	= 512,
@@ -1133,6 +1211,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV080B",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV080B,
 		.total_size	= 1024,
@@ -1147,6 +1226,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV512",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV512,
 		.total_size	= 64,
@@ -1161,6 +1241,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm39LV010",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= PMC_ID_NOPREFIX,
 		.model_id	= PMC_39F010,
 		.total_size	= 128,
@@ -1175,6 +1256,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm49FL002",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= PMC_ID_NOPREFIX,
 		.model_id	= PMC_49FL002,
 		.total_size	= 256,
@@ -1189,6 +1271,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm49FL004",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= PMC_ID_NOPREFIX,
 		.model_id	= PMC_49FL004,
 		.total_size	= 512,
@@ -1203,6 +1286,7 @@
 	{
 		.vendor		= "Sharp",
 		.name		= "LHF00L04",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SHARP_ID,
 		.model_id	= SHARP_LHF00L04,
 		.total_size	= 1024,
@@ -1217,6 +1301,7 @@
 	{
 		.vendor		= "Spansion",
 		.name		= "S25FL016A",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= SPANSION_ID,
 		.model_id	= SPANSION_S25FL016A,
 		.total_size	= 2048,
@@ -1231,6 +1316,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF016B",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_25VF016B,
 		.total_size	= 2048,
@@ -1245,6 +1331,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF032B",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_25VF032B,
 		.total_size	= 4096,
@@ -1259,6 +1346,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF040B",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_25VF040B,
 		.total_size	= 512,
@@ -1273,6 +1361,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF040.REMS",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= 0xbf,
 		.model_id	= 0x44,
 		.total_size	= 512,
@@ -1287,6 +1376,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF040B.REMS",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= 0xbf,
 		.model_id	= 0x8d,
 		.total_size	= 512,
@@ -1301,6 +1391,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF080B",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_25VF080B,
 		.total_size	= 1024,
@@ -1315,6 +1406,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST28SF040A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_28SF040,
 		.total_size	= 512,
@@ -1329,6 +1421,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST29EE010",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_29EE010,
 		.total_size	= 128,
@@ -1343,6 +1436,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST29LE010",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_29LE010,
 		.total_size	= 128,
@@ -1357,6 +1451,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST29EE020A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_29EE020A,
 		.total_size	= 256,
@@ -1371,6 +1466,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST29LE020",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_29LE020,
 		.total_size	= 256,
@@ -1385,6 +1481,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39SF010A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39SF010,
 		.total_size	= 128,
@@ -1399,6 +1496,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39SF020A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39SF020,
 		.total_size	= 256,
@@ -1413,6 +1511,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39SF040",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39SF040,
 		.total_size	= 512,
@@ -1427,6 +1526,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF512",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39VF512,
 		.total_size	= 64,
@@ -1441,6 +1541,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF010",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39VF010,
 		.total_size	= 128,
@@ -1455,6 +1556,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF020",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39VF020,
 		.total_size	= 256,
@@ -1469,6 +1571,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF040",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39VF040,
 		.total_size	= 512,
@@ -1483,6 +1586,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF080",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= 0xbf,
 		.model_id	= 0xd8,
 		.total_size	= 1024,
@@ -1497,6 +1601,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF002A/B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF002A,
 		.total_size	= 256,
@@ -1511,6 +1616,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF003A/B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF003A,
 		.total_size	= 384,
@@ -1525,6 +1631,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF004A/B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF004A,
 		.total_size	= 512,
@@ -1539,6 +1646,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF004C",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF004C,
 		.total_size	= 512,
@@ -1553,6 +1661,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF008A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF008A,
 		.total_size	= 1024,
@@ -1567,6 +1676,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF008C",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF008C,
 		.total_size	= 1024,
@@ -1581,6 +1691,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF016C",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF016C,
 		.total_size	= 2048,
@@ -1595,6 +1706,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF020",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF020,
 		.total_size	= 256,
@@ -1609,6 +1721,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF020A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF020A,
 		.total_size	= 256,
@@ -1623,6 +1736,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF040",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF040,
 		.total_size	= 512,
@@ -1637,6 +1751,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF040B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF040B,
 		.total_size	= 512,
@@ -1651,6 +1766,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF080A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF080A,
 		.total_size	= 1024,
@@ -1665,6 +1781,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF160C",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF160C,
 		.total_size	= 2048,
@@ -1679,6 +1796,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P05-A",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P05A,
 		.total_size	= 64,
@@ -1693,6 +1811,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P10-A",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P10A,
 		.total_size	= 128,
@@ -1707,6 +1826,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P20",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P20,
 		.total_size	= 256,
@@ -1721,6 +1841,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P40",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P40,
 		.total_size	= 512,
@@ -1735,6 +1856,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P40-old",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P40_RES,
 		.total_size	= 512,
@@ -1749,6 +1871,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P80",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P80,
 		.total_size	= 1024,
@@ -1763,6 +1886,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P16",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P16,
 		.total_size	= 2048,
@@ -1777,6 +1901,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P32",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P32,
 		.total_size	= 4096,
@@ -1791,6 +1916,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P64",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P64,
 		.total_size	= 8192,
@@ -1805,6 +1931,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P128",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P128,
 		.total_size	= 16384,
@@ -1819,6 +1946,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29F002B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29F002B,
 		.total_size	= 256,
@@ -1833,6 +1961,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29F002T/NT",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29F002T,
 		.total_size	= 256,
@@ -1847,6 +1976,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29F040B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29F040B,
 		.total_size	= 512,
@@ -1861,6 +1991,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29F400BT",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29F400BT,
 		.total_size	= 512,
@@ -1875,6 +2006,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29W010B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29W010B,
 		.total_size	= 128,
@@ -1889,6 +2021,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29W040B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29W040B,
 		.total_size	= 512,
@@ -1903,6 +2036,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FLW040A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FLW040A,
 		.total_size	= 512,
@@ -1917,6 +2051,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FLW040B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FLW040B,
 		.total_size	= 512,
@@ -1931,6 +2066,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FLW080A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FLW080A,
 		.total_size	= 1024,
@@ -1945,6 +2081,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FLW080B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FLW080B,
 		.total_size	= 1024,
@@ -1959,6 +2096,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FW002",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FW002,
 		.total_size	= 256,
@@ -1973,6 +2111,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FW016",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FW016,
 		.total_size	= 2048,
@@ -1987,6 +2126,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FW040",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FW040,
 		.total_size	= 512,
@@ -2001,6 +2141,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FW080",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FW080,
 		.total_size	= 1024,
@@ -2015,6 +2156,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50LPW116",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50LPW116,
 		.total_size	= 2048,
@@ -2029,6 +2171,7 @@
 	{
 		.vendor		= "SyncMOS",
 		.name		= "S29C31004T",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SYNCMOS_ID,
 		.model_id	= S29C31004T,
 		.total_size	= 512,
@@ -2043,6 +2186,7 @@
 	{
 		.vendor		= "SyncMOS",
 		.name		= "S29C51001T",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SYNCMOS_ID,
 		.model_id	= S29C51001T,
 		.total_size	= 128,
@@ -2057,6 +2201,7 @@
 	{
 		.vendor		= "SyncMOS",
 		.name		= "S29C51002T",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SYNCMOS_ID,
 		.model_id	= S29C51002T,
 		.total_size	= 256,
@@ -2071,6 +2216,7 @@
 	{
 		.vendor		= "SyncMOS",
 		.name		= "S29C51004T",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= SYNCMOS_ID,
 		.model_id	= S29C51004T,
 		.total_size	= 512,
@@ -2085,6 +2231,7 @@
 	{
 		.vendor		= "TI",
 		.name		= "TMS29F002RB",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= TI_OLD_ID,
 		.model_id	= TI_TMS29F002RB,
 		.total_size	= 256,
@@ -2099,6 +2246,7 @@
 	{
 		.vendor		= "TI",
 		.name		= "TMS29F002RT",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= TI_OLD_ID,
 		.model_id	= TI_TMS29F002RT,
 		.total_size	= 256,
@@ -2113,6 +2261,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W25x10",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= WINBOND_NEX_ID,
 		.model_id	= W_25X10,
 		.total_size	= 128,
@@ -2127,6 +2276,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W25x20",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= WINBOND_NEX_ID,
 		.model_id	= W_25X20,
 		.total_size	= 256,
@@ -2141,6 +2291,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W25x40",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= WINBOND_NEX_ID,
 		.model_id	= W_25X40,
 		.total_size	= 512,
@@ -2155,6 +2306,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W25x80",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= WINBOND_NEX_ID,
 		.model_id	= W_25X80,
 		.total_size	= 1024,
@@ -2169,6 +2321,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W29C011",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_29C011,
 		.total_size	= 128,
@@ -2183,6 +2336,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W29C020C",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_29C020C,
 		.total_size	= 256,
@@ -2197,6 +2351,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W29C040P",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_29C040P,
 		.total_size	= 512,
@@ -2211,6 +2366,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W29EE011",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_29C011,
 		.total_size	= 128,
@@ -2225,6 +2381,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V040A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V040A,
 		.total_size	= 512,
@@ -2239,6 +2396,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V040B",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V040B,
 		.total_size	= 512,
@@ -2253,6 +2411,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V040C",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= 0x50,
 		.total_size	= 512,
@@ -2267,6 +2426,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V040FA",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V040FA,
 		.total_size	= 512,
@@ -2281,6 +2441,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V080A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V080A,
 		.total_size	= 1024,
@@ -2295,6 +2456,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W49F002U",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_49F002U,
 		.total_size	= 256,
@@ -2309,6 +2471,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W49V002A",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_49V002A,
 		.total_size	= 256,
@@ -2323,6 +2486,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W49V002FA",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_49V002FA,
 		.total_size	= 256,
@@ -2337,6 +2501,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V080FA",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V080FA,
 		.total_size	= 1024,
@@ -2351,6 +2516,7 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V080FA (dual mode)",
+		.bustype	= CHIP_BUSTYPE_NONSPI,
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V080FA_DM,
 		.total_size	= 512,
@@ -2365,6 +2531,7 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "unknown Atmel SPI chip",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= GENERIC_DEVICE_ID,
 		.total_size	= 0,
@@ -2379,6 +2546,7 @@
 	{
 		.vendor		= "EON",
 		.name		= "unknown EON SPI chip",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= EON_ID_NOPREFIX,
 		.model_id	= GENERIC_DEVICE_ID,
 		.total_size	= 0,
@@ -2393,6 +2561,7 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "unknown Macronix SPI chip",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= MX_ID,
 		.model_id	= GENERIC_DEVICE_ID,
 		.total_size	= 0,
@@ -2407,6 +2576,7 @@
 	{
 		.vendor		= "PMC",
 		.name		= "unknown PMC SPI chip",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= PMC_ID,
 		.model_id	= GENERIC_DEVICE_ID,
 		.total_size	= 0,
@@ -2421,6 +2591,7 @@
 	{
 		.vendor		= "SST",
 		.name		= "unknown SST SPI chip",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= SST_ID,
 		.model_id	= GENERIC_DEVICE_ID,
 		.total_size	= 0,
@@ -2435,6 +2606,7 @@
 	{
 		.vendor		= "ST",
 		.name		= "unknown ST SPI chip",
+		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= ST_ID,
 		.model_id	= GENERIC_DEVICE_ID,
 		.total_size	= 0,
diff --git a/ichspi.c b/ichspi.c
index 2d944dd..8f8d6e6 100644
--- a/ichspi.c
+++ b/ichspi.c
@@ -223,15 +223,15 @@
 		return -1;
 	}
 
-	switch (flashbus) {
-	case BUS_TYPE_ICH7_SPI:
-	case BUS_TYPE_VIA_SPI:
+	switch (spi_controller) {
+	case SPI_CONTROLLER_ICH7:
+	case SPI_CONTROLLER_VIA:
 		preop = REGREAD16(ICH7_REG_PREOP);
 		optype = REGREAD16(ICH7_REG_OPTYPE);
 		opmenu[0] = REGREAD32(ICH7_REG_OPMENU);
 		opmenu[1] = REGREAD32(ICH7_REG_OPMENU + 4);
 		break;
-	case BUS_TYPE_ICH9_SPI:
+	case SPI_CONTROLLER_ICH9:
 		preop = REGREAD16(ICH9_REG_PREOP);
 		optype = REGREAD16(ICH9_REG_OPTYPE);
 		opmenu[0] = REGREAD32(ICH9_REG_OPMENU);
@@ -305,15 +305,15 @@
 	}
 
 	printf_debug("\n%s: preop=%04x optype=%04x opmenu=%08x%08x\n", __func__, preop, optype, opmenu[0], opmenu[1]);
-	switch (flashbus) {
-	case BUS_TYPE_ICH7_SPI:
-	case BUS_TYPE_VIA_SPI:
+	switch (spi_controller) {
+	case SPI_CONTROLLER_ICH7:
+	case SPI_CONTROLLER_VIA:
 		REGWRITE16(ICH7_REG_PREOP, preop);
 		REGWRITE16(ICH7_REG_OPTYPE, optype);
 		REGWRITE32(ICH7_REG_OPMENU, opmenu[0]);
 		REGWRITE32(ICH7_REG_OPMENU + 4, opmenu[1]);
 		break;
-	case BUS_TYPE_ICH9_SPI:
+	case SPI_CONTROLLER_ICH9:
 		REGWRITE16(ICH9_REG_PREOP, preop);
 		REGWRITE16(ICH9_REG_OPTYPE, optype);
 		REGWRITE32(ICH9_REG_OPMENU, opmenu[0]);
@@ -599,12 +599,12 @@
 static int run_opcode(OPCODE op, uint32_t offset,
 		      uint8_t datalength, uint8_t * data)
 {
-	switch (flashbus) {
-	case BUS_TYPE_VIA_SPI:
+	switch (spi_controller) {
+	case SPI_CONTROLLER_VIA:
 		return ich7_run_opcode(op, offset, datalength, data, 16);
-	case BUS_TYPE_ICH7_SPI:
+	case SPI_CONTROLLER_ICH7:
 		return ich7_run_opcode(op, offset, datalength, data, 64);
-	case BUS_TYPE_ICH9_SPI:
+	case SPI_CONTROLLER_ICH9:
 		return ich9_run_opcode(op, offset, datalength, data);
 	default:
 		printf_debug("%s: unsupported chipset\n", __FUNCTION__);
@@ -688,7 +688,7 @@
 	int page_size = flash->page_size;
 	int maxdata = 64;
 
-	if (flashbus == BUS_TYPE_VIA_SPI) {
+	if (spi_controller == SPI_CONTROLLER_VIA) {
 		maxdata = 16;
 	}
 
@@ -723,7 +723,7 @@
 			break;
 		}
 
-		if (flashbus == BUS_TYPE_VIA_SPI)
+		if (spi_controller == SPI_CONTROLLER_VIA)
 			maxdata = 16;
 
 		for (j = 0; j < erase_size / page_size; j++) {
diff --git a/it87spi.c b/it87spi.c
index da82937..2a7be85 100644
--- a/it87spi.c
+++ b/it87spi.c
@@ -101,7 +101,7 @@
 		it8716f_flashport = find_ite_spi_flash_port(ITE_SUPERIO_PORT2);
 
 	if (it8716f_flashport)
-		flashbus = BUS_TYPE_IT87XX_SPI;
+		spi_controller = SPI_CONTROLLER_IT87XX;
 
 	return (!it8716f_flashport);
 }
diff --git a/sb600spi.c b/sb600spi.c
index 03e1ab8..609ad15 100644
--- a/sb600spi.c
+++ b/sb600spi.c
@@ -25,7 +25,7 @@
 #include "flash.h"
 #include "spi.h"
 
-typedef struct _spi_controller {
+struct sb600_spi_controller {
 	unsigned int spi_cntrl0;	/* 00h */
 	unsigned int restrictedcmd1;	/* 04h */
 	unsigned int restrictedcmd2;	/* 08h */
@@ -34,9 +34,9 @@
 	unsigned int spi_cmdvalue1;	/* 14h */
 	unsigned int spi_cmdvalue2;	/* 18h */
 	unsigned int spi_fakeid;	/* 1Ch */
-} sb600_spi_controller;
+};
 
-sb600_spi_controller *spi_bar = NULL;
+struct sb600_spi_controller *spi_bar = NULL;
 uint8_t *sb600_spibar;
 
 int sb600_spi_read(struct flashchip *flash, uint8_t *buf)
@@ -114,7 +114,7 @@
 
 	writecnt--;
 
-	spi_bar = (sb600_spi_controller *) sb600_spibar;
+	spi_bar = (struct sb600_spi_controller *) sb600_spibar;
 
 	printf_debug("%s, cmd=%x, writecnt=%x, readcnt=%x\n",
 		     __func__, cmd, writecnt, readcnt);
diff --git a/spi.c b/spi.c
index dcd9f19..5d19c41 100644
--- a/spi.c
+++ b/spi.c
@@ -26,24 +26,27 @@
 #include "flash.h"
 #include "spi.h"
 
+enum spi_controller spi_controller = SPI_CONTROLLER_NONE;
+void *spibar = NULL;
+
 void spi_prettyprint_status_register(struct flashchip *flash);
 
 int spi_command(unsigned int writecnt, unsigned int readcnt,
 		const unsigned char *writearr, unsigned char *readarr)
 {
-	switch (flashbus) {
-	case BUS_TYPE_IT87XX_SPI:
+	switch (spi_controller) {
+	case SPI_CONTROLLER_IT87XX:
 		return it8716f_spi_command(writecnt, readcnt, writearr,
 					   readarr);
-	case BUS_TYPE_ICH7_SPI:
-	case BUS_TYPE_ICH9_SPI:
-	case BUS_TYPE_VIA_SPI:
+	case SPI_CONTROLLER_ICH7:
+	case SPI_CONTROLLER_ICH9:
+	case SPI_CONTROLLER_VIA:
 		return ich_spi_command(writecnt, readcnt, writearr, readarr);
-	case BUS_TYPE_SB600_SPI:
+	case SPI_CONTROLLER_SB600:
 		return sb600_spi_command(writecnt, readcnt, writearr, readarr);
-	case BUS_TYPE_WBSIO_SPI:
+	case SPI_CONTROLLER_WBSIO:
 		return wbsio_spi_command(writecnt, readcnt, writearr, readarr);
-	case BUS_TYPE_DUMMY_SPI:
+	case SPI_CONTROLLER_DUMMY:
 		return dummy_spi_command(writecnt, readcnt, writearr, readarr);
 	default:
 		printf_debug
@@ -122,10 +125,10 @@
 	if (result)
 		printf_debug("%s failed", __func__);
 	if (result == SPI_INVALID_OPCODE) {
-		switch (flashbus) {
-		case BUS_TYPE_ICH7_SPI:
-		case BUS_TYPE_ICH9_SPI:
-		case BUS_TYPE_VIA_SPI:
+		switch (spi_controller) {
+		case SPI_CONTROLLER_ICH7:
+		case SPI_CONTROLLER_ICH9:
+		case SPI_CONTROLLER_VIA:
 			printf_debug(" due to SPI master limitation, ignoring"
 				     " and hoping it will be run as PREOP\n");
 			return 0;
@@ -202,13 +205,13 @@
 int probe_spi_rdid4(struct flashchip *flash)
 {
 	/* only some SPI chipsets support 4 bytes commands */
-	switch (flashbus) {
-	case BUS_TYPE_ICH7_SPI:
-	case BUS_TYPE_ICH9_SPI:
-	case BUS_TYPE_VIA_SPI:
-	case BUS_TYPE_SB600_SPI:
-	case BUS_TYPE_WBSIO_SPI:
-	case BUS_TYPE_DUMMY_SPI:
+	switch (spi_controller) {
+	case SPI_CONTROLLER_ICH7:
+	case SPI_CONTROLLER_ICH9:
+	case SPI_CONTROLLER_VIA:
+	case SPI_CONTROLLER_SB600:
+	case SPI_CONTROLLER_WBSIO:
+	case SPI_CONTROLLER_DUMMY:
 		return probe_spi_rdid_generic(flash, 4);
 	default:
 		printf_debug("4b ID not supported on this SPI controller\n");
@@ -281,7 +284,7 @@
 	int ret;
 
 	/* Read Status Register */
-	if (flashbus == BUS_TYPE_SB600_SPI) {
+	if (spi_controller == SPI_CONTROLLER_SB600) {
 		/* SB600 uses a different way to read status register. */
 		return sb600_read_status_register();
 	} else {
@@ -569,10 +572,10 @@
 	if (result)
 		printf_debug("%s failed", __func__);
 	if (result == SPI_INVALID_OPCODE) {
-		switch (flashbus) {
-		case BUS_TYPE_ICH7_SPI:
-		case BUS_TYPE_ICH9_SPI:
-		case BUS_TYPE_VIA_SPI:
+		switch (spi_controller) {
+		case SPI_CONTROLLER_ICH7:
+		case SPI_CONTROLLER_ICH9:
+		case SPI_CONTROLLER_VIA:
 			printf_debug(" due to SPI master limitation, ignoring"
 				     " and hoping it will be run as PREOP\n");
 			return 0;
@@ -651,16 +654,16 @@
 
 int spi_chip_read(struct flashchip *flash, uint8_t *buf)
 {
-	switch (flashbus) {
-	case BUS_TYPE_IT87XX_SPI:
+	switch (spi_controller) {
+	case SPI_CONTROLLER_IT87XX:
 		return it8716f_spi_chip_read(flash, buf);
-	case BUS_TYPE_SB600_SPI:
+	case SPI_CONTROLLER_SB600:
 		return sb600_spi_read(flash, buf);
-	case BUS_TYPE_ICH7_SPI:
-	case BUS_TYPE_ICH9_SPI:
-	case BUS_TYPE_VIA_SPI:
+	case SPI_CONTROLLER_ICH7:
+	case SPI_CONTROLLER_ICH9:
+	case SPI_CONTROLLER_VIA:
 		return ich_spi_read(flash, buf);
-	case BUS_TYPE_WBSIO_SPI:
+	case SPI_CONTROLLER_WBSIO:
 		return wbsio_spi_read(flash, buf);
 	default:
 		printf_debug
@@ -699,16 +702,16 @@
  */
 int spi_chip_write_256(struct flashchip *flash, uint8_t *buf)
 {
-	switch (flashbus) {
-	case BUS_TYPE_IT87XX_SPI:
+	switch (spi_controller) {
+	case SPI_CONTROLLER_IT87XX:
 		return it8716f_spi_chip_write_256(flash, buf);
-	case BUS_TYPE_SB600_SPI:
+	case SPI_CONTROLLER_SB600:
 		return sb600_spi_write_1(flash, buf);
-	case BUS_TYPE_ICH7_SPI:
-	case BUS_TYPE_ICH9_SPI:
-	case BUS_TYPE_VIA_SPI:
+	case SPI_CONTROLLER_ICH7:
+	case SPI_CONTROLLER_ICH9:
+	case SPI_CONTROLLER_VIA:
 		return ich_spi_write_256(flash, buf);
-	case BUS_TYPE_WBSIO_SPI:
+	case SPI_CONTROLLER_WBSIO:
 		return wbsio_spi_write_1(flash, buf);
 	default:
 		printf_debug
@@ -731,8 +734,8 @@
 	unsigned char w[6] = {0xad, 0, 0, 0, buf[0], buf[1]};
 	int result;
 
-	switch (flashbus) {
-	case BUS_TYPE_WBSIO_SPI:
+	switch (spi_controller) {
+	case SPI_CONTROLLER_WBSIO:
 		fprintf(stderr, "%s: impossible with Winbond SPI masters,"
 				" degrading to byte program\n", __func__);
 		return spi_chip_write_1(flash, buf);
diff --git a/wbsio_spi.c b/wbsio_spi.c
index 3c8c7a6..2df5bdd 100644
--- a/wbsio_spi.c
+++ b/wbsio_spi.c
@@ -63,7 +63,7 @@
 			return 1;
 
 	printf_debug("\nwbsio_spibase = 0x%x\n", wbsio_spibase);
-	flashbus = BUS_TYPE_WBSIO_SPI;
+	spi_controller = SPI_CONTROLLER_WBSIO;
 	return 0;
 }