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: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Stephen Boyd
2015-06-11 17:37:03 -07:00
committed by Mark Brown
parent b787f68c36
commit 22a10bca28
4 changed files with 10 additions and 0 deletions

View File

@@ -37,6 +37,8 @@ Optional properties:
- regulator-initial-mode: initial operating mode. The set of possible operating - regulator-initial-mode: initial operating mode. The set of possible operating
modes depends on the capabilities of every hardware so each device binding modes depends on the capabilities of every hardware so each device binding
documentation explains which values the regulator supports. 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: Deprecated properties:
- regulator-compatible: If a regulator chip contains multiple - regulator-compatible: If a regulator chip contains multiple

View File

@@ -678,6 +678,8 @@ static int drms_uA_update(struct regulator_dev *rdev)
list_for_each_entry(sibling, &rdev->consumer_list, list) list_for_each_entry(sibling, &rdev->consumer_list, list)
current_uA += sibling->uA_load; current_uA += sibling->uA_load;
current_uA += rdev->constraints->system_load;
if (rdev->desc->ops->set_load) { if (rdev->desc->ops->set_load) {
/* set the optimum mode for our new total regulator load */ /* set the optimum mode for our new total regulator load */
err = rdev->desc->ops->set_load(rdev, current_uA); err = rdev->desc->ops->set_load(rdev, current_uA);

View File

@@ -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++) { for (i = 0; i < ARRAY_SIZE(regulator_states); i++) {
switch (i) { switch (i) {
case PM_SUSPEND_MEM: case PM_SUSPEND_MEM:

View File

@@ -75,6 +75,7 @@ struct regulator_state {
* *
* @min_uA: Smallest current consumers may set. * @min_uA: Smallest current consumers may set.
* @max_uA: Largest 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_modes_mask: Mask of modes which may be configured by consumers.
* @valid_ops_mask: Operations which may be performed by consumers. * @valid_ops_mask: Operations which may be performed by consumers.
@@ -112,6 +113,8 @@ struct regulation_constraints {
int min_uA; int min_uA;
int max_uA; int max_uA;
int system_load;
/* valid regulator operating modes for this machine */ /* valid regulator operating modes for this machine */
unsigned int valid_modes_mask; unsigned int valid_modes_mask;