evidence · 2.5 KiB

touch-range.md

Committed at docs/evidence/panel-landscape/touch-range.md. This is what grounds the requirements that cite it.

Open raw source

The GT9895’s X range is 1080, not 1024 — 2026-10-13

The device tree said touchscreen-size-x = <1024>. That value was never measured. docs/evidence/touch-reports.md added it at bring-up, when the widest recorded contact was raw X 728.

The observation

The landscape panel (sway transform 270, logical 1232x568) puts the digitizer’s X axis on the logical Y axis: y = raw_x * 568 / 1024. The compositor’s opt-in trace (SWAY_K230_TOUCH_ROUTE_TRACE=1, a runtime systemd drop-in in /run) logged every touch-down, in touch-route-trace-2026-10-13.txt. Columns: kernel monotonic seconds, then the trace fields. The trace does not name the device, so lines are told apart by time:

Monotonic sSourceLogical y range
5487-5507injected (evemu-device clone), known coordinatesas sent
6315-6334operator’s finger, no calibrationup to 598.508, four times
6430swaymsg input 0:0:Goodix_Berlin_Capacitive_TouchScreen calibration_matrix 0.948148 0 0 0 1 0—
6476-6486operator’s finger, calibratedup to 551.914

598.508 × 1024 / 568 = 1079.0. It is exact, and it repeats on four separate touches: the controller’s own ceiling is raw X 1079, so its grid is 1080 wide. With the 1024 declaration, the 30 px nearest the landscape bottom edge (the right edge in portrait) landed outside the output. The card shell’s bottom-edge swipe starts in that band, so it never began.

The Y axis is consistent with 2400. Before calibration the operator reached x = 0.513, which is raw Y ≈ 2399, and nothing went below zero.

LILYGO’s own device tree on this board’s factory card (backup k230-tdisplay-2-vendor-card-20261012.img.zst, DTB at card offset 0x34a3400) uses the vendor driver with goodix,panel-max-x = <0x424> (1060) and goodix,panel-max-y = <0x960> (2400). That confirms 1024 was not the vendor’s value either. The measured ceiling, 1079, is above the vendor’s 1060, so this tree uses the measured 1080.

The correction

touchscreen-size-x = <1080> in k230-tdisplay-mainline-drm-common.dtsi, k230-tdisplay.dts and k230-tdisplay-hdmi.dts. For libinput this equals the calibration the operator confirmed: both map raw X to raw / 1080. tools/inject-tap.sh now reads the clone’s advertised grid instead of assuming 1024.

Not yet established