@@ -337,6 +337,20 @@ static inline void pm_runtime_release_supplier(struct device_link *link) {}
337337 * Invoke the "idle check" callback of @dev and, depending on its return value,
338338 * set up autosuspend of @dev or suspend it (depending on whether or not
339339 * 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.
340354 */
341355static inline int pm_runtime_idle (struct device * dev )
342356{
@@ -346,21 +360,48 @@ static inline int pm_runtime_idle(struct device *dev)
346360/**
347361 * pm_runtime_suspend - Suspend a device synchronously.
348362 * @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.
349375 */
350376static inline int pm_runtime_suspend (struct device * dev )
351377{
352378 return __pm_runtime_suspend (dev , 0 );
353379}
354380
355381/**
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.
357384 * @dev: Target device.
358385 *
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.
361401 */
362402static inline int pm_runtime_autosuspend (struct device * dev )
363403{
404+ pm_runtime_mark_last_busy (dev );
364405 return __pm_runtime_suspend (dev , RPM_AUTO );
365406}
366407
@@ -379,6 +420,18 @@ static inline int pm_runtime_resume(struct device *dev)
379420 *
380421 * Queue up a work item to run an equivalent of pm_runtime_idle() for @dev
381422 * 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.
382435 */
383436static inline int pm_request_idle (struct device * dev )
384437{
@@ -395,14 +448,27 @@ static inline int pm_request_resume(struct device *dev)
395448}
396449
397450/**
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.
399453 * @dev: Target device.
400454 *
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.
403468 */
404469static inline int pm_request_autosuspend (struct device * dev )
405470{
471+ pm_runtime_mark_last_busy (dev );
406472 return __pm_runtime_suspend (dev , RPM_ASYNC | RPM_AUTO );
407473}
408474
@@ -464,6 +530,17 @@ static inline int pm_runtime_resume_and_get(struct device *dev)
464530 *
465531 * Decrement the runtime PM usage counter of @dev and if it turns out to be
466532 * 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.
467544 */
468545static inline int pm_runtime_put (struct device * dev )
469546{
@@ -478,23 +555,47 @@ DEFINE_FREE(pm_runtime_put, struct device *, if (_T) pm_runtime_put(_T))
478555 *
479556 * Decrement the runtime PM usage counter of @dev and if it turns out to be
480557 * 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.
481569 */
482570static inline int __pm_runtime_put_autosuspend (struct device * dev )
483571{
484572 return __pm_runtime_suspend (dev , RPM_GET_PUT | RPM_ASYNC | RPM_AUTO );
485573}
486574
487575/**
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.
489578 * @dev: Target device.
490579 *
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.
493594 */
494595static inline int pm_runtime_put_autosuspend (struct device * dev )
495596{
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 );
498599}
499600
500601/**
@@ -506,9 +607,20 @@ static inline int pm_runtime_put_autosuspend(struct device *dev)
506607 * return value, set up autosuspend of @dev or suspend it (depending on whether
507608 * or not autosuspend has been enabled for it).
508609 *
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.
512624 */
513625static inline int pm_runtime_put_sync (struct device * dev )
514626{
@@ -522,29 +634,56 @@ static inline int pm_runtime_put_sync(struct device *dev)
522634 * Decrement the runtime PM usage counter of @dev and if it turns out to be
523635 * equal to 0, carry out runtime-suspend of @dev synchronously.
524636 *
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.
528652 */
529653static inline int pm_runtime_put_sync_suspend (struct device * dev )
530654{
531655 return __pm_runtime_suspend (dev , RPM_GET_PUT );
532656}
533657
534658/**
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.
536661 * @dev: Target device.
537662 *
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).
541667 *
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.
545683 */
546684static inline int pm_runtime_put_sync_autosuspend (struct device * dev )
547685{
686+ pm_runtime_mark_last_busy (dev );
548687 return __pm_runtime_suspend (dev , RPM_GET_PUT | RPM_AUTO );
549688}
550689
0 commit comments