{
eeprom->cbus_function[i] = 0;
}
- eeprom->high_current = 0;
+ eeprom->high_current_a = 0;
eeprom->invert = 0;
eeprom->size = FTDI_MAX_EEPROM_SIZE;
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;
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;
eeprom_size = 0x80;
eeprom = ftdi->eeprom;
+ // Addr 00: Channel A setting
+
+ eeprom->channel_a_type = buf[0x00] & CHANNEL_IS_OPTO;
+ eeprom->channel_a_driver = buf[0x00] & DRIVER_VCP;
+ eeprom->high_current_a = buf[0x00] & HIGH_CURRENT_DRIVE;
+
+ // Addr 01: Channel B setting
+
+ eeprom->channel_b_type = buf[0x01] & CHANNEL_IS_OPTO;
+ eeprom->channel_b_driver = buf[0x01] & DRIVER_VCP;
+ eeprom->high_current_b = buf[0x01] & HIGH_CURRENT_DRIVE;
+
// Addr 02: Vendor ID
eeprom->vendor_id = buf[0x02] + (buf[0x03] << 8);
// 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
// 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);
}