comparison README @ 7:cfe0a9b081ec

add README
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 11 Dec 2023 08:24:49 +0000
parents
children
comparison
equal deleted inserted replaced
6:00a3400668db 7:cfe0a9b081ec
1 Patches to Linux kernel ftdi_sio driver: add support for USB device 0403:7152
2 =============================================================================
3
4 The present repository contains many different versions (made to apply against
5 different versions of Linux kernel) of the same series of patches to ftdi_sio
6 driver: adding support for a new, previously unsupported USB-serial device,
7 distinctly identified by a new, previously unsupported USB ID code. This ID
8 code (a PID out of FTDI's VID) has been officially allocated by FTDI to
9 Falconia Partners LLC.
10
11 Q: What is the physical hardware in question?
12
13 A: The one hardware device that already exists physically and requires the
14 present series of patches is the 'C' configuration of FreeCalypso DUART28
15 adapter. However, we expect to have other hardware products in the near
16 future that will have the same control signal wiring, require the same
17 special handling from the Linux kernel, share the same USB ID code and be
18 supported by the same patch.
19
20 Q: What is so special about this family of USB-serial devices?
21
22 A: All devices that may share the same USB ID code and will therefore be
23 automatically supported by the same patch have the same essential properties:
24 it is a two-channel FTDI device (FT2232D or FT2232H) with Channel A wired
25 normally (100% standard ttyUSB handling is appropriate), but special wiring
26 on Channel B. The latter channel on these devices is a hybrid UART+GPIO
27 entity: a ttyUSB device is needed (the same binary serial protocols that are
28 spoken over TxD/RxD lines on this device are also spoken over myriad other
29 standard serial ports), but this ttyUSB device needs to operate with a
30 special quirk. The quirk is that standard POSIX etc behavior for this one
31 particular ttyUSB device needs to be intentionally broken: the usual
32 automatic assertion of DTR & RTS upon ttyUSB device open MUST be suppressed
33 - but these two signals must still be controllable via explicit TIOCMBIS and
34 TIOCMBIC ioctls, issued by custom userspace tools.
35
36 Q: What behavioral changes are effected by the present series of patches to
37 Linux kernel ftdi_sio driver?
38
39 A: The only change is purely additive: USB device 0403:7152, previously
40 unsupported, becomes supported and recognized as needing the special quirk
41 described in the previous catechism. Absolutely no behavioral changes are
42 applied to anything else other than this one USB device.
43
44 Q: If the change does nothing more than add support for a new USB device, why
45 is it not mainlined?
46
47 A: I, Mychaela Nadezhda Falconia, the designer of the hardware in question and
48 the author of the present patches, made several good-faith attempts over the
49 years to get these patches mainlined. The first formal submission attempt
50 was made back in 2020, multiple revision iterations were made, responding to
51 each and every nitpick from maintainers, multiple different approaches were
52 tried - but in the end a most senior Linux kernel maintainer took the
53 attitude of "screw you" toward our users, declaring that the hardware device
54 will not be supported as a matter of ideological principle.
55
56 For more detailed background information and a deeper analysis of the problem,
57 please read the following article:
58
59 https://www.freecalypso.org/hg/freecalypso-docs/file/tip/Linux-DTR-RTS-flaw
60
61 Instructions for end users
62 ==========================
63
64 Any end user who wishes to make use of the optional boot control feature of
65 FreeCalypso DUART28, or wishes to use any of our planned future FreeCalypso
66 hardware devices with the same wiring must apply our DUART28C support patches
67 locally to their Linux kernel - or more precisely, to their ftdi_sio driver.
68 Patches are provided that apply cleanly to all mainline kernels since 5.10 (the
69 first version in which a basic, much less controversial prerequisite patch was
70 merged), and to some stable kernel lines going back to 4.4.y. Please see
71 LTS-versions article for a table showing which patch version goes with which
72 long-term-supported versions of Linux kernel.