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:
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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:
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user