Skip to content

Commit 73db799

Browse files
Bence Csókásrafaeljw
authored andcommitted
PM: runtime: Add new devm functions
Add `devm_pm_runtime_set_active_enabled()` and `devm_pm_runtime_get_noresume()` for simplifying common cases in drivers. Signed-off-by: Bence Csókás <csokas.bence@prolan.hu> Link: https://patch.msgid.link/20250327195928.680771-3-csokas.bence@prolan.hu Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent b443265 commit 73db799

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

drivers/base/power/runtime.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1568,6 +1568,32 @@ void pm_runtime_enable(struct device *dev)
15681568
}
15691569
EXPORT_SYMBOL_GPL(pm_runtime_enable);
15701570

1571+
static void pm_runtime_set_suspended_action(void *data)
1572+
{
1573+
pm_runtime_set_suspended(data);
1574+
}
1575+
1576+
/**
1577+
* devm_pm_runtime_set_active_enabled - set_active version of devm_pm_runtime_enable.
1578+
*
1579+
* @dev: Device to handle.
1580+
*/
1581+
int devm_pm_runtime_set_active_enabled(struct device *dev)
1582+
{
1583+
int err;
1584+
1585+
err = pm_runtime_set_active(dev);
1586+
if (err)
1587+
return err;
1588+
1589+
err = devm_add_action_or_reset(dev, pm_runtime_set_suspended_action, dev);
1590+
if (err)
1591+
return err;
1592+
1593+
return devm_pm_runtime_enable(dev);
1594+
}
1595+
EXPORT_SYMBOL_GPL(devm_pm_runtime_set_active_enabled);
1596+
15711597
static void pm_runtime_disable_action(void *data)
15721598
{
15731599
pm_runtime_dont_use_autosuspend(data);
@@ -1590,6 +1616,24 @@ int devm_pm_runtime_enable(struct device *dev)
15901616
}
15911617
EXPORT_SYMBOL_GPL(devm_pm_runtime_enable);
15921618

1619+
static void pm_runtime_put_noidle_action(void *data)
1620+
{
1621+
pm_runtime_put_noidle(data);
1622+
}
1623+
1624+
/**
1625+
* devm_pm_runtime_get_noresume - devres-enabled version of pm_runtime_get_noresume.
1626+
*
1627+
* @dev: Device to handle.
1628+
*/
1629+
int devm_pm_runtime_get_noresume(struct device *dev)
1630+
{
1631+
pm_runtime_get_noresume(dev);
1632+
1633+
return devm_add_action_or_reset(dev, pm_runtime_put_noidle_action, dev);
1634+
}
1635+
EXPORT_SYMBOL_GPL(devm_pm_runtime_get_noresume);
1636+
15931637
/**
15941638
* pm_runtime_forbid - Block runtime PM of a device.
15951639
* @dev: Device to handle.

include/linux/pm_runtime.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,9 @@ extern void pm_runtime_new_link(struct device *dev);
9696
extern void pm_runtime_drop_link(struct device_link *link);
9797
extern void pm_runtime_release_supplier(struct device_link *link);
9898

99+
int devm_pm_runtime_set_active_enabled(struct device *dev);
99100
extern int devm_pm_runtime_enable(struct device *dev);
101+
int devm_pm_runtime_get_noresume(struct device *dev);
100102

101103
/**
102104
* pm_suspend_ignore_children - Set runtime PM behavior regarding children.
@@ -294,7 +296,9 @@ static inline bool pm_runtime_blocked(struct device *dev) { return true; }
294296
static inline void pm_runtime_allow(struct device *dev) {}
295297
static inline void pm_runtime_forbid(struct device *dev) {}
296298

299+
static inline int devm_pm_runtime_set_active_enabled(struct device *dev) { return 0; }
297300
static inline int devm_pm_runtime_enable(struct device *dev) { return 0; }
301+
static inline int devm_pm_runtime_get_noresume(struct device *dev) { return 0; }
298302

299303
static inline void pm_suspend_ignore_children(struct device *dev, bool enable) {}
300304
static inline void pm_runtime_get_noresume(struct device *dev) {}

0 commit comments

Comments
 (0)