Two defects keep the driver from reporting touches on a board that
cannot use the interrupt line.
The register write built two messages joined by I2C_M_NOSTART. That
puts the same bytes on the wire as a single three byte message, but
resuming a transfer without a start condition is optional, and a
controller that does not implement it fails the transfer. On the
ESP32-P4 every write returned -ETIMEDOUT, so the buffer status clear
at 0x814E never reached the controller and gt9xx_read_touch_data()
returned an error for every read. Send the register address and the
value as a single message.
read() returned a full struct touch_sample_s even when the controller
reported no contact, with npoints set to zero. A caller that judges
the read by its return value takes that for valid data: the LVGL
touchscreen driver reads a second sample to decide whether to keep
reading, always gets one, so it sets continue_reading on every pass
and lv_indev_read() never returns. The display then stops refreshing
after the first frame while the touch reads spin. Return -EAGAIN when
there is no contact and the file was opened with O_NONBLOCK, which is
what the touchscreen upper half does in the same situation. A
blocking reader keeps the previous behaviour.
While here, add the blank line after the declaration in gt9xx_poll() that
nxstyle asks for. It predates this change, but the CI runs checkpatch over
every file a commit touches, so it has to go.
Signed-off-by: Jorge Guzman <jorge.gzm@gmail.com>