[PATCH v8 13/13] powercap: arm_scmi: Synthetic zone enable/disable
Philip Radford <[email protected]> Wed, 1 Jul 2026 12:57:47 +0000
| Newsgroups | org.kernel.vger.arm-scmi,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm |
|---|---|
| Message-ID | <[email protected]> |
The synthetic instance root contols the same set of top-level SCMI domains already handled by the control-type enable/disable helpers previously introduced. Add synthetic zone enabled attribute to the existing per-instance helpers instead of duplicating the enable-state tracking and rollback logic. Signed-off-by: Philip Radford <[email protected]> --- drivers/powercap/arm_scmi_powercap.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/powercap/arm_scmi_powercap.c b/drivers/powercap/arm_scmi_powercap.c index e1bad4b19990..23708f9934d4 100644 --- a/drivers/powercap/arm_scmi_powercap.c +++ b/drivers/powercap/arm_scmi_powercap.c @@ -458,10 +458,34 @@ static int instance_root_get_constraint(struct powercap_zone *pz, int cid, u64 * return -EOPNOTSUPP; } +static int instance_root_set_enable(struct powercap_zone *pz, bool mode) +{ + struct scmi_powercap_root *pr = to_scmi_powercap_root(pz); + + return scmi_powercap_set_root_children_enable_state(pr, mode); +} + +static int instance_root_get_enable(struct powercap_zone *pz, bool *mode) +{ + struct scmi_powercap_root *pr = to_scmi_powercap_root(pz); + int ret; + + if (!mode) + return -EINVAL; + + ret = scmi_powercap_read_root_children_enable_state(pr, mode); + if (!ret) + pr->enabled = *mode; + + return ret; +} + static const struct powercap_zone_ops instance_root_ops = { .get_max_power_range_uw = scmi_powercap_get_max_power_range_uw, .get_power_uw = instance_root_get_power_uw, .release = instance_root_release, + .set_enable = instance_root_set_enable, + .get_enable = instance_root_get_enable, }; static const struct powercap_zone_constraint_ops instance_root_const_ops = { -- 2.25.1