X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.c;h=03d7b071800b4cdbd741538fc7d374c1d28b4419;hp=d86d98e0f6106b10d196c75a5ef358e96af950b9;hb=6dd18122a81e6030dd239391df6ffde8cb8c59c7;hpb=37388ecee483f0facac38486741d4e1680ddc51b diff --git a/src/ftdi.c b/src/ftdi.c index d86d98e..03d7b07 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -2,7 +2,7 @@ ftdi.c - description ------------------- begin : Fri Apr 4 2003 - copyright : (C) 2003-2017 by Intra2net AG and the libftdi developers + copyright : (C) 2003-2020 by Intra2net AG and the libftdi developers email : opensource@intra2net.com SPDX-License-Identifier: LGPL-2.1-only ***************************************************************************/ @@ -1328,7 +1328,7 @@ static int ftdi_to_clkbits_AM(int baudrate, unsigned long *encoded_divisor) AM Type chips have only four fractional subdivisors at value[15:14] for subdivisors 0, 0.5, 0.25, 0.125 */ -static int ftdi_to_clkbits(int baudrate, unsigned int clk, int clk_div, unsigned long *encoded_divisor) +static int ftdi_to_clkbits(int baudrate, int clk, int clk_div, unsigned long *encoded_divisor) { static const char frac_code[8] = {0, 3, 2, 4, 1, 5, 6, 7}; int best_baud = 0; @@ -3044,10 +3044,13 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi) case TYPE_2232H: case TYPE_4232H: i += 2; + /* Fall through*/ case TYPE_R: i += 2; + /* Fall through*/ case TYPE_2232C: i += 2; + /* Fall through*/ case TYPE_AM: case TYPE_BM: i += 0x94; @@ -3182,8 +3185,13 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi) output[0x00] = type2bit(eeprom->channel_a_type, TYPE_R); if (eeprom->high_current) output[0x00] |= HIGH_CURRENT_DRIVE_R; + + /* Field is inverted for TYPE_R: Bit 00.3 set to 1 is D2XX, VCP is 0 */ if (eeprom->channel_a_driver) + output[0x00] &= ~DRIVER_VCP; + else output[0x00] |= DRIVER_VCP; + if (eeprom->external_oscillator) output[0x00] |= 0x02; output[0x01] = 0x40; /* Hard coded Endpoint Size*/ @@ -3433,15 +3441,20 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi) { case TYPE_230X: free_start += 2; + /* Fall through*/ case TYPE_232H: free_start += 6; + /* Fall through*/ case TYPE_2232H: case TYPE_4232H: free_start += 2; + /* Fall through*/ case TYPE_R: free_start += 2; + /* Fall through*/ case TYPE_2232C: free_start++; + /* Fall through*/ case TYPE_AM: case TYPE_BM: free_start += 0x14;