{
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;
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 00: Channel A setting
+ eeprom->channel_a_type = buf[0x00] & 0x7;
+ 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] & 0x7;
+ eeprom->channel_b_driver = buf[0x01] & DRIVER_VCP;
+ eeprom->high_current_b = buf[0x01] & HIGH_CURRENT_DRIVE;
+
+ eeprom->suspend_dbus7 = buf[0x01] & SUSPEND_DBUS7;
// Addr 02: Vendor ID
eeprom->vendor_id = buf[0x02] + (buf[0x03] << 8);
eeprom->cbus_function[3] = (buf[0x15] >> 4) & 0x0f;
eeprom->cbus_function[4] = buf[0x16] & 0x0f;
}
- else if (ftdi->type == TYPE_2232H)
- {
- }
- else if (ftdi->type == TYPE_4232H)
- {
+ else if ((ftdi->type == TYPE_2232H) ||(ftdi->type == TYPE_4232H))
+ {
+ eeprom->group0_drive = buf[0x0c] & DRIVE_16MA;
+ eeprom->group0_schmitt = buf[0x0c] & IS_SCHMITT;
+ eeprom->group0_slew = buf[0x0c] & SLOW_SLEW;
+ eeprom->group1_drive = (buf[0x0c] >> 4) & 0x3;
+ eeprom->group1_schmitt = (buf[0x0c] >> 4) & IS_SCHMITT;
+ eeprom->group1_slew = (buf[0x0c] >> 4) & SLOW_SLEW;
+ eeprom->group2_drive = buf[0x0d] & DRIVE_16MA;
+ eeprom->group2_schmitt = buf[0x0d] & IS_SCHMITT;
+ eeprom->group2_slew = buf[0x0d] & SLOW_SLEW;
+ eeprom->group3_drive = (buf[0x0d] >> 4) & DRIVE_16MA;
+ eeprom->group3_schmitt = (buf[0x0d] >> 4) & IS_SCHMITT;
+ eeprom->group3_slew = (buf[0x0d] >> 4) & SLOW_SLEW;
}
if(verbose)
{
+ char *channel_mode[] = {"UART","245","CPU", "unknown", "OPTO"};
fprintf(stdout, "VID: 0x%04x\n",eeprom->vendor_id);
fprintf(stdout, "PID: 0x%04x\n",eeprom->product_id);
fprintf(stdout, "Release: 0x%04x\n",eeprom->release);
fprintf(stdout, "Product: %s\n",eeprom->product);
if(eeprom->serial)
fprintf(stdout, "Serial: %s\n",eeprom->serial);
- fprintf(stderr, "Checksum : %04x\n", checksum);
+ fprintf(stdout, "Checksum : %04x\n", checksum);
+ if (ftdi->type >= TYPE_2232C)
+ fprintf(stdout,"Channel A has Mode %s%s%s\n",
+ channel_mode[eeprom->channel_a_type],
+ (eeprom->channel_a_driver)?" VCP":"",
+ (eeprom->high_current_a)?" High Currenr IO":"");
+ if (ftdi->type == TYPE_2232C)
+ fprintf(stdout,"Channel B has Mode %s%s%s\n",
+ channel_mode[eeprom->channel_b_type],
+ (eeprom->channel_b_driver)?" VCP":"",
+ (eeprom->high_current_b)?" High Currenr IO":"");
+ if ((ftdi->type == TYPE_2232H) || (ftdi->type == TYPE_4232H))
+ {
+ fprintf(stdout,"%s has %d mA drive%s%s\n",
+ (ftdi->type == TYPE_2232H)?"AL":"A",
+ (eeprom->group0_drive+1) *4,
+ (eeprom->group0_schmitt)?" Schmitt Input":"",
+ (eeprom->group0_slew)?" Slow Slew":"");
+ fprintf(stdout,"%s has %d mA drive%s%s\n",
+ (ftdi->type == TYPE_2232H)?"AH":"B",
+ (eeprom->group1_drive+1) *4,
+ (eeprom->group1_schmitt)?" Schmitt Input":"",
+ (eeprom->group1_slew)?" Slow Slew":"");
+ fprintf(stdout,"%s has %d mA drive%s%s\n",
+ (ftdi->type == TYPE_2232H)?"BL":"C",
+ (eeprom->group2_drive+1) *4,
+ (eeprom->group2_schmitt)?" Schmitt Input":"",
+ (eeprom->group2_slew)?" Slow Slew":"");
+ fprintf(stdout,"%s has %d mA drive%s%s\n",
+ (ftdi->type == TYPE_2232H)?"BH":"D",
+ (eeprom->group3_drive+1) *4,
+ (eeprom->group3_schmitt)?" Schmitt Input":"",
+ (eeprom->group3_slew)?" Slow Slew":"");
+ }
}