view README @ 9:824cc894e826

Mainline tracking: new article
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 25 Dec 2023 00:06:58 +0000
parents cfe0a9b081ec
children
line wrap: on
line source

Patches to Linux kernel ftdi_sio driver: add support for USB device 0403:7152
=============================================================================

The present repository contains many different versions (made to apply against
different versions of Linux kernel) of the same series of patches to ftdi_sio
driver: adding support for a new, previously unsupported USB-serial device,
distinctly identified by a new, previously unsupported USB ID code.  This ID
code (a PID out of FTDI's VID) has been officially allocated by FTDI to
Falconia Partners LLC.

Q: What is the physical hardware in question?

A: The one hardware device that already exists physically and requires the
   present series of patches is the 'C' configuration of FreeCalypso DUART28
   adapter.  However, we expect to have other hardware products in the near
   future that will have the same control signal wiring, require the same
   special handling from the Linux kernel, share the same USB ID code and be
   supported by the same patch.

Q: What is so special about this family of USB-serial devices?

A: All devices that may share the same USB ID code and will therefore be
   automatically supported by the same patch have the same essential properties:
   it is a two-channel FTDI device (FT2232D or FT2232H) with Channel A wired
   normally (100% standard ttyUSB handling is appropriate), but special wiring
   on Channel B.  The latter channel on these devices is a hybrid UART+GPIO
   entity: a ttyUSB device is needed (the same binary serial protocols that are
   spoken over TxD/RxD lines on this device are also spoken over myriad other
   standard serial ports), but this ttyUSB device needs to operate with a
   special quirk.  The quirk is that standard POSIX etc behavior for this one
   particular ttyUSB device needs to be intentionally broken: the usual
   automatic assertion of DTR & RTS upon ttyUSB device open MUST be suppressed
   - but these two signals must still be controllable via explicit TIOCMBIS and
   TIOCMBIC ioctls, issued by custom userspace tools.

Q: What behavioral changes are effected by the present series of patches to
   Linux kernel ftdi_sio driver?

A: The only change is purely additive: USB device 0403:7152, previously
   unsupported, becomes supported and recognized as needing the special quirk
   described in the previous catechism.  Absolutely no behavioral changes are
   applied to anything else other than this one USB device.

Q: If the change does nothing more than add support for a new USB device, why
   is it not mainlined?

A: I, Mychaela Nadezhda Falconia, the designer of the hardware in question and
   the author of the present patches, made several good-faith attempts over the
   years to get these patches mainlined.  The first formal submission attempt
   was made back in 2020, multiple revision iterations were made, responding to
   each and every nitpick from maintainers, multiple different approaches were
   tried - but in the end a most senior Linux kernel maintainer took the
   attitude of "screw you" toward our users, declaring that the hardware device
   will not be supported as a matter of ideological principle.

For more detailed background information and a deeper analysis of the problem,
please read the following article:

https://www.freecalypso.org/hg/freecalypso-docs/file/tip/Linux-DTR-RTS-flaw

Instructions for end users
==========================

Any end user who wishes to make use of the optional boot control feature of
FreeCalypso DUART28, or wishes to use any of our planned future FreeCalypso
hardware devices with the same wiring must apply our DUART28C support patches
locally to their Linux kernel - or more precisely, to their ftdi_sio driver.
Patches are provided that apply cleanly to all mainline kernels since 5.10 (the
first version in which a basic, much less controversial prerequisite patch was
merged), and to some stable kernel lines going back to 4.4.y.  Please see
LTS-versions article for a table showing which patch version goes with which
long-term-supported versions of Linux kernel.