Re: [PATCH v11] i2c: designware: defer probe if child GpioInt controllers are not bound
Bartosz Golaszewski <[email protected]>
| Newsgroups | org.kernel.vger.linux-i2c,org.kernel.vger.linux-gpio |
|---|---|
| Message-ID | <CAMRc=MdCn7BtFCQvraax5vV1t+G=Tjs4OP4ikd7RquFAj+G=Ww@mail.gmail.com> |
On Wed, 15 Jul 2026 13:47:01 +0200, Hardik Prakash <[email protected]> said: > I2C controllers may have child devices with GpioInt resources that > depend on GPIO controllers being fully initialized. If the I2C > controller probes and enumerates children before the referenced GPIO > controller has completed probe, GPIO interrupts may not be properly > configured, leading to device failures. > > On Lenovo Yoga 7 14AGP11, the WACF2200 touchscreen (child of > AMDI0010:02) has a GpioInt resource pointing to GPIO 157 on the > pinctrl-amd controller (AMDI0030:00). When i2c-designware probes > AMDI0010:02 before pinctrl-amd finishes initializing, I2C transactions > fail with lost arbitration errors: > > 0.285952 amd_gpio_probe: registering gpiochip <- GPIO chip visible > 0.287121 amd_gpio_probe: requesting parent IRQ <- probe still running > 0.301454 AMDI0010:02 dw_i2c_plat_probe: start <- races here > 2.348157 lost arbitration > > Add a dependency check that walks ACPI child devices and defers probe > until any referenced GPIO controller is bound. > > Fixes: 3812a9e84265 ("pinctrl-amd: enable IRQ for WACF2200 touchscreen on Lenovo Yoga 7 14AGP11") > Suggested-by: Mario Limonciello <[email protected]> > Signed-off-by: Hardik Prakash <[email protected]> > Assisted-by: Claude:claude-sonnet-5 > Assisted-by: DeepSeek:deepseek-v4-pro > Link: https://bugzilla.kernel.org/show_bug.cgi?id=221494 > --- > drivers/i2c/busses/i2c-designware-platdrv.c | 80 +++++++++++++++++++++ > 1 file changed, 80 insertions(+) > v10 -> v11: > - Replaced custom gpio_controller_ref list with gpio_device_find_by_fwnode(), > as suggested by Andy, dropping the linked list and dedup logic (~60 lines) > - Moved resource-skip explanation from commit message into a code comment > - Fixed device_is_bound() to check gpio_device_to_device(gdev)->parent > rather than the gpio_device's own internal class device, which never > has a driver bound to it > Please include the entire changelog in every new iteration. I believe I gave my Ack for this and now it's gone. I have no idea why because there's neither a complete changelog nor links to previous versions. Bart