updates — alarm-tegra-x1 (JG2HQZWB)
Joy-Con input over the rails; two silent build traps
Joy-Con input over the rails, and two silent build traps found on the way.
JOY-CON INPUT (untested on hardware)
- Ported switchroot's patch 0016 as drivers/joycon.c, installed by a new
install_switch_joycon() the same way the panel driver is, so it is
reproducible rather than hand-applied.
- Device tree: the rails are UARTs -- serial@70006040 (uartb, right Joy-Con)
and serial@70006200 (uartc, left), with their pin groups. Those are ordinary
pinmux pins, not padctl lanes, so they cannot disturb the USB/PCIe lanes the
console depends on.
- Deliberately did NOT ship switchroot's patch 0019 (hid-joycon.c): it binds
HID USB/Bluetooth Nintendo devices, which mainline's hid-nintendo already
covers. It does nothing for the rails. Two drivers for one job.
- Port was small: power_supply_config lost of_node, serdev receive_buf returns
size_t now, platform_driver.remove returns void now, six helpers became static.
- NOT tested on hardware yet. It builds clean and is in the kernel; nothing has
driven a Joy-Con.
TRAP 1: a symbol can be set and the code still never built
- CONFIG_JOYSTICK_JOYCON=y was present in .config AND include/config/auto.conf,
while joycon.o was never compiled: drivers/input/Makefile gates the whole
joystick/ directory on CONFIG_INPUT_JOYSTICK, which was off. kconfig never
complained because joystick/Kconfig is sourced unconditionally, so the symbol
was visible and settable -- the gate is only in the Makefile.
- verify_required_options() could not catch this: reading .config proves a
symbol survived kconfig, not that any code was built. Added
verify_built_in_drivers(), which reads the built vmlinux for a string each
installed driver defines and fails the build if one is missing.
TRAP 2: mainline cannot invert the rails' TXD/RTS
- switchroot's DT sets nvidia,invert-txd / nvidia,invert-rts. Mainline's
serial-tegra.c defines TEGRA_UART_IRDA_CSR and never uses it. The DT here
omits them and tests without inversion first; the bit layout is authoritative
in the vendor tree if it turns out to be needed.
ALSO
- kconfig duplicate-line bug fixed: new options were appended next to their own
"# CONFIG_X is not set" line, leaving two contradictory lines per symbol.
- install_switch_patches() added so edits to upstream files are re-applied; it
immediately found kernel-boot-markers.patch half-reverted, with its head.S
markers silently gone.
- Touchscreen: documented as UNRESOLVED. It answers on I2C and queues
CONTROLLER_READY, but returns an error event whose payload reads as "bad
code" and reports chip id 0x0000. Three real bugs were fixed on the way
(unmuxed i2c3 pins, an interrupt storm, a poll-thread ordering bug); two
hypotheses are recorded as wrong so nobody retries them.
v0.1.0
first release