Thread (47 messages) 47 messages, 9 authors, 5d ago

Re: [PATCH v7 08/15] gpiolib: regmap: add write_data_after_dir quirk

From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: 2026-09-15 15:08:11
Also in: linux-clk, linux-devicetree, linux-gpio, linux-serial, lkml

On Tue, Sep 15, 2026 at 07:15:38PM +0800, Long Zhao via B4 Relay wrote:
Some controllers ignore data-register writes while a line is still an
input. Optionally write the output value again after switching the
direction, matching the existing PL061 behaviour.
...
-	gpio_regmap_set(chip, offset, value);
+	ret = gpio_regmap_set(chip, offset, value);
+	if (ret)
+		return ret;
I think that this might lead to regressions when the end driver just leaves
the output in the previous state in case of errors. In any case, even if this
is a correct update, it needs to be done separately with the justification
that shows that all current users won't have regressions or the regression is
actually a fix of the behaviour.
+	ret = gpio_regmap_set_direction(chip, offset, true);
+	if (ret)
+		return ret;
 
-	return gpio_regmap_set_direction(chip, offset, true);
+	/*
+	 * gpio value is set again, because pl061 doesn't allow to set value of
+	 * a gpio pin before configuring it in OUT mode.
+	 */
+	if (gpio->write_data_after_dir)
+		return gpio_regmap_set(chip, offset, value);
Taking the above into account I'm not sure if we want the inconsistency with
the above. Perhaps also ignore the returned value for now?
+	return 0;
-- 
With Best Regards,
Andy Shevchenko


Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help