I have a device based on the FTDI FT2232C: [ 11113285.311079] uftdi1 at uhub1 port 2 configuration 1 interface 0 [ 11113285.311079] uftdi1: SecuringHardware.com (0x0403) Tigard V1.1 (0x6010), rev 2.00/7.00, addr 3 [ 11113285.311079] ucom1 at uftdi1 portno 1 [ 11113285.311079] uftdi2 at uhub1 port 2 configuration 1 interface 1 [ 11113285.311079] uftdi2: SecuringHardware.com (0x0403) Tigard V1.1 (0x6010), rev 2.00/7.00, addr 3 [ 11113285.311079] ucom2 at uftdi2 portno 2
It's a combo device that, in addition to a standard TTL-level UART, has a bunch of break-out headers for doing things like SPI, SWD, and JTAG (in my case, I need to use JTAG for programming some Atmel CPLDs). I should be able to do this with OpenOCD (pkgsrc/devel/openocd), but libfdti1 fails to find the device because libusb1 only deals in "ugen". "ugenif" might have been a possible solution here, except for the fact that 0x0403,0x6010 is the standard VID,PID for the FTDI FT2232C, and I don't want "interface 1" of ALL FT2232C devices to get the "ugen" treatment. The desire to use "ugen" on "interface 1" is not a property of 0x0403,0x6010, it's really a property of "SecuringHardware.com","Tigard V1.1". Unfortunately, there's isn't a way to express that in the kernel config syntax. I think my only short-term option here is to, in uftdi_match(), specifically reject based on this criteria: - VID == 0x0403 - PID == 0x6010 - interface number == 1 - vendor string == "SecuringHardware.com" - product string == "Tigard V1.1" (It's never useful, on this particular board, to use the second port as a UART.) -- thorpej