[PATCH v2] drm/bridge: ite-it66121: fix silent probe regression due to reset timing

From: Luca Ceresoli

Date: Thu Nov 05 2026 - 03:58:45 EST


Commit e02b5262fd28 ("drm/bridge: it66121: acquire reset GPIO in probe")
rightfully added code to make the reset pin really work instead of being a
no-op, but that change introduced a regression making probe fail most of
the times, at least on some hardware.

On a BeagleBone Black rev.D the IT66122 silently fails probing >90% of the
times. This is because:

1. the regmap_read() calls just after it66121_hw_reset() to read the ID
registers fail
2. there is no error checking for these regmap_read(), execution
continues silently
3. this results in not matching any of the IDs from it66xx_chip_info
4. and this results in silently returning -ENODEV

Empirical tests showed a small delay after de-asserting reset fixes
probing. Likely the device needs some ramp-up time after reset. No such
requirement is mentioned in the docs I could find, so the amount of delay
was chosen by testing: 10 ms worked in 100% of 25 test runs, so setting a
20 ms delay should provide a safe margin.

Fixes: e02b5262fd28 ("drm/bridge: it66121: acquire reset GPIO in probe")
Cc: stable@xxxxxxxxxxxxxxx
Reviewed-by: Javier Martinez Canillas <javierm@xxxxxxxxxx>
Signed-off-by: Luca Ceresoli <luca.ceresoli@xxxxxxxxxxx>
---
Changes in v2:
- Add comment
- Link to v1: https://patch.msgid.link/20261015-drm-ite-it66121-fix-reset-v1-1-473038e06abc@xxxxxxxxxxx
---
Changes in v2:
- add comment (Javier)

FYI For items 2 and 4 above, I'm sending separate patches to make those
errors not silent [0]. Those aren't fixes, so they would be for
drm-misc-next, while this patch is for drm-misc-fixes.

[0] https://lore.kernel.org/r/20261015-drm-ite-it66121-log-probe-errors-v1-0-7fd6994e0be0@xxxxxxxxxxx
---
drivers/gpu/drm/bridge/ite-it66121.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/ite-it66121.c
index c8d0a26e8e90..f00cbe477a78 100644
--- a/drivers/gpu/drm/bridge/ite-it66121.c
+++ b/drivers/gpu/drm/bridge/ite-it66121.c
@@ -357,6 +357,8 @@ static void it66121_hw_reset(struct it66121_ctx *ctx)
gpiod_set_value(ctx->gpio_reset, 1);
msleep(20);
gpiod_set_value(ctx->gpio_reset, 0);
+ /* Post-reset delay not specified, value found by testing */
+ msleep(20);
}

static inline int it66121_preamble_ddc(struct it66121_ctx *ctx)

---
base-commit: 0720532355207f2014a98b650d19497cbe3b22f5
change-id: 20261015-drm-ite-it66121-fix-reset-f1765358a866

Best regards,
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com