Message ID | 20210718104901.454843-4-dmitry.baryshkov@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | clk: qcom: use power-domain for sm8250's clock controllers | expand |
On Sun, 18 Jul 2021 at 12:49, Dmitry Baryshkov <dmitry.baryshkov@linaro.org> wrote: > > Add helper function handling typical driver action: call > pm_runtime_enable at the probe() time and disable it during remove(). > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > --- > drivers/base/power/runtime.c | 17 +++++++++++++++++ > include/linux/pm_runtime.h | 4 ++++ > 2 files changed, 21 insertions(+) First, this needs to be sent to the correct maintainers (Rafael) and also the mailing list (linux-pm). Second, to not stall the series by $subject patch as it will likely need to be funneled through Rafael's tree, perhaps it's just better to do the "open coding" in the qcom drivers for now. Kind regards Uffe > > diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c > index 8a66eaf731e4..ec94049442b9 100644 > --- a/drivers/base/power/runtime.c > +++ b/drivers/base/power/runtime.c > @@ -1447,6 +1447,23 @@ void pm_runtime_enable(struct device *dev) > } > EXPORT_SYMBOL_GPL(pm_runtime_enable); > > +static void pm_runtime_disable_action(void *data) > +{ > + pm_runtime_disable(data); > +} > + > +/** > + * devm_pm_runtime_enable - devres-enabled version of pm_runtime_enable. > + * @dev: Device to handle. > + */ > +int devm_pm_runtime_enable(struct device *dev) > +{ > + pm_runtime_enable(dev); > + > + return devm_add_action_or_reset(dev, pm_runtime_disable_action, dev); > +} > +EXPORT_SYMBOL_GPL(devm_pm_runtime_enable); > + > /** > * pm_runtime_forbid - Block runtime PM of a device. > * @dev: Device to handle. > diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h > index aab8b35e9f8a..222da43b7096 100644 > --- a/include/linux/pm_runtime.h > +++ b/include/linux/pm_runtime.h > @@ -59,6 +59,8 @@ extern void pm_runtime_put_suppliers(struct device *dev); > extern void pm_runtime_new_link(struct device *dev); > extern void pm_runtime_drop_link(struct device_link *link); > > +extern int devm_pm_runtime_enable(struct device *dev); > + > /** > * pm_runtime_get_if_in_use - Conditionally bump up runtime PM usage counter. > * @dev: Target device. > @@ -253,6 +255,8 @@ static inline void __pm_runtime_disable(struct device *dev, bool c) {} > static inline void pm_runtime_allow(struct device *dev) {} > static inline void pm_runtime_forbid(struct device *dev) {} > > +static inline int devm_pm_runtime_enable(struct device *dev) { return 0; } > + > static inline void pm_suspend_ignore_children(struct device *dev, bool enable) {} > static inline void pm_runtime_get_noresume(struct device *dev) {} > static inline void pm_runtime_put_noidle(struct device *dev) {} > -- > 2.30.2 >
On 22/07/2021 13:26, Ulf Hansson wrote: > On Sun, 18 Jul 2021 at 12:49, Dmitry Baryshkov > <dmitry.baryshkov@linaro.org> wrote: >> >> Add helper function handling typical driver action: call >> pm_runtime_enable at the probe() time and disable it during remove(). >> >> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> >> --- >> drivers/base/power/runtime.c | 17 +++++++++++++++++ >> include/linux/pm_runtime.h | 4 ++++ >> 2 files changed, 21 insertions(+) > > First, this needs to be sent to the correct maintainers (Rafael) and > also the mailing list (linux-pm). > > Second, to not stall the series by $subject patch as it will likely > need to be funneled through Rafael's tree, perhaps it's just better to > do the "open coding" in the qcom drivers for now. Ack > > Kind regards > Uffe > >> >> diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c >> index 8a66eaf731e4..ec94049442b9 100644 >> --- a/drivers/base/power/runtime.c >> +++ b/drivers/base/power/runtime.c >> @@ -1447,6 +1447,23 @@ void pm_runtime_enable(struct device *dev) >> } >> EXPORT_SYMBOL_GPL(pm_runtime_enable); >> >> +static void pm_runtime_disable_action(void *data) >> +{ >> + pm_runtime_disable(data); >> +} >> + >> +/** >> + * devm_pm_runtime_enable - devres-enabled version of pm_runtime_enable. >> + * @dev: Device to handle. >> + */ >> +int devm_pm_runtime_enable(struct device *dev) >> +{ >> + pm_runtime_enable(dev); >> + >> + return devm_add_action_or_reset(dev, pm_runtime_disable_action, dev); >> +} >> +EXPORT_SYMBOL_GPL(devm_pm_runtime_enable); >> + >> /** >> * pm_runtime_forbid - Block runtime PM of a device. >> * @dev: Device to handle. >> diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h >> index aab8b35e9f8a..222da43b7096 100644 >> --- a/include/linux/pm_runtime.h >> +++ b/include/linux/pm_runtime.h >> @@ -59,6 +59,8 @@ extern void pm_runtime_put_suppliers(struct device *dev); >> extern void pm_runtime_new_link(struct device *dev); >> extern void pm_runtime_drop_link(struct device_link *link); >> >> +extern int devm_pm_runtime_enable(struct device *dev); >> + >> /** >> * pm_runtime_get_if_in_use - Conditionally bump up runtime PM usage counter. >> * @dev: Target device. >> @@ -253,6 +255,8 @@ static inline void __pm_runtime_disable(struct device *dev, bool c) {} >> static inline void pm_runtime_allow(struct device *dev) {} >> static inline void pm_runtime_forbid(struct device *dev) {} >> >> +static inline int devm_pm_runtime_enable(struct device *dev) { return 0; } >> + >> static inline void pm_suspend_ignore_children(struct device *dev, bool enable) {} >> static inline void pm_runtime_get_noresume(struct device *dev) {} >> static inline void pm_runtime_put_noidle(struct device *dev) {} >> -- >> 2.30.2 >> -- With best wishes Dmitry
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index 8a66eaf731e4..ec94049442b9 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -1447,6 +1447,23 @@ void pm_runtime_enable(struct device *dev) } EXPORT_SYMBOL_GPL(pm_runtime_enable); +static void pm_runtime_disable_action(void *data) +{ + pm_runtime_disable(data); +} + +/** + * devm_pm_runtime_enable - devres-enabled version of pm_runtime_enable. + * @dev: Device to handle. + */ +int devm_pm_runtime_enable(struct device *dev) +{ + pm_runtime_enable(dev); + + return devm_add_action_or_reset(dev, pm_runtime_disable_action, dev); +} +EXPORT_SYMBOL_GPL(devm_pm_runtime_enable); + /** * pm_runtime_forbid - Block runtime PM of a device. * @dev: Device to handle. diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h index aab8b35e9f8a..222da43b7096 100644 --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h @@ -59,6 +59,8 @@ extern void pm_runtime_put_suppliers(struct device *dev); extern void pm_runtime_new_link(struct device *dev); extern void pm_runtime_drop_link(struct device_link *link); +extern int devm_pm_runtime_enable(struct device *dev); + /** * pm_runtime_get_if_in_use - Conditionally bump up runtime PM usage counter. * @dev: Target device. @@ -253,6 +255,8 @@ static inline void __pm_runtime_disable(struct device *dev, bool c) {} static inline void pm_runtime_allow(struct device *dev) {} static inline void pm_runtime_forbid(struct device *dev) {} +static inline int devm_pm_runtime_enable(struct device *dev) { return 0; } + static inline void pm_suspend_ignore_children(struct device *dev, bool enable) {} static inline void pm_runtime_get_noresume(struct device *dev) {} static inline void pm_runtime_put_noidle(struct device *dev) {}
Add helper function handling typical driver action: call pm_runtime_enable at the probe() time and disable it during remove(). Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> --- drivers/base/power/runtime.c | 17 +++++++++++++++++ include/linux/pm_runtime.h | 4 ++++ 2 files changed, 21 insertions(+)