Commit 45fe4592 authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Linus Walleij
Browse files

pinctrl: rockchip: Fix configuring a deferred pin



Commit e2c58cbe ("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: default avatarDavid Lechner <dlechner@baylibre.com>
Closes: https://lore.kernel.org/r/f5b38942-a584-4e78-a893-de4a219070b2@baylibre.com/


Fixes: e2c58cbe ("pinctrl: rockchip: Simplify locking with scoped_guard()")
Signed-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: default avatarLinus Walleij <linusw@kernel.org>
parent fd5bed79
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -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,
				if (!gpio || !gpio->direction_output)
					return rockchip_pinconf_defer_pin(bank,
									  pin - bank->pin_base,
									  param, arg);
					if (rc)
						return rc;
					break;
				}
			}
		}