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

Commit e79055d6 authored by Mark Brown's avatar Mark Brown Committed by Liam Girdwood
Browse files

regulator: Factor out voltage constraint setup



This allows constraints to take effect on regulators that support
voltage setting but for which the board does not specify a voltage
range (for example, because it is fixed correctly at system startup).

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
parent 5b307627
Loading
Loading
Loading
Loading
+37 −27
Original line number Diff line number Diff line
@@ -672,31 +672,11 @@ static void print_constraints(struct regulator_dev *rdev)
	printk(KERN_INFO "regulator: %s: %s\n", rdev->desc->name, buf);
}

/**
 * set_machine_constraints - sets regulator constraints
 * @rdev: regulator source
 * @constraints: constraints to apply
 *
 * Allows platform initialisation code to define and constrain
 * regulator circuits e.g. valid voltage/current ranges, etc.  NOTE:
 * Constraints *must* be set by platform code in order for some
 * regulator operations to proceed i.e. set_voltage, set_current_limit,
 * set_mode.
 */
static int set_machine_constraints(struct regulator_dev *rdev,
	struct regulation_constraints *constraints)
static int machine_constraints_voltage(struct regulator_dev *rdev,
	const char *name, struct regulation_constraints *constraints)
{
	int ret = 0;
	const char *name;
	struct regulator_ops *ops = rdev->desc->ops;

	if (constraints->name)
		name = constraints->name;
	else if (rdev->desc->name)
		name = rdev->desc->name;
	else
		name = "regulator";

	/* constrain machine-level voltage specs to fit
	 * the actual range supported by this regulator.
	 */
@@ -719,14 +699,13 @@ static int set_machine_constraints(struct regulator_dev *rdev,

		/* voltage constraints are optional */
		if ((cmin == 0) && (cmax == 0))
			goto out;
			return 0;

		/* else require explicit machine-level constraints */
		if (cmin <= 0 || cmax <= 0 || cmax < cmin) {
			pr_err("%s: %s '%s' voltage constraints\n",
				       __func__, "invalid", name);
			ret = -EINVAL;
			goto out;
			return -EINVAL;
		}

		/* initial: [cmin..cmax] valid, [min_uV..max_uV] not */
@@ -748,8 +727,7 @@ static int set_machine_constraints(struct regulator_dev *rdev,
		if (max_uV < min_uV) {
			pr_err("%s: %s '%s' voltage constraints\n",
				       __func__, "unsupportable", name);
			ret = -EINVAL;
			goto out;
			return -EINVAL;
		}

		/* use regulator's subset of machine constraints */
@@ -767,6 +745,38 @@ static int set_machine_constraints(struct regulator_dev *rdev,
		}
	}

	return 0;
}

/**
 * set_machine_constraints - sets regulator constraints
 * @rdev: regulator source
 * @constraints: constraints to apply
 *
 * Allows platform initialisation code to define and constrain
 * regulator circuits e.g. valid voltage/current ranges, etc.  NOTE:
 * Constraints *must* be set by platform code in order for some
 * regulator operations to proceed i.e. set_voltage, set_current_limit,
 * set_mode.
 */
static int set_machine_constraints(struct regulator_dev *rdev,
	struct regulation_constraints *constraints)
{
	int ret = 0;
	const char *name;
	struct regulator_ops *ops = rdev->desc->ops;

	if (constraints->name)
		name = constraints->name;
	else if (rdev->desc->name)
		name = rdev->desc->name;
	else
		name = "regulator";

	ret = machine_constraints_voltage(rdev, name, constraints);
	if (ret != 0)
		goto out;

	rdev->constraints = constraints;

	/* do we need to apply the constraint voltage */