Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57f66b78 authored by Stephen Boyd's avatar Stephen Boyd Committed by Mark Brown
Browse files

regulator: Add soft start support



Some regulators support a "soft start" feature where the voltage
ramps up slowly when the regulator is enabled. Add an op
(set_soft_start) and a DT property + constraint to support this.

Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 23c779b9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ Optional properties:
  design requires. This property describes the total system ramp time
  required due to the combination of internal ramping of the regulator itself,
  and board design issues such as trace capacitance and load on the supply.
- regulator-soft-start: Enable soft start so that voltage ramps slowly
- regulator-state-mem sub-root node for Suspend-to-RAM mode
  : suspend to memory, the device goes to sleep, but all data stored in memory,
  only some external interrupt can wake the device.
+8 −0
Original line number Diff line number Diff line
@@ -1059,6 +1059,14 @@ static int set_machine_constraints(struct regulator_dev *rdev,
		}
	}

	if (rdev->constraints->soft_start && ops->set_soft_start) {
		ret = ops->set_soft_start(rdev);
		if (ret < 0) {
			rdev_err(rdev, "failed to set soft start\n");
			goto out;
		}
	}

	print_constraints(rdev);
	return 0;
out:
+3 −0
Original line number Diff line number Diff line
@@ -84,6 +84,9 @@ static void of_get_regulation_constraints(struct device_node *np,
	if (!ret)
		constraints->enable_time = pval;

	constraints->soft_start = of_property_read_bool(np,
					"regulator-soft-start");

	if (!of_property_read_u32(np, "regulator-initial-mode", &pval)) {
		if (desc && desc->of_map_mode) {
			ret = desc->of_map_mode(pval);
+2 −0
Original line number Diff line number Diff line
@@ -161,6 +161,8 @@ struct regulator_ops {
				     unsigned int old_selector,
				     unsigned int new_selector);

	int (*set_soft_start) (struct regulator_dev *);

	/* report regulator status ... most other accessors report
	 * control inputs, this reports results of combining inputs
	 * from Linux (and other sources) with the actual load.
+1 −0
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ struct regulation_constraints {
	unsigned boot_on:1;	/* bootloader/firmware enabled regulator */
	unsigned apply_uV:1;	/* apply uV constraint if min == max */
	unsigned ramp_disable:1; /* disable ramp delay */
	unsigned soft_start:1;	/* ramp voltage slowly */
	unsigned pull_down:1;	/* pull down resistor when regulator off */
};