The touch controller reports (display/touch task 4.1b)
2026-09-21. The GT9895 binds, interrupts, and delivers multitouch events
to /dev/input/event0.
The interrupt was the whole problem
The device tree declared IRQ_TYPE_EDGE_FALLING. The controller binds
either way, goodix_berlin probes, and /dev/input/event0 appears — so
every status check passed while the device reported nothing. Measured on
the board, same kernel, same everything else, only the DT interrupts
flag changed:
interrupts = <23 ...> | /proc/interrupts count |
|---|---|
IRQ_TYPE_EDGE_FALLING (0x02) | 0 |
IRQ_TYPE_LEVEL_LOW (0x08) | 2173 over one 45 s capture |
/proc/interrupts confirms the live setting: 87: 2173 gpio-k230 23 Level goodix-berlin.
What it reports
evtest /dev/input/event0, finger dragged on the glass:
Event: time ..., type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 27
Event: time ..., type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 456
Event: time ..., type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 888
Event: time ..., type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 3
Event: time ..., type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time ..., type 3 (EV_ABS), code 0 (ABS_X), value 456
Event: time ..., type 3 (EV_ABS), code 1 (ABS_Y), value 888
Event: time ..., -------------- SYN_REPORT ------------
Tracking IDs are allocated and retired, BTN_TOUCH goes 1 and 0, and
ABS_MT_TOUCH_MAJOR ramps as the contact patch grows. Slot-0 trajectory
from a 60 s capture, decoded with ABS_MT_SLOT honoured, spans
X 86..728 and Y 765..1765 continuously — both axes move, and the motion
is smooth rather than quantised to a few values.
Axis ranges as the driver advertises them, matching the
touchscreen-size-x/y added to the DT:
| axis | min | max |
|---|---|---|
ABS_X, ABS_MT_POSITION_X | 0 | 1023 |
ABS_Y, ABS_MT_POSITION_Y | 0 | 2399 |
Note the digitizer grid is 1024x2400 while the panel is 568x1232, so anything consuming these coordinates has to scale.
Not yet established
Whether the axes are swapped or mirrored relative to the panel. That
needs a touch at a known screen position, and the panel is currently
sheared by the pixel-clock workaround in dsi-burst-headroom.md, which
would make any on-screen target land somewhere other than where it is
drawn. Deferred to task 4.3, after the corrected image is flashed.