Skip to content

Input: goodix - defer probe when externally reset controller does not answer#7482

Open
agners wants to merge 1 commit into
raspberrypi:rpi-6.18.yfrom
agners:input-goodix-defer-external-reset
Open

Input: goodix - defer probe when externally reset controller does not answer#7482
agners wants to merge 1 commit into
raspberrypi:rpi-6.18.yfrom
agners:input-goodix-defer-external-reset

Conversation

@agners

@agners agners commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

On some devices the reset line of the touch controller is sequenced by
external logic rather than by GPIOs under control of the goodix driver.
On the Raspberry Pi Touch Display 2, for example, the reset line is
managed by a microcontroller on the display. In such configurations the
driver has neither a reset GPIO nor access to the irq pin
(IRQ_PIN_ACCESS_NONE), so when the initial I2C test fails there is no
controller-reset retry path and probing fails permanently with -EIO.
Whether the controller answers the first I2C test depends on probe
timing relative to the external reset sequencing, which can shift
between kernel versions and configurations.

Return -EPROBE_DEFER in this case so probing is retried later, in
particular after other drivers (such as the DSI panel driver behind
which the display MCU is brought up) have been bound.


Note: This addresses a regression observed on Home Assistant OS 18.1 (kernel 6.18.x), where the Goodix touch controller of the Raspberry Pi Touch Display 2 stopped probing with I2C communication failure: -5, see home-assistant/operating-system#4846. The same failure signature has also been reported against Raspberry Pi OS, e.g. after warm reboots: https://forums.raspberrypi.com/viewtopic.php?t=389937

This is untested on my end, but it seems a very plausible fix. Hence I did not send it upstream for now — but since the affected code path is unmodified mainline code, if this turns out to be the correct fix, anyone is welcome to pick it up and upstream it.

🤖 Generated with Claude Code

… answer

On some devices the reset line of the touch controller is sequenced by
external logic rather than by GPIOs under control of the goodix driver.
On the Raspberry Pi Touch Display 2, for example, the reset line is
managed by a microcontroller on the display. In such configurations the
driver has neither a reset GPIO nor access to the irq pin
(IRQ_PIN_ACCESS_NONE), so when the initial I2C test fails there is no
controller-reset retry path and probing fails permanently with -EIO.
Whether the controller answers the first I2C test depends on probe
timing relative to the external reset sequencing, which can shift
between kernel versions and configurations.

Return -EPROBE_DEFER in this case so probing is retried later, in
particular after other drivers (such as the DSI panel driver behind
which the display MCU is brought up) have been bound.

Link: home-assistant/operating-system#4846
Assisted-by: Claude:claude-fable-5
Signed-off-by: Stefan Agner <stefan@agner.ch>
@agners agners force-pushed the input-goodix-defer-external-reset branch from 77ec19b to 3824f43 Compare July 11, 2026 12:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant