[BUG] intel-quickspi: touchscreen DMA write timeout (Goodix 27C6:012D) on Lenovo YOGA Pro 16 IAH10

Qiao Ruihao <[email protected]>
Newsgroups org.kernel.vger.linux-input
Message-ID <[email protected]>
Hello,

The touchscreen on my Lenovo YOGA Pro 16 IAH10 does not work under
Linux. The intel-quickspi driver detects the device, but the
feature-report fetch (GET_REPORT) fails with a TxDMA write timeout,
which makes hid-multitouch fail initialization and fall back to a
generic keyboard, so the screen does not respond to any touch input.

The touchscreen works correctly under Windows 11 on the same hardware.

## Hardware

  - Laptop: Lenovo YOGA Pro 16 IAH10 (MT 83L0)
  - CPU: Intel Arrow Lake-H
  - Touchscreen: Goodix 27C6:012D, connected via Intel THC QuickSPI
  - THC controller: 00:10.0 Digitizer Pen [8086:7749] (rev 03),
    subsystem Lenovo [17aa:3815]

## Software

  - Kernel: 7.0.14-070014-generic
    (also reproduced on 6.19.14-061914-generic)
  - Distro: Ubuntu 22.04.5 LTS

## Problem

At boot the device is detected (reset + device descriptor read
succeed), but then hid-multitouch fails to fetch its feature reports
because every GET_REPORT command sent over TxDMA times out.

## Relevant kernel log

  intel_quickspi 0000:00:10.0: Can't find wake GPIO resource
  ACPI: \_SB.PC00.THC0._RST: Excess arguments - Caller passed 1, ACPI requires 0
  input: quickspi-hid 27C6:012D Touchscreen as /devices/pci0000:00/0000:00:10.0/0001:27C6:012D.0002/input/input7
  intel_quickspi 0000:00:10.0: Wait Get Report Response timeout, ret:0
  hid-multitouch 0001:27C6:012D.0002: failed to fetch feature 2
  intel_quickspi 0000:00:10.0: timeout for waiting TxDMA completion
  intel_quickspi 0000:00:10.0: DMA write failed, ret = -110
  intel_quickspi 0000:00:10.0: Write GET_REPORT command failed, ret = -110
  hid-multitouch 0001:27C6:012D.0002: failed to fetch feature 3
  hid-multitouch 0001:27C6:012D.0002: input,hidraw1: <UNKNOWN> HID v8.65 Keyboard [quickspi-hid 27C6:012D]

## Analysis

The reset (acpi_tic_reset via _RST) and device-descriptor read
succeed, so the SPI link and interrupt path partially work. The
failure is specific to quickspi_get_report() ->
write_cmd_to_txdma() -> thc_dma_write(): the TxDMA transfer never
completes (write_done is never set, 1s timeout -> -ETIMEDOUT).

I would be happy to provide additional information (full dmesg, ACPI
tables, register dumps) or test patches.

Thanks,
Qiao Ruihao
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.