Unverified Commit 84c8097e authored by Bartosz Golaszewski's avatar Bartosz Golaszewski Committed by Mark Brown
Browse files

regulator: check the return value of gpiod_set_value_cansleep()



gpiod_set_value_cansleep() now returns an integer and can indicate
failures in the GPIO layer. Propagate any potential errors to regulator
core.

Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Link: https://patch.msgid.link/20251203084737.15891-1-bartosz.golaszewski@oss.qualcomm.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 81d43113
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -2823,14 +2823,18 @@ static void regulator_ena_gpio_free(struct regulator_dev *rdev)
static int regulator_ena_gpio_ctrl(struct regulator_dev *rdev, bool enable)
{
	struct regulator_enable_gpio *pin = rdev->ena_pin;
	int ret;

	if (!pin)
		return -EINVAL;

	if (enable) {
		/* Enable GPIO at initial use */
		if (pin->enable_count == 0)
			gpiod_set_value_cansleep(pin->gpiod, 1);
		if (pin->enable_count == 0) {
			ret = gpiod_set_value_cansleep(pin->gpiod, 1);
			if (ret)
				return ret;
		}

		pin->enable_count++;
	} else {
@@ -2841,7 +2845,10 @@ static int regulator_ena_gpio_ctrl(struct regulator_dev *rdev, bool enable)

		/* Disable GPIO if not used */
		if (pin->enable_count <= 1) {
			gpiod_set_value_cansleep(pin->gpiod, 0);
			ret = gpiod_set_value_cansleep(pin->gpiod, 0);
			if (ret)
				return ret;

			pin->enable_count = 0;
		}
	}