Unconditionally set/reset eeprom values
[libftdi] / src / ftdi.c
index e38122b..e192cef 100644 (file)
@@ -2535,12 +2535,11 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size,
     // Bit 1: 1 - Out EndPoint is Isochronous
     // Bit 0: 1 - In EndPoint is Isochronous
     //
-    j = buf[0x0A];
-    if (j&0x01) eeprom->in_is_isochronous = 1;
-    if (j&0x02) eeprom->out_is_isochronous = 1;
-    if (j&0x04) eeprom->suspend_pull_downs = 1;
-    if (j&0x08) eeprom->use_serial = 1;
-    if (j&0x10) eeprom->change_usb_version = 1;
+    eeprom->in_is_isochronous  = buf[0x0A]&0x01;
+    eeprom->out_is_isochronous = buf[0x0A]&0x02;
+    eeprom->suspend_pull_downs = buf[0x0A]&0x04;
+    eeprom->use_serial         = buf[0x0A]&0x08;
+    eeprom->change_usb_version = buf[0x0A]&0x10;
 
     // Addr 0B: Invert data lines
     eeprom->invert = buf[0x0B];
@@ -2561,7 +2560,7 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size,
         if (eeprom->manufacturer)
         {
             // Decode manufacturer
-            i = buf[0x0E]; // offset
+            i = buf[0x0E] & (eeprom_size -1); // offset
             for (j=0;j<manufacturer_size-1;j++)
             {
                 eeprom->manufacturer[j] = buf[2*j+i+2];
@@ -2580,7 +2579,7 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size,
         if(eeprom->product)
         {
             // Decode product name
-            i = buf[0x10]; // offset
+            i = buf[0x10] & (eeprom_size -1); // offset
             for (j=0;j<product_size-1;j++)
             {
                 eeprom->product[j] = buf[2*j+i+2];
@@ -2599,7 +2598,7 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size,
         if(eeprom->serial)
         {
             // Decode serial
-            i = buf[0x12]; // offset
+            i = buf[0x12] & (eeprom_size -1); // offset
             for (j=0;j<serial_size-1;j++)
             {
                 eeprom->serial[j] = buf[2*j+i+2];
@@ -2635,6 +2634,7 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size,
     }
     if(ftdi->type == TYPE_2)
     {
+    }
     if(ftdi->type == TYPE_R)
     {
         // Addr 14: CBUS function: CBUS0, CBUS1