libftdi: (tomj) new variable: bitbang_mode to support FT2232C's SPI bitbang mode
authorThomas Jarosch <opensource@intra2net.com>
Fri, 7 May 2004 10:57:15 +0000 (10:57 +0000)
committerThomas Jarosch <opensource@intra2net.com>
Fri, 7 May 2004 10:57:15 +0000 (10:57 +0000)
ftdi/ftdi.c
ftdi/ftdi.h

index 9ef20cd..18c4d1d 100644 (file)
@@ -39,8 +39,9 @@ int ftdi_init(struct ftdi_context *ftdi) {
     ftdi->index = 0;
     ftdi->in_ep = 0x02;
     ftdi->out_ep = 0x81;
+    ftdi->bitbang_mode = 1; /* 1: Normal bitbang mode, 2: SPI bitbang mode */
+    
     ftdi->error_str = NULL;
-    ftdi->reading = 0;
 
     // all fine. Now allocate the readbuffer
     return ftdi_read_data_set_chunksize(ftdi, 4096);
@@ -373,7 +374,9 @@ int ftdi_enable_bitbang(struct ftdi_context *ftdi, unsigned char bitmask) {
     unsigned short usb_val;
 
     usb_val = bitmask; // low byte: bitmask
-    usb_val |= (1 << 8); // high byte: enable flag
+    /* FT2232C: Set bitbang_mode to 2 to enable SPI */
+    usb_val |= (ftdi->bitbang_mode << 8);
+
     if (usb_control_msg(ftdi->usb_dev, 0x40, 0x0B, usb_val, ftdi->index, NULL, 0, ftdi->usb_write_timeout) != 0) {
         ftdi->error_str = "Unable to enter bitbang mode. Perhaps not a BM type chip?";
         return -1;
index 6fa8a60..d33f38e 100644 (file)
@@ -40,8 +40,9 @@ struct ftdi_context {
     // Endpoints
     int in_ep;
     int out_ep;      // 1 or 2
-
-    int reading;     // 0 or 1 - for performance increase in SPI mode
+    
+    /* 1: (default) Normal bitbang mode, 2: FT2232C SPI bitbang mode */
+    unsigned char bitbang_mode;
 
     // misc
     char *error_str;