All of lore.kernel.org
 help / color / mirror / Atom feed
From: Judith Mendez <jm@ti.com>
To: Judith Mendez <jm@ti.com>, Tom Rini <trini@konsulko.com>,
	Simon Glass <sjg@chromium.org>
Cc: Francois Berder <fberder@outlook.fr>, <u-boot@lists.denx.de>
Subject: [PATCH] gpio: pca953x: Add GPIO settle delay
Date: Fri, 10 Jul 2026 18:04:09 -0500	[thread overview]
Message-ID: <20260710230409.147210-1-jm@ti.com> (raw)

Some board designs have slow RC circuits on GPIO outputs controlled by
PCA953X I2C expanders. On some board designs, pin voltage transitions
can take significant time after I2C write command completes.

Add an optional "gpio-settle-delay-ms" device tree property for the
pca953x driver to add a delay after I2C write if specified, allowing to
compensate for slow RC circuits.

Signed-off-by: Judith Mendez <jm@ti.com>
---
 drivers/gpio/pca953x_gpio.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpio/pca953x_gpio.c b/drivers/gpio/pca953x_gpio.c
index 965a5fcf30b..54b957069c9 100644
--- a/drivers/gpio/pca953x_gpio.c
+++ b/drivers/gpio/pca953x_gpio.c
@@ -28,6 +28,7 @@
 #include <dm/device_compat.h>
 #include <dt-bindings/gpio/gpio.h>
 #include <linux/bitops.h>
+#include <linux/delay.h>
 
 #define PCA953X_INPUT           0
 #define PCA953X_OUTPUT          1
@@ -89,6 +90,7 @@ static const struct pca95xx_reg pca957x_regs = {
  * @reg_output: array to hold the value of output registers
  * @reg_direction: array to hold the value of direction registers
  * @regs: struct to hold the registers addresses
+ * @settle_delay_ms: GPIO pin settle delay in milliseconds
  */
 struct pca953x_info {
 	struct udevice *dev;
@@ -100,6 +102,7 @@ struct pca953x_info {
 	u8 reg_output[MAX_BANK];
 	u8 reg_direction[MAX_BANK];
 	const struct pca95xx_reg *regs;
+	u32 settle_delay_ms;
 };
 
 static int pca953x_write_single(struct udevice *dev, int reg, u8 val,
@@ -116,6 +119,9 @@ static int pca953x_write_single(struct udevice *dev, int reg, u8 val,
 		return ret;
 	}
 
+	if (info->settle_delay_ms)
+		mdelay(info->settle_delay_ms);
+
 	return 0;
 }
 
@@ -333,6 +339,8 @@ static int pca953x_probe(struct udevice *dev)
 
 	info->bank_count = DIV_ROUND_UP(info->gpio_count, BANK_SZ);
 
+	info->settle_delay_ms = dev_read_u32_default(dev, "gpio-settle-delay-ms", 0);
+
 	ret = pca953x_read_regs(dev, info->regs->output, info->reg_output);
 	if (ret) {
 		dev_err(dev, "Error reading output register\n");
-- 
2.54.0


             reply	other threads:[~2026-07-10 23:04 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-10 23:04 Judith Mendez [this message]
2026-07-13  7:07 ` [PATCH] gpio: pca953x: Add GPIO settle delay Francesco Dolcini
2026-07-13 20:48   ` Mendez, Judith
2026-07-13 12:00 ` Kathpalia, Tanmay
2026-07-13 20:49   ` Mendez, Judith

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260710230409.147210-1-jm@ti.com \
    --to=jm@ti.com \
    --cc=fberder@outlook.fr \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.