Re: [PATCH 0/2] FTDI CBUS GPIO support

Stefan Agner
2015-06-23T22:11:28Z

On 2015-06-23 11:22, Johan Hovold wrote:
> On Mon, Jun 22, 2015 at 10:11:35PM +0200, Stefan Agner wrote:
>> On 2015-06-22 19:26, Johan Hovold wrote:
>
>> > Instead, hang the gpio chip directly off the usb interface (not the
>> > port), add a new config option, and keep the gpio implementation under
>> > drivers/usb/serial (possibly in its own file ftdi_sio-gpio.c).
>>
>> Agreed sounds like a good plan. Will try this approach in v2.
>>
>> Except I don't think hanging it directly to the USB interface is the
>> right thing to do.
>>
>> Looking at the block diagram of FT232R or FT232H, the CBUS pins seem to
>> be part of the UART/FIFO controller. And I think the dual UART FT2232D
>> actually supports controlling the CBUS pins of the two UART controllers
>> individually, at least the block diagram thereof suggests so.
>
> The port is a Linux abstraction, and for FTDI we happen to have exactly
> one port child device per USB interface. As I see it, the gpio
> controller for the CBUS pins should be a sibling rather than a child
> device to the port.
>
> Note that we'd still have two gpio-controllers on FT2232D (one per USB
> interface).

I did some research. I think the FT2232D or FT2232H devices do not
support the CBUS Bit Bang mode. For instance the D2XX Programmer's Guide
indicates that on page 69 (CBUS Bit Bang Mode (FT232R and FT232H devices
only)) as well as the AN_184 "FTDI Device Input Output Pin States", does
not mention that the CBUS pins as EEPROM selectable (the same document
does so for FT232R/FT232H devices)...

I don't have such a device, hence I can't try it out...

> I'm aware that this requires some restructuring of the ftdi_sio-driver
> (e.g. the device type and ftdi-interface number should be a feature of
> the usb-serial rather than usb-serial-port device).

The findings above probably do not change the fact that we should not
use the Linux port abstraction to attach the GPIO controller...

I looked into that a bit more in depth. Do I see things right that the
multi-port devices have multiple USB interfaces, which leads to
usb_serial_probe and in turn ftdi_sio_probe getting called multiple
times by the USB stack? If yes, I think I have the bigger picture to go
ahead and try to implement it accordingly.

--
Stefan