X-Git-Url: http://developer.intra2net.com/git/?a=blobdiff_plain;f=src%2Fftdi.c;h=8293cc35a1f300be43e3db8deed67a056d435e28;hb=3d7ba8719da16c784a3c6e13c5976810073ff8bb;hp=9d5be1b160a7985cd2f2149ed37af18b3e8a73c8;hpb=07851949856f2d82e71ce5be0c62f8f51d5cd506;p=libftdi diff --git a/src/ftdi.c b/src/ftdi.c index 9d5be1b..8293cc3 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -2210,7 +2210,7 @@ void ftdi_eeprom_initdefaults(struct ftdi_context *ftdi) { eeprom->cbus_function[i] = 0; } - eeprom->high_current = 0; + eeprom->high_current_a = 0; eeprom->invert = 0; eeprom->size = FTDI_MAX_EEPROM_SIZE; @@ -2291,7 +2291,7 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi, unsigned char *output) if (ftdi->type != TYPE_R) { if (eeprom->invert) return -4; - if (eeprom->high_current) return -5; + if (eeprom->high_current_a) return -5; } size_check = eeprom->size; @@ -2314,7 +2314,7 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi, unsigned char *output) memset (output, 0, eeprom->size); // Addr 00: High current IO - output[0x00] = eeprom->high_current ? HIGH_CURRENT_DRIVE : 0; + output[0x00] = eeprom->high_current_a ? HIGH_CURRENT_DRIVE : 0; // Addr 01: IN endpoint size (for R type devices, different for FT2232) if (ftdi->type == TYPE_R) { output[0x01] = 0x40; @@ -2506,6 +2506,10 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size, eeprom_size = 0x80; eeprom = ftdi->eeprom; + eeprom->high_current_a = buf[0x00] & HIGH_CURRENT_DRIVE; + eeprom->high_current_b = buf[0x01] & HIGH_CURRENT_DRIVE; + + // Addr 02: Vendor ID eeprom->vendor_id = buf[0x02] + (buf[0x03] << 8); @@ -2530,6 +2534,7 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size, // Bit 6: 0 - reserved // Bit 5: 0 - reserved // Bit 4: 1 - Change USB version + // Not seen on FT2232(D) // Bit 3: 1 - Use the serial number string // Bit 2: 1 - Enable suspend pull downs for lower power // Bit 1: 1 - Out EndPoint is Isochronous @@ -2544,7 +2549,7 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size, // Addr 0C: USB version low byte when 0x0A bit 4 is set // Addr 0D: USB version high byte when 0x0A bit 4 is set - if (eeprom->change_usb_version == 1) + if ((eeprom->change_usb_version == 1) || ftdi->type == TYPE_2232C) { eeprom->usb_version = buf[0x0C] + (buf[0x0D] << 8); }