# 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 s | Source | Logical y range | | --- | --- | --- | | 5487-5507 | injected (`evemu-device` clone), known coordinates | as sent | | 6315-6334 | operator's finger, no calibration | up to **598.508**, four times | | 6430 | `swaymsg input 0:0:Goodix_Berlin_Capacitive_TouchScreen calibration_matrix 0.948148 0 0 0 1 0` | — | | 6476-6486 | operator's finger, calibrated | up 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 - The rebuilt device tree booted on either board. The live check used the sway calibration matrix, not the new tree. - The first board's range. It is the same product, but only this board was measured.