Commit 31ca9ff6 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'regulator-fix-v6.19-merge-window' of...

Merge tag 'regulator-fix-v6.19-merge-window' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator

Pull regulator fixes from Mark Brown:
 "A few fixes that came in during the merge window, nothing too
  exciting - the one core fix improves error propagation from gpiolib
  which hopefully shouldn't actually happen but is safer"

* tag 'regulator-fix-v6.19-merge-window' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator:
  regulator: spacemit: Align input supply name with the DT binding
  regulator: fixed: Rely on the core freeing the enable GPIO
  regulator: check the return value of gpiod_set_value_cansleep()
parents 1de74115 99f0c3a6
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;
		}
	}
+4 −7
Original line number Diff line number Diff line
@@ -330,13 +330,10 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)

	drvdata->dev = devm_regulator_register(&pdev->dev, &drvdata->desc,
					       &cfg);
	if (IS_ERR(drvdata->dev)) {
		ret = dev_err_probe(&pdev->dev, PTR_ERR(drvdata->dev),
	if (IS_ERR(drvdata->dev))
		return dev_err_probe(&pdev->dev, PTR_ERR(drvdata->dev),
				     "Failed to register regulator: %ld\n",
				     PTR_ERR(drvdata->dev));
		gpiod_put(cfg.ena_gpiod);
		return ret;
	}

	platform_set_drvdata(pdev, drvdata);

+2 −2
Original line number Diff line number Diff line
@@ -87,10 +87,10 @@ static const struct linear_range p1_ldo_ranges[] = {
	}

#define P1_BUCK_DESC(_n) \
	P1_REG_DESC(BUCK, buck, _n, "vcc", 0x47, BUCK_MASK, 254, p1_buck_ranges)
	P1_REG_DESC(BUCK, buck, _n, "vin", 0x47, BUCK_MASK, 254, p1_buck_ranges)

#define P1_ALDO_DESC(_n) \
	P1_REG_DESC(ALDO, aldo, _n, "vcc", 0x5b, LDO_MASK, 117, p1_ldo_ranges)
	P1_REG_DESC(ALDO, aldo, _n, "vin", 0x5b, LDO_MASK, 117, p1_ldo_ranges)

#define P1_DLDO_DESC(_n) \
	P1_REG_DESC(DLDO, dldo, _n, "buck5", 0x67, LDO_MASK, 117, p1_ldo_ranges)