eeprom->self_powered = 1;
eeprom->remote_wakeup = 1;
- eeprom->chip_type = TYPE_BM;
+ eeprom->release = 0;
eeprom->in_is_isochronous = 0;
eeprom->out_is_isochronous = 0;
for (i = 0; i < 5; i++)
{
if ((eeprom->cbus_function[i] > cbus_max[i]) ||
- (eeprom->cbus_function[i] && eeprom->chip_type != TYPE_R)) return -3;
+ (eeprom->cbus_function[i] && ftdi->type != TYPE_R)) return -3;
}
- if (eeprom->chip_type != TYPE_R)
+ if (ftdi->type != TYPE_R)
{
if (eeprom->invert) return -4;
if (eeprom->high_current) return -5;
// Addr 00: High current IO
output[0x00] = eeprom->high_current ? HIGH_CURRENT_DRIVE : 0;
// Addr 01: IN endpoint size (for R type devices, different for FT2232)
- if (eeprom->chip_type == TYPE_R) {
+ if (ftdi->type == TYPE_R) {
output[0x01] = 0x40;
}
// Addr 02: Vendor ID
// Addr 06: Device release number (0400h for BM features)
output[0x06] = 0x00;
- switch (eeprom->chip_type) {
+ switch (eeprom->release) {
case TYPE_AM:
output[0x07] = 0x02;
break;
// Dynamic content
// In images produced by FTDI's FT_Prog for FT232R strings start at 0x18
// Space till 0x18 should be considered as reserved.
- if (eeprom->chip_type >= TYPE_R) {
+ if (ftdi->type >= TYPE_R) {
i = 0x18;
} else {
i = 0x14;
// Addr 04: Product ID
eeprom->product_id = buf[0x04] + (buf[0x05] << 8);
- value = buf[0x06] + (buf[0x07]<<8);
- switch (value)
- {
- case 0x0600:
- eeprom->chip_type = TYPE_R;
- break;
- case 0x0400:
- eeprom->chip_type = TYPE_BM;
- break;
- case 0x0200:
- eeprom->chip_type = TYPE_AM;
- break;
- default: // Unknown device
- eeprom->chip_type = 0;
- break;
- }
+ eeprom->release = buf[0x06] + (buf[0x07]<<8);
// Addr 08: Config descriptor
// Bit 7: always 1
}
else eeprom->serial = NULL;
- // Addr 14: CBUS function: CBUS0, CBUS1
- // Addr 15: CBUS function: CBUS2, CBUS3
- // Addr 16: CBUS function: CBUS5
- if (eeprom->chip_type == TYPE_R) {
- eeprom->cbus_function[0] = buf[0x14] & 0x0f;
- eeprom->cbus_function[1] = (buf[0x14] >> 4) & 0x0f;
- eeprom->cbus_function[2] = buf[0x15] & 0x0f;
- eeprom->cbus_function[3] = (buf[0x15] >> 4) & 0x0f;
- eeprom->cbus_function[4] = buf[0x16] & 0x0f;
- } else {
- for (j=0; j<5; j++) eeprom->cbus_function[j] = 0;
- }
-
// verify checksum
checksum = 0xAAAA;
ftdi_error_return(-1,"EEPROM checksum error");
}
+ if(ftdi->type == TYPE_R)
+ {
+ // Addr 14: CBUS function: CBUS0, CBUS1
+ // Addr 15: CBUS function: CBUS2, CBUS3
+ // Addr 16: CBUS function: CBUS5
+ if (ftdi->type == TYPE_R) {
+ eeprom->cbus_function[0] = buf[0x14] & 0x0f;
+ eeprom->cbus_function[1] = (buf[0x14] >> 4) & 0x0f;
+ eeprom->cbus_function[2] = buf[0x15] & 0x0f;
+ eeprom->cbus_function[3] = (buf[0x15] >> 4) & 0x0f;
+ eeprom->cbus_function[4] = buf[0x16] & 0x0f;
+ } else {
+ for (j=0; j<5; j++) eeprom->cbus_function[j] = 0;
+ }
+ }
+
return 0;
}