ft230x: Include Factory Configuration Data when building new eeprom data.
authorUwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Thu, 24 Apr 2014 17:14:32 +0000 (19:14 +0200)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Fri, 16 May 2014 14:55:19 +0000 (16:55 +0200)
src/ftdi.c

index 71a341a..8546319 100644 (file)
@@ -3077,9 +3077,18 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi)
             /* FT230X has a user section in the MTP which is not part of the checksum */
             i = 0x40;
         }
-        value = output[i*2];
-        value += output[(i*2)+1] << 8;
-
+        if ((ftdi->type == TYPE_230X) && (i >=  0x40) && (i < 0x50)) {
+            uint16_t data;
+            if (ftdi_read_eeprom_location(ftdi, i, &data)) {
+                fprintf(stderr, "Reading Factory Configuration Data failed\n");
+                i = 0x50;
+            }
+            value = data;
+        }
+        else {
+            value = output[i*2];
+            value += output[(i*2)+1] << 8;
+        }
         checksum = value^checksum;
         checksum = (checksum << 1) | (checksum >> 15);
     }
@@ -4217,7 +4226,7 @@ int ftdi_erase_eeprom(struct ftdi_context *ftdi)
     if (ftdi == NULL || ftdi->usb_dev == NULL)
         ftdi_error_return(-2, "USB device unavailable");
 
-    if (ftdi->type == TYPE_R)
+    if ((ftdi->type == TYPE_R) || (ftdi->type == TYPE_230X))
     {
         ftdi->eeprom->chip = 0;
         return 0;