Re: [PATCH v12] i2c: designware: defer probe if child GpioInt controllers are not bound
Andy Shevchenko <[email protected]>
| Newsgroups | org.kernel.vger.linux-i2c,org.kernel.vger.linux-gpio |
|---|---|
| Organization | Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo |
| Message-ID | <[email protected]> |
On Thu, Jul 16, 2026 at 05:00:55PM +0530, Hardik Prakash wrote:
> 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.
It's utterly wrong patch. Actually this whole saga shows how AI wastes
more time than gains a productivity.
...
> gpio_dev = gpio_device_to_device(gdev)->parent;
> - scoped_guard(device, gpio_dev) {
> - if (!device_is_bound(gpio_dev))
> - return -EPROBE_DEFER; /* controller not bound yet: abort walk */
> - }
> + guard(device)(gpio_dev);
When use guard()(), make sure it has a blank lines before and after, so it's
visible as a separate entity.
> + if (!device_is_bound(gpio_dev))
> + return -EPROBE_DEFER; /* controller not bound yet: abort walk */
>
...
So, make sure v13 is a real patch.
--
With Best Regards,
Andy Shevchenko