提交 22a10bca 编写于 作者: S Stephen Boyd 提交者: Mark Brown

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: NStephen Boyd <sboyd@codeaurora.org>
Signed-off-by: NMark Brown <broonie@kernel.org>
上级 b787f68c
...@@ -37,6 +37,8 @@ Optional properties: ...@@ -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) ...@@ -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, ...@@ -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 { ...@@ -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 { ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册