Index: include/urjtag/bus_driver.h
===================================================================
--- include/urjtag/bus_driver.h	(revision 1965)
+++ include/urjtag/bus_driver.h	(working copy)
@@ -84,6 +84,14 @@
 }
 urj_bus_param_key_t;
 
+typedef enum URJ_BUS_TYPE
+{
+    URJ_BUS_TYPE_PARALLEL,
+    URJ_BUS_TYPE_SPI,
+    URJ_BUS_TYPE_I2C,
+} 
+urj_bus_type_t;
+
 struct URJ_BUS_DRIVER
 {
     const char *name;
@@ -105,8 +113,12 @@
     /* @@@@ RFHH need to return status */
     uint32_t (*read) (urj_bus_t *bus, uint32_t adr);
     /* @@@@ RFHH need to return status */
+    int (*write_start) (urj_bus_t *bus, uint32_t adr);
     void (*write) (urj_bus_t *bus, uint32_t adr, uint32_t data);
     int (*init) (urj_bus_t *bus);
+    int (*enable) (urj_bus_t *bus);
+    int (*disable) (urj_bus_t *bus);
+    urj_bus_type_t bus_type;
 };
 
 struct URJ_BUS
@@ -115,6 +127,7 @@
     urj_part_t *part;
     void *params;
     int initialized;
+    int enabled;
     const urj_bus_driver_t *driver;
 };
 
@@ -126,9 +139,13 @@
 #define URJ_BUS_READ_NEXT(bus,adr)      (bus)->driver->read_next(bus,adr)
 #define URJ_BUS_READ_END(bus)           (bus)->driver->read_end(bus)
 #define URJ_BUS_READ(bus,adr)           (bus)->driver->read(bus,adr)
+#define URJ_BUS_WRITE_START(bus,adr)    (bus)->driver->write_start(bus,adr)
 #define URJ_BUS_WRITE(bus,adr,data)     (bus)->driver->write(bus,adr,data)
 #define URJ_BUS_FREE(bus)               (bus)->driver->free_bus(bus)
 #define URJ_BUS_INIT(bus)               (bus)->driver->init(bus)
+#define URJ_BUS_ENABLE(bus)             (bus)->driver->enable(bus)
+#define URJ_BUS_DISABLE(bus)            (bus)->driver->disable(bus)
+#define URJ_BUS_TYPE(bus)               (bus)->driver->bus_type
 
 /**
  * API function to init a bus
Index: src/bus/fjmem.c
===================================================================
--- src/bus/fjmem.c	(revision 1965)
+++ src/bus/fjmem.c	(working copy)
@@ -741,8 +741,12 @@
     fjmem_bus_read_next,
     fjmem_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     fjmem_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
 
 
Index: src/bus/ppc405ep.c
===================================================================
--- src/bus/ppc405ep.c	(revision 1965)
+++ src/bus/ppc405ep.c	(working copy)
@@ -274,6 +274,10 @@
     ppc405ep_bus_read_next,
     ppc405ep_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     ppc405ep_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/sh7727.c
===================================================================
--- src/bus/sh7727.c	(revision 1965)
+++ src/bus/sh7727.c	(working copy)
@@ -354,6 +354,10 @@
     sh7727_bus_read_next,
     sh7727_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     sh7727_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/bscoach.c
===================================================================
--- src/bus/bscoach.c	(revision 1965)
+++ src/bus/bscoach.c	(working copy)
@@ -385,6 +385,10 @@
     flashbscoach_bus_read_next,
     flashbscoach_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     flashbscoach_bus_write,
-    flashbscoach_bus_init
+    flashbscoach_bus_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    urj_bus_type_parallel,
 };
Index: src/bus/prototype.c
===================================================================
--- src/bus/prototype.c	(revision 1965)
+++ src/bus/prototype.c	(working copy)
@@ -526,6 +526,10 @@
     prototype_bus_read_next,
     prototype_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     prototype_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/sa1110.c
===================================================================
--- src/bus/sa1110.c	(revision 1965)
+++ src/bus/sa1110.c	(working copy)
@@ -314,6 +314,10 @@
     sa1110_bus_read_next,
     sa1110_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     sa1110_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/mpc837x.c
===================================================================
--- src/bus/mpc837x.c	(revision 1965)
+++ src/bus/mpc837x.c	(working copy)
@@ -500,6 +500,10 @@
     mpc837x_bus_read_next,
     mpc837x_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     mpc837x_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/ppc440gx_ebc8.c
===================================================================
--- src/bus/ppc440gx_ebc8.c	(revision 1965)
+++ src/bus/ppc440gx_ebc8.c	(working copy)
@@ -278,6 +278,10 @@
     ppc440gx_ebc8_bus_read_next,
     ppc440gx_ebc8_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     ppc440gx_ebc8_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/ejtag_dma.c
===================================================================
--- src/bus/ejtag_dma.c	(revision 1965)
+++ src/bus/ejtag_dma.c	(working copy)
@@ -694,6 +694,10 @@
     ejtag_dma_bus_read_next,
     ejtag_dma_bus_read_end,
     ejtag_dma_bus_read,
+    urj_bus_generic_write_start,
     ejtag_dma_bus_write,
-    ejtag_dma_bus_init
+    ejtag_dma_bus_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/sh7750r.c
===================================================================
--- src/bus/sh7750r.c	(revision 1965)
+++ src/bus/sh7750r.c	(working copy)
@@ -335,6 +335,10 @@
     sh7750r_bus_read_next,
     sh7750r_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     sh7750r_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/tx4925.c
===================================================================
--- src/bus/tx4925.c	(revision 1965)
+++ src/bus/tx4925.c	(working copy)
@@ -318,6 +318,10 @@
     tx4925_bus_read_next,
     tx4925_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     tx4925_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/pxa2x0.c
===================================================================
--- src/bus/pxa2x0.c	(revision 1965)
+++ src/bus/pxa2x0.c	(working copy)
@@ -768,8 +768,12 @@
     pxa2xx_bus_read_next,
     pxa2xx_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     pxa2xx_bus_write,
-    pxa2xx_bus_init
+    pxa2xx_bus_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
 
 const urj_bus_driver_t urj_bus_pxa27x_bus = {
@@ -784,6 +788,10 @@
     pxa2xx_bus_read_next,
     pxa2xx_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     pxa2xx_bus_write,
-    pxa2xx_bus_init
+    pxa2xx_bus_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/arm9tdmi.c
===================================================================
--- src/bus/arm9tdmi.c	(revision 1965)
+++ src/bus/arm9tdmi.c	(working copy)
@@ -562,7 +562,10 @@
     arm9tdmi_bus_read_next,
     arm9tdmi_bus_read_end,
     arm9tdmi_bus_read,
+    urj_bus_generic_write_start,
     arm9tdmi_bus_write,
-    arm9tdmi_bus_init
+    arm9tdmi_bus_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
-
Index: src/bus/ixp425.c
===================================================================
--- src/bus/ixp425.c	(revision 1965)
+++ src/bus/ixp425.c	(working copy)
@@ -297,6 +297,10 @@
     ixp425_bus_read_next,
     ixp425_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     ixp425_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/avr32.c
===================================================================
--- src/bus/avr32.c	(revision 1965)
+++ src/bus/avr32.c	(working copy)
@@ -820,6 +820,10 @@
     avr32_bus_read_next,
     avr32_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     avr32_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/ixp465.c
===================================================================
--- src/bus/ixp465.c	(revision 1965)
+++ src/bus/ixp465.c	(working copy)
@@ -309,6 +309,10 @@
     ixp465_bus_read_next,
     ixp465_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     ixp465_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/zefant-xs3.c
===================================================================
--- src/bus/zefant-xs3.c	(revision 1965)
+++ src/bus/zefant-xs3.c	(working copy)
@@ -995,8 +995,12 @@
     zefant_xs3_bus_read_next,
     zefant_xs3_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     zefant_xs3_bus_write,
-    zefant_xs3_bus_init
+    zefant_xs3_bus_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
 
 
Index: src/bus/h7202.c
===================================================================
--- src/bus/h7202.c	(revision 1965)
+++ src/bus/h7202.c	(working copy)
@@ -303,6 +303,10 @@
     h7202_bus_read_next,
     h7202_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     h7202_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/mpc824x.c
===================================================================
--- src/bus/mpc824x.c	(revision 1965)
+++ src/bus/mpc824x.c	(working copy)
@@ -590,6 +590,10 @@
     mpc824x_bus_read_next,
     mpc824x_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     mpc824x_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/bcm1250.c
===================================================================
--- src/bus/bcm1250.c	(revision 1965)
+++ src/bus/bcm1250.c	(working copy)
@@ -536,6 +536,10 @@
 #else
     bcm1250_bus_read,
 #endif
+    urj_bus_generic_write_start,
     bcm1250_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/sharc21065l.c
===================================================================
--- src/bus/sharc21065l.c	(revision 1965)
+++ src/bus/sharc21065l.c	(working copy)
@@ -323,6 +323,10 @@
     sharc_21065L_bus_read_next,
     sharc_21065L_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     sharc_21065L_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/sharc21369_ezkit.c
===================================================================
--- src/bus/sharc21369_ezkit.c	(revision 1965)
+++ src/bus/sharc21369_ezkit.c	(working copy)
@@ -309,6 +309,10 @@
     sharc_21369_bus_read_next,
     sharc_21369_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     sharc_21369_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/au1500.c
===================================================================
--- src/bus/au1500.c	(revision 1965)
+++ src/bus/au1500.c	(working copy)
@@ -308,6 +308,10 @@
     au1500_bus_read_next,
     au1500_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     au1500_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/blackfin.h
===================================================================
--- src/bus/blackfin.h	(revision 1965)
+++ src/bus/blackfin.h	(working copy)
@@ -80,8 +80,12 @@
     bfin_bus_read_next, \
     bfin_bus_read_end, \
     urj_bus_generic_read, \
+    urj_bus_generic_write_start, \
     /*funcs##_bus_write,*/ bfin_bus_write, \
-    urj_bus_generic_no_init \
+    urj_bus_generic_no_init, \
+    urj_bus_generic_no_enable, \
+    urj_bus_generic_no_disable, \
+    URJ_BUS_TYPE_PARALLEL, \
 }
 #define BFIN_BUS_DECLARE(board, desc) _BFIN_BUS_DECLARE(board, board, desc)
 
Index: src/bus/lh7a400.c
===================================================================
--- src/bus/lh7a400.c	(revision 1965)
+++ src/bus/lh7a400.c	(working copy)
@@ -334,6 +334,10 @@
     lh7a400_bus_read_next,
     lh7a400_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     lh7a400_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/sh7751r.c
===================================================================
--- src/bus/sh7751r.c	(revision 1965)
+++ src/bus/sh7751r.c	(working copy)
@@ -323,6 +323,10 @@
     sh7751r_bus_read_next,
     sh7751r_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     sh7751r_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/generic_bus.c
===================================================================
--- src/bus/generic_bus.c	(revision 1965)
+++ src/bus/generic_bus.c	(working copy)
@@ -101,6 +101,30 @@
 }
 
 /**
+ * bus->driver->(*enable)
+ *
+ */
+int
+urj_bus_generic_no_enable (urj_bus_t *bus)
+{
+    bus->enabled = 1;
+
+    return URJ_STATUS_OK;
+}
+
+/**
+ * bus->driver->(*disable)
+ *
+ */
+int
+urj_bus_generic_no_disable (urj_bus_t *bus)
+{
+    bus->enabled = 0;
+
+    return URJ_STATUS_OK;
+}
+
+/**
  * bus->driver->(*prepare)
  *
  */
@@ -115,6 +139,16 @@
 }
 
 /**
+ * bus->driver->(*write_start)
+ *
+ */
+int
+urj_bus_generic_write_start (urj_bus_t *bus, uint32_t adr)
+{
+    return 0;
+}
+
+/**
  * bus->driver->(*read)
  *
  */
Index: src/bus/mpc5200.c
===================================================================
--- src/bus/mpc5200.c	(revision 1965)
+++ src/bus/mpc5200.c	(working copy)
@@ -408,6 +408,10 @@
     mpc5200_bus_read_next,
     mpc5200_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     mpc5200_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/jopcyc.c
===================================================================
--- src/bus/jopcyc.c	(revision 1965)
+++ src/bus/jopcyc.c	(working copy)
@@ -701,8 +701,12 @@
     jopcyc_bus_read_next,
     jopcyc_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     jopcyc_bus_write,
-    jopcyc_bus_init
+    jopcyc_bus_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
 
 
Index: src/bus/slsup3.c
===================================================================
--- src/bus/slsup3.c	(revision 1965)
+++ src/bus/slsup3.c	(working copy)
@@ -447,6 +447,10 @@
     slsup3_bus_read_next,
     slsup3_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     slsup3_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/generic_bus.h
===================================================================
--- src/bus/generic_bus.h	(revision 1965)
+++ src/bus/generic_bus.h	(working copy)
@@ -37,7 +37,10 @@
                                 size_t param_size);
 void urj_bus_generic_free (urj_bus_t *bus);
 int urj_bus_generic_no_init (urj_bus_t *bus);
+int urj_bus_generic_no_enable (urj_bus_t *bus);
+int urj_bus_generic_no_disable (urj_bus_t *bus);
 void urj_bus_generic_prepare_extest (urj_bus_t *bus);
+int urj_bus_generic_write_start(urj_bus_t *bus, uint32_t adr);
 uint32_t urj_bus_generic_read (urj_bus_t *bus, uint32_t adr);
 
 #endif /* URJ_BUS_GENERIC_BUS_H */
Index: src/bus/ejtag.c
===================================================================
--- src/bus/ejtag.c	(revision 1965)
+++ src/bus/ejtag.c	(working copy)
@@ -773,6 +773,10 @@
     ejtag_bus_read_next,
     ejtag_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     ejtag_bus_write,
-    ejtag_bus_init
+    ejtag_bus_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/s3c4510x.c
===================================================================
--- src/bus/s3c4510x.c	(revision 1965)
+++ src/bus/s3c4510x.c	(working copy)
@@ -434,6 +434,10 @@
     s3c4510_bus_read_next,
     s3c4510_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     s3c4510_bus_write,
-    s3c4510_bus_init
+    s3c4510_bus_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/bus/ixp435.c
===================================================================
--- src/bus/ixp435.c	(revision 1965)
+++ src/bus/ixp435.c	(working copy)
@@ -285,6 +285,10 @@
     ixp435_bus_read_next,
     ixp435_bus_read_end,
     urj_bus_generic_read,
+    urj_bus_generic_write_start,
     ixp435_bus_write,
-    urj_bus_generic_no_init
+    urj_bus_generic_no_init,
+    urj_bus_generic_no_enable,
+    urj_bus_generic_no_disable,
+    URJ_BUS_TYPE_PARALLEL,
 };
Index: src/flash/cfi.c
===================================================================
--- src/flash/cfi.c	(revision 1965)
+++ src/flash/cfi.c	(working copy)
@@ -100,6 +100,8 @@
     if (URJ_BUS_AREA (bus, adr, &area) != URJ_STATUS_OK)
         // retain error state
         return URJ_STATUS_FAIL;
+    if (URJ_BUS_TYPE (bus) != urj_bus_type_parallel)
+        return URJ_STATUS_FAIL;
     bw = area.width;
     if (bw != 8 && bw != 16 && bw != 32)
     {
Index: src/flash/jedec.c
===================================================================
--- src/flash/jedec.c	(revision 1965)
+++ src/flash/jedec.c	(working copy)
@@ -447,6 +447,8 @@
     if (URJ_BUS_AREA (bus, adr, &area) != URJ_STATUS_OK)
         // retain error state
         return URJ_STATUS_FAIL;
+    if (URJ_BUS_TYPE (bus) != urj_bus_type_parallel)
+        return URJ_STATUS_FAIL;
     bw = area.width;
     if (bw != 8 && bw != 16 && bw != 32)
     {
Index: src/flash/amd_flash.c
===================================================================
--- src/flash/amd_flash.c	(revision 1965)
+++ src/flash/amd_flash.c	(working copy)
@@ -107,6 +107,8 @@
         // retain error state
         return URJ_STATUS_FAIL;
 
+    if (URJ_BUS_TYPE (bus) != urj_bus_type_parallel)
+        return URJ_STATUS_FAIL;
     URJ_BUS_WRITE (bus, adr + 0x0, 0xf0);
     URJ_BUS_WRITE (bus, adr + 0x555, 0xaa);
     URJ_BUS_WRITE (bus, adr + 0x2AA, 0x55);
Index: src/flash/jedec_exp.c
===================================================================
--- src/flash/jedec_exp.c	(revision 1965)
+++ src/flash/jedec_exp.c	(working copy)
@@ -88,6 +88,8 @@
     if (URJ_BUS_AREA (bus, adr, &area) != URJ_STATUS_OK)
         // retain error state
         return URJ_STATUS_FAIL;
+    if (URJ_BUS_TYPE (bus) != urj_bus_type_parallel)
+        return URJ_STATUS_FAIL;
     bw = area.width;
 
     if (bw == 0)
