diff mbox series

[v5,3/9] PM: runtime: add devm_pm_runtime_enable helper

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

Commit Message

Dmitry Baryshkov July 18, 2021, 10:48 a.m. UTC
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(+)

Comments

Ulf Hansson July 22, 2021, 10:26 a.m. UTC | #1
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

>
Dmitry Baryshkov July 27, 2021, 8:12 p.m. UTC | #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 mbox series

Patch

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) {}