|
@@ -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 */
|