Skip to content

Commit 63d00be

Browse files
storulfrafaeljw
authored andcommitted
PM: runtime: Allow unassigned ->runtime_suspend|resume callbacks
We are currently allowing ->runtime_idle() callbacks to be unassigned without returning an error code from rpm_idle(). This has been useful to avoid boilerplate code in drivers. Let's take this approach a step further, by allowing also unassigned ->runtime_suspend|resume() callbacks. In this way, a consumer/supplier device link can be used to let a consumer device be power managed through its supplier device, without requiring assigned ->runtime_suspend|resume() callbacks for the consumer device, for example. Signed-off-by: Ulf Hansson <[email protected]> Acked-by: Alan Stern <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent 5a2bd1b commit 63d00be

File tree

1 file changed

+3
-5
lines changed

1 file changed

+3
-5
lines changed

drivers/base/power/runtime.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ static void rpm_suspend_suppliers(struct device *dev)
345345
static int __rpm_callback(int (*cb)(struct device *), struct device *dev)
346346
__releases(&dev->power.lock) __acquires(&dev->power.lock)
347347
{
348-
int retval, idx;
348+
int retval = 0, idx;
349349
bool use_links = dev->power.links_count > 0;
350350

351351
if (dev->power.irq_safe) {
@@ -373,7 +373,8 @@ static int __rpm_callback(int (*cb)(struct device *), struct device *dev)
373373
}
374374
}
375375

376-
retval = cb(dev);
376+
if (cb)
377+
retval = cb(dev);
377378

378379
if (dev->power.irq_safe) {
379380
spin_lock(&dev->power.lock);
@@ -484,9 +485,6 @@ static int rpm_callback(int (*cb)(struct device *), struct device *dev)
484485
{
485486
int retval;
486487

487-
if (!cb)
488-
return -ENOSYS;
489-
490488
if (dev->power.memalloc_noio) {
491489
unsigned int noio_flag;
492490

0 commit comments

Comments
 (0)