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

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

regulator: Allow regulators to set the initial operating mode



This is useful when wishing to run in a fixed operating mode that isn't
the default.

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
parent fe203ddf
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -724,6 +724,23 @@ static int set_machine_constraints(struct regulator_dev *rdev,
		}
	}

	if (constraints->initial_mode) {
		if (!ops->set_mode) {
			printk(KERN_ERR "%s: no set_mode operation for %s\n",
			       __func__, name);
			ret = -EINVAL;
			goto out;
		}

		ret = ops->set_mode(rdev, constraints->initial_mode);
		if (ret < 0) {
			printk(KERN_ERR
			       "%s: failed to set initial mode for %s: %d\n",
			       __func__, name, ret);
			goto out;
		}
	}

	/* if always_on is set then turn the regulator on if it's not
	 * already on. */
	if (constraints->always_on && ops->enable &&
+4 −0
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ struct regulator_state {
 * @state_standby: State for regulator when system is suspended in standby
 *                 mode.
 * @initial_state: Suspend state to set by default.
 * @initial_mode: Mode to set at startup.
 */
struct regulation_constraints {

@@ -111,6 +112,9 @@ struct regulation_constraints {
	struct regulator_state state_standby;
	suspend_state_t initial_state; /* suspend state to set at init */

	/* mode to set on startup */
	unsigned int initial_mode;

	/* constriant flags */
	unsigned always_on:1;	/* regulator never off when system is on */
	unsigned boot_on:1;	/* bootloader/firmware enabled regulator */