@@ -337,6 +337,20 @@ static inline void pm_runtime_release_supplier(struct device_link *link) {}
337
337
* Invoke the "idle check" callback of @dev and, depending on its return value,
338
338
* set up autosuspend of @dev or suspend it (depending on whether or not
339
339
* autosuspend has been enabled for it).
340
+ *
341
+ * Return:
342
+ * * 0: Success.
343
+ * * -EINVAL: Runtime PM error.
344
+ * * -EACCES: Runtime PM disabled.
345
+ * * -EAGAIN: Runtime PM usage_count non-zero, Runtime PM status change ongoing
346
+ * or device not in %RPM_ACTIVE state.
347
+ * * -EBUSY: Runtime PM child_count non-zero.
348
+ * * -EPERM: Device PM QoS resume latency 0.
349
+ * * -EINPROGRESS: Suspend already in progress.
350
+ * * -ENOSYS: CONFIG_PM not enabled.
351
+ * * 1: Device already suspended.
352
+ * Other values and conditions for the above values are possible as returned by
353
+ * Runtime PM idle and suspend callbacks.
340
354
*/
341
355
static inline int pm_runtime_idle (struct device * dev )
342
356
{
@@ -346,21 +360,48 @@ static inline int pm_runtime_idle(struct device *dev)
346
360
/**
347
361
* pm_runtime_suspend - Suspend a device synchronously.
348
362
* @dev: Target device.
363
+ *
364
+ * Return:
365
+ * * 0: Success.
366
+ * * -EINVAL: Runtime PM error.
367
+ * * -EACCES: Runtime PM disabled.
368
+ * * -EAGAIN: Runtime PM usage_count non-zero or Runtime PM status change ongoing.
369
+ * * -EBUSY: Runtime PM child_count non-zero.
370
+ * * -EPERM: Device PM QoS resume latency 0.
371
+ * * -ENOSYS: CONFIG_PM not enabled.
372
+ * * 1: Device already suspended.
373
+ * Other values and conditions for the above values are possible as returned by
374
+ * Runtime PM suspend callbacks.
349
375
*/
350
376
static inline int pm_runtime_suspend (struct device * dev )
351
377
{
352
378
return __pm_runtime_suspend (dev , 0 );
353
379
}
354
380
355
381
/**
356
- * pm_runtime_autosuspend - Set up autosuspend of a device or suspend it.
382
+ * pm_runtime_autosuspend - Update the last access time and set up autosuspend
383
+ * of a device.
357
384
* @dev: Target device.
358
385
*
359
- * Set up autosuspend of @dev or suspend it (depending on whether or not
360
- * autosuspend is enabled for it) without engaging its "idle check" callback.
386
+ * First update the last access time, then set up autosuspend of @dev or suspend
387
+ * it (depending on whether or not autosuspend is enabled for it) without
388
+ * engaging its "idle check" callback.
389
+ *
390
+ * Return:
391
+ * * 0: Success.
392
+ * * -EINVAL: Runtime PM error.
393
+ * * -EACCES: Runtime PM disabled.
394
+ * * -EAGAIN: Runtime PM usage_count non-zero or Runtime PM status change ongoing.
395
+ * * -EBUSY: Runtime PM child_count non-zero.
396
+ * * -EPERM: Device PM QoS resume latency 0.
397
+ * * -ENOSYS: CONFIG_PM not enabled.
398
+ * * 1: Device already suspended.
399
+ * Other values and conditions for the above values are possible as returned by
400
+ * Runtime PM suspend callbacks.
361
401
*/
362
402
static inline int pm_runtime_autosuspend (struct device * dev )
363
403
{
404
+ pm_runtime_mark_last_busy (dev );
364
405
return __pm_runtime_suspend (dev , RPM_AUTO );
365
406
}
366
407
@@ -379,6 +420,18 @@ static inline int pm_runtime_resume(struct device *dev)
379
420
*
380
421
* Queue up a work item to run an equivalent of pm_runtime_idle() for @dev
381
422
* asynchronously.
423
+ *
424
+ * Return:
425
+ * * 0: Success.
426
+ * * -EINVAL: Runtime PM error.
427
+ * * -EACCES: Runtime PM disabled.
428
+ * * -EAGAIN: Runtime PM usage_count non-zero, Runtime PM status change ongoing
429
+ * or device not in %RPM_ACTIVE state.
430
+ * * -EBUSY: Runtime PM child_count non-zero.
431
+ * * -EPERM: Device PM QoS resume latency 0.
432
+ * * -EINPROGRESS: Suspend already in progress.
433
+ * * -ENOSYS: CONFIG_PM not enabled.
434
+ * * 1: Device already suspended.
382
435
*/
383
436
static inline int pm_request_idle (struct device * dev )
384
437
{
@@ -395,14 +448,27 @@ static inline int pm_request_resume(struct device *dev)
395
448
}
396
449
397
450
/**
398
- * pm_request_autosuspend - Queue up autosuspend of a device.
451
+ * pm_request_autosuspend - Update the last access time and queue up autosuspend
452
+ * of a device.
399
453
* @dev: Target device.
400
454
*
401
- * Queue up a work item to run an equivalent pm_runtime_autosuspend() for @dev
402
- * asynchronously.
455
+ * Update the last access time of a device and queue up a work item to run an
456
+ * equivalent pm_runtime_autosuspend() for @dev asynchronously.
457
+ *
458
+ * Return:
459
+ * * 0: Success.
460
+ * * -EINVAL: Runtime PM error.
461
+ * * -EACCES: Runtime PM disabled.
462
+ * * -EAGAIN: Runtime PM usage_count non-zero or Runtime PM status change ongoing.
463
+ * * -EBUSY: Runtime PM child_count non-zero.
464
+ * * -EPERM: Device PM QoS resume latency 0.
465
+ * * -EINPROGRESS: Suspend already in progress.
466
+ * * -ENOSYS: CONFIG_PM not enabled.
467
+ * * 1: Device already suspended.
403
468
*/
404
469
static inline int pm_request_autosuspend (struct device * dev )
405
470
{
471
+ pm_runtime_mark_last_busy (dev );
406
472
return __pm_runtime_suspend (dev , RPM_ASYNC | RPM_AUTO );
407
473
}
408
474
@@ -464,6 +530,17 @@ static inline int pm_runtime_resume_and_get(struct device *dev)
464
530
*
465
531
* Decrement the runtime PM usage counter of @dev and if it turns out to be
466
532
* equal to 0, queue up a work item for @dev like in pm_request_idle().
533
+ *
534
+ * Return:
535
+ * * 0: Success.
536
+ * * -EINVAL: Runtime PM error.
537
+ * * -EACCES: Runtime PM disabled.
538
+ * * -EAGAIN: Runtime PM usage_count non-zero or Runtime PM status change ongoing.
539
+ * * -EBUSY: Runtime PM child_count non-zero.
540
+ * * -EPERM: Device PM QoS resume latency 0.
541
+ * * -EINPROGRESS: Suspend already in progress.
542
+ * * -ENOSYS: CONFIG_PM not enabled.
543
+ * * 1: Device already suspended.
467
544
*/
468
545
static inline int pm_runtime_put (struct device * dev )
469
546
{
@@ -478,23 +555,47 @@ DEFINE_FREE(pm_runtime_put, struct device *, if (_T) pm_runtime_put(_T))
478
555
*
479
556
* Decrement the runtime PM usage counter of @dev and if it turns out to be
480
557
* equal to 0, queue up a work item for @dev like in pm_request_autosuspend().
558
+ *
559
+ * Return:
560
+ * * 0: Success.
561
+ * * -EINVAL: Runtime PM error.
562
+ * * -EACCES: Runtime PM disabled.
563
+ * * -EAGAIN: Runtime PM usage_count non-zero or Runtime PM status change ongoing.
564
+ * * -EBUSY: Runtime PM child_count non-zero.
565
+ * * -EPERM: Device PM QoS resume latency 0.
566
+ * * -EINPROGRESS: Suspend already in progress.
567
+ * * -ENOSYS: CONFIG_PM not enabled.
568
+ * * 1: Device already suspended.
481
569
*/
482
570
static inline int __pm_runtime_put_autosuspend (struct device * dev )
483
571
{
484
572
return __pm_runtime_suspend (dev , RPM_GET_PUT | RPM_ASYNC | RPM_AUTO );
485
573
}
486
574
487
575
/**
488
- * pm_runtime_put_autosuspend - Drop device usage counter and queue autosuspend if 0.
576
+ * pm_runtime_put_autosuspend - Update the last access time of a device, drop
577
+ * its usage counter and queue autosuspend if the usage counter becomes 0.
489
578
* @dev: Target device.
490
579
*
491
- * Decrement the runtime PM usage counter of @dev and if it turns out to be
492
- * equal to 0, queue up a work item for @dev like in pm_request_autosuspend().
580
+ * Update the last access time of @dev, decrement runtime PM usage counter of
581
+ * @dev and if it turns out to be equal to 0, queue up a work item for @dev like
582
+ * in pm_request_autosuspend().
583
+ *
584
+ * Return:
585
+ * * 0: Success.
586
+ * * -EINVAL: Runtime PM error.
587
+ * * -EACCES: Runtime PM disabled.
588
+ * * -EAGAIN: Runtime PM usage_count non-zero or Runtime PM status change ongoing.
589
+ * * -EBUSY: Runtime PM child_count non-zero.
590
+ * * -EPERM: Device PM QoS resume latency 0.
591
+ * * -EINPROGRESS: Suspend already in progress.
592
+ * * -ENOSYS: CONFIG_PM not enabled.
593
+ * * 1: Device already suspended.
493
594
*/
494
595
static inline int pm_runtime_put_autosuspend (struct device * dev )
495
596
{
496
- return __pm_runtime_suspend (dev ,
497
- RPM_GET_PUT | RPM_ASYNC | RPM_AUTO );
597
+ pm_runtime_mark_last_busy (dev );
598
+ return __pm_runtime_put_autosuspend ( dev );
498
599
}
499
600
500
601
/**
@@ -506,9 +607,20 @@ static inline int pm_runtime_put_autosuspend(struct device *dev)
506
607
* return value, set up autosuspend of @dev or suspend it (depending on whether
507
608
* or not autosuspend has been enabled for it).
508
609
*
509
- * The possible return values of this function are the same as for
510
- * pm_runtime_idle() and the runtime PM usage counter of @dev remains
511
- * decremented in all cases, even if it returns an error code.
610
+ * The runtime PM usage counter of @dev remains decremented in all cases, even
611
+ * if it returns an error code.
612
+ *
613
+ * Return:
614
+ * * 0: Success.
615
+ * * -EINVAL: Runtime PM error.
616
+ * * -EACCES: Runtime PM disabled.
617
+ * * -EAGAIN: Runtime PM usage_count non-zero or Runtime PM status change ongoing.
618
+ * * -EBUSY: Runtime PM child_count non-zero.
619
+ * * -EPERM: Device PM QoS resume latency 0.
620
+ * * -ENOSYS: CONFIG_PM not enabled.
621
+ * * 1: Device already suspended.
622
+ * Other values and conditions for the above values are possible as returned by
623
+ * Runtime PM suspend callbacks.
512
624
*/
513
625
static inline int pm_runtime_put_sync (struct device * dev )
514
626
{
@@ -522,29 +634,56 @@ static inline int pm_runtime_put_sync(struct device *dev)
522
634
* Decrement the runtime PM usage counter of @dev and if it turns out to be
523
635
* equal to 0, carry out runtime-suspend of @dev synchronously.
524
636
*
525
- * The possible return values of this function are the same as for
526
- * pm_runtime_suspend() and the runtime PM usage counter of @dev remains
527
- * decremented in all cases, even if it returns an error code.
637
+ * The runtime PM usage counter of @dev remains decremented in all cases, even
638
+ * if it returns an error code.
639
+ *
640
+ * Return:
641
+ * * 0: Success.
642
+ * * -EINVAL: Runtime PM error.
643
+ * * -EACCES: Runtime PM disabled.
644
+ * * -EAGAIN: Runtime PM usage_count non-zero or Runtime PM status change ongoing.
645
+ * * -EAGAIN: usage_count non-zero or Runtime PM status change ongoing.
646
+ * * -EBUSY: Runtime PM child_count non-zero.
647
+ * * -EPERM: Device PM QoS resume latency 0.
648
+ * * -ENOSYS: CONFIG_PM not enabled.
649
+ * * 1: Device already suspended.
650
+ * Other values and conditions for the above values are possible as returned by
651
+ * Runtime PM suspend callbacks.
528
652
*/
529
653
static inline int pm_runtime_put_sync_suspend (struct device * dev )
530
654
{
531
655
return __pm_runtime_suspend (dev , RPM_GET_PUT );
532
656
}
533
657
534
658
/**
535
- * pm_runtime_put_sync_autosuspend - Drop device usage counter and autosuspend if 0.
659
+ * pm_runtime_put_sync_autosuspend - Update the last access time of a device,
660
+ * drop device usage counter and autosuspend if 0.
536
661
* @dev: Target device.
537
662
*
538
- * Decrement the runtime PM usage counter of @dev and if it turns out to be
539
- * equal to 0, set up autosuspend of @dev or suspend it synchronously (depending
540
- * on whether or not autosuspend has been enabled for it).
663
+ * Update the last access time of @dev, decrement the runtime PM usage counter
664
+ * of @dev and if it turns out to be equal to 0, set up autosuspend of @dev or
665
+ * suspend it synchronously (depending on whether or not autosuspend has been
666
+ * enabled for it).
541
667
*
542
- * The possible return values of this function are the same as for
543
- * pm_runtime_autosuspend() and the runtime PM usage counter of @dev remains
544
- * decremented in all cases, even if it returns an error code.
668
+ * The runtime PM usage counter of @dev remains decremented in all cases, even
669
+ * if it returns an error code.
670
+ *
671
+ * Return:
672
+ * * 0: Success.
673
+ * * -EINVAL: Runtime PM error.
674
+ * * -EACCES: Runtime PM disabled.
675
+ * * -EAGAIN: Runtime PM usage_count non-zero or Runtime PM status change ongoing.
676
+ * * -EBUSY: Runtime PM child_count non-zero.
677
+ * * -EPERM: Device PM QoS resume latency 0.
678
+ * * -EINPROGRESS: Suspend already in progress.
679
+ * * -ENOSYS: CONFIG_PM not enabled.
680
+ * * 1: Device already suspended.
681
+ * Other values and conditions for the above values are possible as returned by
682
+ * Runtime PM suspend callbacks.
545
683
*/
546
684
static inline int pm_runtime_put_sync_autosuspend (struct device * dev )
547
685
{
686
+ pm_runtime_mark_last_busy (dev );
548
687
return __pm_runtime_suspend (dev , RPM_GET_PUT | RPM_AUTO );
549
688
}
550
689
0 commit comments