[PATCH] pinctrl: rockchip: Fix configuring a deferred pin

Krzysztof Kozlowski posted 1 patch 1 month, 3 weeks ago
drivers/pinctrl/pinctrl-rockchip.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
[PATCH] pinctrl: rockchip: Fix configuring a deferred pin
Posted by Krzysztof Kozlowski 1 month, 3 weeks ago
Commit e2c58cbe3aff ("pinctrl: rockchip: Simplify locking with
scoped_guard()") added a scoped_guard() over existing code containing a
"break" instruction.  That "break" was for the outer (existing)
for-loop, which now exits inner, scoped_guard() loop.  If GPIO driver
did not probe, then driver will not bail out, but instead continue to
configure the pin.

Fix the issue by simplifying the code - the break in original code was
leading directly to end of the function returning 0, thus we can simply
return here rockchip_pinconf_defer_pin status.

Reported-by: David Lechner <dlechner@baylibre.com>
Closes: https://lore.kernel.org/r/f5b38942-a584-4e78-a893-de4a219070b2@baylibre.com/
Fixes: e2c58cbe3aff ("pinctrl: rockchip: Simplify locking with scoped_guard()")
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>

---

Offending commit was introduced in v7.0-rc1

I also checked few other of my commits for similar error.
---
 drivers/pinctrl/pinctrl-rockchip.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index 816823403e97..4f2e02322508 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -3640,14 +3640,10 @@ static int rockchip_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
 			 * or the gpio driver hasn't probed yet.
 			 */
 			scoped_guard(mutex, &bank->deferred_lock) {
-				if (!gpio || !gpio->direction_output) {
-					rc = rockchip_pinconf_defer_pin(bank,
-									pin - bank->pin_base,
-									param, arg);
-					if (rc)
-						return rc;
-					break;
-				}
+				if (!gpio || !gpio->direction_output)
+					return rockchip_pinconf_defer_pin(bank,
+									  pin - bank->pin_base,
+									  param, arg);
 			}
 		}
 
-- 
2.51.0
Re: [PATCH] pinctrl: rockchip: Fix configuring a deferred pin
Posted by Linus Walleij 1 month, 3 weeks ago
On Mon, Feb 23, 2026 at 11:57 AM Krzysztof Kozlowski
<krzysztof.kozlowski@oss.qualcomm.com> wrote:

> Commit e2c58cbe3aff ("pinctrl: rockchip: Simplify locking with
> scoped_guard()") added a scoped_guard() over existing code containing a
> "break" instruction.  That "break" was for the outer (existing)
> for-loop, which now exits inner, scoped_guard() loop.  If GPIO driver
> did not probe, then driver will not bail out, but instead continue to
> configure the pin.
>
> Fix the issue by simplifying the code - the break in original code was
> leading directly to end of the function returning 0, thus we can simply
> return here rockchip_pinconf_defer_pin status.
>
> Reported-by: David Lechner <dlechner@baylibre.com>
> Closes: https://lore.kernel.org/r/f5b38942-a584-4e78-a893-de4a219070b2@baylibre.com/
> Fixes: e2c58cbe3aff ("pinctrl: rockchip: Simplify locking with scoped_guard()")
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>

Patch applied for fixes!

Yours,
Linus Walleij