diff options
| author | Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> | 2026-07-31 15:42:18 +0200 |
|---|---|---|
| committer | Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> | 2026-08-26 10:05:45 +0200 |
| commit | d51fc9d4cd6eb18ac82913d83ecf7bd8c85f71ee (patch) | |
| tree | f5059168ba3f2dfc68e13dc22b9cba51cf29948f | |
| parent | a39ac4651e3b9d2ca78b6d3dc2a81a6bd25fa616 (diff) | |
| download | linux-d51fc9d4cd6eb18ac82913d83ecf7bd8c85f71ee.tar.gz linux-d51fc9d4cd6eb18ac82913d83ecf7bd8c85f71ee.zip | |
power: sequencing: rename pwrseq_power_on/off() to pwrseq_enable/disable()
The way power sequencing works means that a call to pwrseq_power_on()
does not necessarily result in the pwrseq target being powered-on at
that time: it may have already been powered on before. Similarly: a call
to pwrseq_power_off() does not have to result in an actual powering off
of resources: there may still be other users that requested a power-on
before.
We will also introduce the concept of "non-controllable" pwrseq targets
soon which further increases the disconnect between the naming
convention and the actual semantics.
What consumers of pwrseq descriptors actually do is: they *vote* for a
powering on of a given target or retract that vote. These operations
could be called get/put in line with runtime PM but this could become
confusing since we already provide pwrseq_get/put() for a different
purpose. pwrseq_vote_on/off() also have been rejected as unusual in
the tree.
Change the name of the two functions to pwrseq_enable/disable() which
better reflects their purpose and semantics and also mirrors other
enable-counted resources like regulators and clocks. No functional change
intended.
If at any point users need to know *when* the exact power event happens,
we can provide that information in the form of a notifier.
Acked-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Acked-by: Alessio Belle <alessio.belle@imgtec.com> # imagination
Link: https://patch.msgid.link/20260731-pwrseq-vote-rename-v3-1-44e60b8be053@oss.qualcomm.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
| -rw-r--r-- | Documentation/driver-api/pwrseq.rst | 4 | ||||
| -rw-r--r-- | drivers/bluetooth/hci_qca.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/imagination/pvr_power.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/snoc.c | 6 | ||||
| -rw-r--r-- | drivers/pci/pwrctrl/generic.c | 4 | ||||
| -rw-r--r-- | drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c | 4 | ||||
| -rw-r--r-- | drivers/power/sequencing/core.c | 16 | ||||
| -rw-r--r-- | include/linux/pwrseq/consumer.h | 8 |
8 files changed, 25 insertions, 25 deletions
diff --git a/Documentation/driver-api/pwrseq.rst b/Documentation/driver-api/pwrseq.rst index ad18b2326b68..e1056d141845 100644 --- a/Documentation/driver-api/pwrseq.rst +++ b/Documentation/driver-api/pwrseq.rst @@ -50,9 +50,9 @@ Consumer interface The consumer API is aimed to be as simple as possible. The driver interested in getting a descriptor from the power sequencer should call pwrseq_get() and specify the name of the target it wants to reach in the sequence after calling -pwrseq_power_up(). The descriptor can be released by calling pwrseq_put() and +pwrseq_enable(). The descriptor can be released by calling pwrseq_put() and the consumer can request the powering down of its target with -pwrseq_power_off(). Note that there is no guarantee that pwrseq_power_off() +pwrseq_disable(). Note that there is no guarantee that pwrseq_disable() will have any effect as there may be multiple users of the underlying resources who may keep them active. diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 244447195619..1153ba9507e3 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -2256,7 +2256,7 @@ static void qca_power_off(struct hci_uart *hu) } if (power && power->pwrseq) { - pwrseq_power_off(power->pwrseq); + pwrseq_disable(power->pwrseq); set_bit(QCA_BT_OFF, &qca->flags); return; } @@ -2316,7 +2316,7 @@ static int qca_regulator_enable(struct qca_serdev *qcadev) int ret; if (power->pwrseq) - return pwrseq_power_on(power->pwrseq); + return pwrseq_enable(power->pwrseq); /* Already enabled */ if (power->vregs_on) diff --git a/drivers/gpu/drm/imagination/pvr_power.c b/drivers/gpu/drm/imagination/pvr_power.c index a71d5b35601e..eb4b6ecdf4f4 100644 --- a/drivers/gpu/drm/imagination/pvr_power.c +++ b/drivers/gpu/drm/imagination/pvr_power.c @@ -352,12 +352,12 @@ static int pvr_power_init_pwrseq(struct pvr_device *pvr_dev) static int pvr_power_on_sequence_pwrseq(struct pvr_device *pvr_dev) { - return pwrseq_power_on(pvr_dev->pwrseq); + return pwrseq_enable(pvr_dev->pwrseq); } static int pvr_power_off_sequence_pwrseq(struct pvr_device *pvr_dev) { - return pwrseq_power_off(pvr_dev->pwrseq); + return pwrseq_disable(pvr_dev->pwrseq); } const struct pvr_power_sequence_ops pvr_power_sequence_ops_pwrseq = { diff --git a/drivers/net/wireless/ath/ath10k/snoc.c b/drivers/net/wireless/ath/ath10k/snoc.c index 310650227578..f28fed89cc28 100644 --- a/drivers/net/wireless/ath/ath10k/snoc.c +++ b/drivers/net/wireless/ath/ath10k/snoc.c @@ -1025,7 +1025,7 @@ static int ath10k_hw_power_on(struct ath10k *ar) ath10k_dbg(ar, ATH10K_DBG_SNOC, "soc power on\n"); - ret = pwrseq_power_on(ar_snoc->pwrseq); + ret = pwrseq_enable(ar_snoc->pwrseq); if (ret) return ret; @@ -1042,7 +1042,7 @@ static int ath10k_hw_power_on(struct ath10k *ar) vreg_off: regulator_bulk_disable(ar_snoc->num_vregs, ar_snoc->vregs); pwrseq_off: - pwrseq_power_off(ar_snoc->pwrseq); + pwrseq_disable(ar_snoc->pwrseq); return ret; } @@ -1060,7 +1060,7 @@ static int ath10k_hw_power_off(struct ath10k *ar) ret_vreg = regulator_bulk_disable(ar_snoc->num_vregs, ar_snoc->vregs); if (ar_snoc->pwrseq) - ret_seq = pwrseq_power_off(ar_snoc->pwrseq); + ret_seq = pwrseq_disable(ar_snoc->pwrseq); return ret_vreg ? : ret_seq; } diff --git a/drivers/pci/pwrctrl/generic.c b/drivers/pci/pwrctrl/generic.c index 1ae19450a455..dc6d9796160e 100644 --- a/drivers/pci/pwrctrl/generic.c +++ b/drivers/pci/pwrctrl/generic.c @@ -30,7 +30,7 @@ static int slot_pwrctrl_power_on(struct pci_pwrctrl *pwrctrl) int ret; if (slot->pwrseq) { - pwrseq_power_on(slot->pwrseq); + pwrseq_enable(slot->pwrseq); return 0; } @@ -49,7 +49,7 @@ static int slot_pwrctrl_power_off(struct pci_pwrctrl *pwrctrl) struct slot_pwrctrl, pwrctrl); if (slot->pwrseq) { - pwrseq_power_off(slot->pwrseq); + pwrseq_disable(slot->pwrseq); return 0; } diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c b/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c index c7e4beec160a..d233800e5906 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c @@ -57,7 +57,7 @@ static int pwrseq_pwrctrl_power_on(struct pci_pwrctrl *pwrctrl) struct pwrseq_pwrctrl *pwrseq = container_of(pwrctrl, struct pwrseq_pwrctrl, pwrctrl); - return pwrseq_power_on(pwrseq->pwrseq); + return pwrseq_enable(pwrseq->pwrseq); } static int pwrseq_pwrctrl_power_off(struct pci_pwrctrl *pwrctrl) @@ -65,7 +65,7 @@ static int pwrseq_pwrctrl_power_off(struct pci_pwrctrl *pwrctrl) struct pwrseq_pwrctrl *pwrseq = container_of(pwrctrl, struct pwrseq_pwrctrl, pwrctrl); - return pwrseq_power_off(pwrseq->pwrseq); + return pwrseq_disable(pwrseq->pwrseq); } static int pwrseq_pwrctrl_probe(struct platform_device *pdev) diff --git a/drivers/power/sequencing/core.c b/drivers/power/sequencing/core.c index 02f42da91598..721e888b658d 100644 --- a/drivers/power/sequencing/core.c +++ b/drivers/power/sequencing/core.c @@ -708,7 +708,7 @@ void pwrseq_put(struct pwrseq_desc *desc) pwrseq = desc->pwrseq; if (desc->powered_on) - pwrseq_power_off(desc); + pwrseq_disable(desc); kfree(desc); module_put(pwrseq->owner); @@ -874,7 +874,7 @@ static int pwrseq_unit_disable(struct pwrseq_device *pwrseq, } /** - * pwrseq_power_on() - Issue a power-on request on behalf of the consumer + * pwrseq_enable() - Issue a power-on request on behalf of the consumer * device. * @desc: Descriptor referencing the power sequencer. * @@ -887,7 +887,7 @@ static int pwrseq_unit_disable(struct pwrseq_device *pwrseq, * Returns: * 0 on success, negative error number on failure. */ -int pwrseq_power_on(struct pwrseq_desc *desc) +int pwrseq_enable(struct pwrseq_desc *desc) { struct pwrseq_device *pwrseq; struct pwrseq_target *target; @@ -925,14 +925,14 @@ int pwrseq_power_on(struct pwrseq_desc *desc) return ret; } -EXPORT_SYMBOL_GPL(pwrseq_power_on); +EXPORT_SYMBOL_GPL(pwrseq_enable); /** - * pwrseq_power_off() - Issue a power-off request on behalf of the consumer + * pwrseq_disable() - Issue a power-off request on behalf of the consumer * device. * @desc: Descriptor referencing the power sequencer. * - * This undoes the effects of pwrseq_power_on(). It issues a power-off request + * This undoes the effects of pwrseq_enable(). It issues a power-off request * on behalf of the consumer and when the last remaining user does so, the * power-down sequence will be started. If one is in progress, the function * will block until it's complete and then return. @@ -940,7 +940,7 @@ EXPORT_SYMBOL_GPL(pwrseq_power_on); * Returns: * 0 on success, negative error number on failure. */ -int pwrseq_power_off(struct pwrseq_desc *desc) +int pwrseq_disable(struct pwrseq_desc *desc) { struct pwrseq_device *pwrseq; struct pwrseq_unit *unit; @@ -966,7 +966,7 @@ int pwrseq_power_off(struct pwrseq_desc *desc) return ret; } -EXPORT_SYMBOL_GPL(pwrseq_power_off); +EXPORT_SYMBOL_GPL(pwrseq_disable); /** * pwrseq_to_device() - Get the pwrseq device pointer from a descriptor. diff --git a/include/linux/pwrseq/consumer.h b/include/linux/pwrseq/consumer.h index 3c907c9e1885..16fad5f3e3ab 100644 --- a/include/linux/pwrseq/consumer.h +++ b/include/linux/pwrseq/consumer.h @@ -20,8 +20,8 @@ void pwrseq_put(struct pwrseq_desc *desc); struct pwrseq_desc * __must_check devm_pwrseq_get(struct device *dev, const char *target); -int pwrseq_power_on(struct pwrseq_desc *desc); -int pwrseq_power_off(struct pwrseq_desc *desc); +int pwrseq_enable(struct pwrseq_desc *desc); +int pwrseq_disable(struct pwrseq_desc *desc); struct device *pwrseq_to_device(struct pwrseq_desc *desc); @@ -43,12 +43,12 @@ devm_pwrseq_get(struct device *dev, const char *target) return ERR_PTR(-ENOSYS); } -static inline int pwrseq_power_on(struct pwrseq_desc *desc) +static inline int pwrseq_enable(struct pwrseq_desc *desc) { return -ENOSYS; } -static inline int pwrseq_power_off(struct pwrseq_desc *desc) +static inline int pwrseq_disable(struct pwrseq_desc *desc) { return -ENOSYS; } |
