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

Commit 22a10bca authored by Stephen Boyd's avatar Stephen Boyd Committed by Mark Brown
Browse files

regulator: Add system_load constraint



Some regulators have a fixed load that isn't captured by
consumers that the kernel knows about. Add a constraint to
support this.

Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent b787f68c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ Optional properties:
- regulator-initial-mode: initial operating mode. The set of possible operating
  modes depends on the capabilities of every hardware so each device binding
  documentation explains which values the regulator supports.
- regulator-system-load: Load in uA present on regulator that is not captured by
  any consumer request.

Deprecated properties:
- regulator-compatible: If a regulator chip contains multiple
+2 −0
Original line number Diff line number Diff line
@@ -678,6 +678,8 @@ static int drms_uA_update(struct regulator_dev *rdev)
	list_for_each_entry(sibling, &rdev->consumer_list, list)
		current_uA += sibling->uA_load;

	current_uA += rdev->constraints->system_load;

	if (rdev->desc->ops->set_load) {
		/* set the optimum mode for our new total regulator load */
		err = rdev->desc->ops->set_load(rdev, current_uA);
+3 −0
Original line number Diff line number Diff line
@@ -95,6 +95,9 @@ static void of_get_regulation_constraints(struct device_node *np,
		}
	}

	if (!of_property_read_u32(np, "regulator-system-load", &pval))
		constraints->system_load = pval;

	for (i = 0; i < ARRAY_SIZE(regulator_states); i++) {
		switch (i) {
		case PM_SUSPEND_MEM:
+3 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ struct regulator_state {
 *
 * @min_uA: Smallest current consumers may set.
 * @max_uA: Largest current consumers may set.
 * @system_load: Load that isn't captured by any consumer requests.
 *
 * @valid_modes_mask: Mask of modes which may be configured by consumers.
 * @valid_ops_mask: Operations which may be performed by consumers.
@@ -112,6 +113,8 @@ struct regulation_constraints {
	int min_uA;
	int max_uA;

	int system_load;

	/* valid regulator operating modes for this machine */
	unsigned int valid_modes_mask;