root/drivers/base/power/power.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. device_pm_init_common
  2. pm_runtime_early_init
  3. device_wakeup_attach_irq
  4. device_wakeup_detach_irq
  5. pm_runtime_early_init
  6. pm_runtime_init
  7. pm_runtime_reinit
  8. pm_runtime_remove
  9. dpm_sysfs_add
  10. dpm_sysfs_remove
  11. to_device
  12. device_pm_initialized
  13. device_pm_sleep_init
  14. device_pm_add
  15. device_pm_remove
  16. device_pm_move_before
  17. device_pm_move_after
  18. device_pm_move_last
  19. device_pm_check_callbacks
  20. device_pm_initialized
  21. device_pm_init
  22. pm_wakeup_source_sysfs_add

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #include <linux/pm_qos.h>
   3 
   4 static inline void device_pm_init_common(struct device *dev)
   5 {
   6         if (!dev->power.early_init) {
   7                 spin_lock_init(&dev->power.lock);
   8                 dev->power.qos = NULL;
   9                 dev->power.early_init = true;
  10         }
  11 }
  12 
  13 #ifdef CONFIG_PM
  14 
  15 static inline void pm_runtime_early_init(struct device *dev)
  16 {
  17         dev->power.disable_depth = 1;
  18         device_pm_init_common(dev);
  19 }
  20 
  21 extern void pm_runtime_init(struct device *dev);
  22 extern void pm_runtime_reinit(struct device *dev);
  23 extern void pm_runtime_remove(struct device *dev);
  24 extern u64 pm_runtime_active_time(struct device *dev);
  25 
  26 #define WAKE_IRQ_DEDICATED_ALLOCATED    BIT(0)
  27 #define WAKE_IRQ_DEDICATED_MANAGED      BIT(1)
  28 #define WAKE_IRQ_DEDICATED_MASK         (WAKE_IRQ_DEDICATED_ALLOCATED | \
  29                                          WAKE_IRQ_DEDICATED_MANAGED)
  30 
  31 struct wake_irq {
  32         struct device *dev;
  33         unsigned int status;
  34         int irq;
  35         const char *name;
  36 };
  37 
  38 extern void dev_pm_arm_wake_irq(struct wake_irq *wirq);
  39 extern void dev_pm_disarm_wake_irq(struct wake_irq *wirq);
  40 extern void dev_pm_enable_wake_irq_check(struct device *dev,
  41                                          bool can_change_status);
  42 extern void dev_pm_disable_wake_irq_check(struct device *dev);
  43 
  44 #ifdef CONFIG_PM_SLEEP
  45 
  46 extern void device_wakeup_attach_irq(struct device *dev, struct wake_irq *wakeirq);
  47 extern void device_wakeup_detach_irq(struct device *dev);
  48 extern void device_wakeup_arm_wake_irqs(void);
  49 extern void device_wakeup_disarm_wake_irqs(void);
  50 
  51 #else
  52 
  53 static inline void device_wakeup_attach_irq(struct device *dev,
  54                                             struct wake_irq *wakeirq) {}
  55 
  56 static inline void device_wakeup_detach_irq(struct device *dev)
  57 {
  58 }
  59 
  60 #endif /* CONFIG_PM_SLEEP */
  61 
  62 /*
  63  * sysfs.c
  64  */
  65 
  66 extern int dpm_sysfs_add(struct device *dev);
  67 extern void dpm_sysfs_remove(struct device *dev);
  68 extern void rpm_sysfs_remove(struct device *dev);
  69 extern int wakeup_sysfs_add(struct device *dev);
  70 extern void wakeup_sysfs_remove(struct device *dev);
  71 extern int pm_qos_sysfs_add_resume_latency(struct device *dev);
  72 extern void pm_qos_sysfs_remove_resume_latency(struct device *dev);
  73 extern int pm_qos_sysfs_add_flags(struct device *dev);
  74 extern void pm_qos_sysfs_remove_flags(struct device *dev);
  75 extern int pm_qos_sysfs_add_latency_tolerance(struct device *dev);
  76 extern void pm_qos_sysfs_remove_latency_tolerance(struct device *dev);
  77 
  78 #else /* CONFIG_PM */
  79 
  80 static inline void pm_runtime_early_init(struct device *dev)
  81 {
  82         device_pm_init_common(dev);
  83 }
  84 
  85 static inline void pm_runtime_init(struct device *dev) {}
  86 static inline void pm_runtime_reinit(struct device *dev) {}
  87 static inline void pm_runtime_remove(struct device *dev) {}
  88 
  89 static inline int dpm_sysfs_add(struct device *dev) { return 0; }
  90 static inline void dpm_sysfs_remove(struct device *dev) {}
  91 
  92 #endif
  93 
  94 #ifdef CONFIG_PM_SLEEP
  95 
  96 /* kernel/power/main.c */
  97 extern int pm_async_enabled;
  98 
  99 /* drivers/base/power/main.c */
 100 extern struct list_head dpm_list;       /* The active device list */
 101 
 102 static inline struct device *to_device(struct list_head *entry)
 103 {
 104         return container_of(entry, struct device, power.entry);
 105 }
 106 
 107 extern void device_pm_sleep_init(struct device *dev);
 108 extern void device_pm_add(struct device *);
 109 extern void device_pm_remove(struct device *);
 110 extern void device_pm_move_before(struct device *, struct device *);
 111 extern void device_pm_move_after(struct device *, struct device *);
 112 extern void device_pm_move_last(struct device *);
 113 extern void device_pm_check_callbacks(struct device *dev);
 114 
 115 static inline bool device_pm_initialized(struct device *dev)
 116 {
 117         return dev->power.in_dpm_list;
 118 }
 119 
 120 #else /* !CONFIG_PM_SLEEP */
 121 
 122 static inline void device_pm_sleep_init(struct device *dev) {}
 123 
 124 static inline void device_pm_add(struct device *dev) {}
 125 
 126 static inline void device_pm_remove(struct device *dev)
 127 {
 128         pm_runtime_remove(dev);
 129 }
 130 
 131 static inline void device_pm_move_before(struct device *deva,
 132                                          struct device *devb) {}
 133 static inline void device_pm_move_after(struct device *deva,
 134                                         struct device *devb) {}
 135 static inline void device_pm_move_last(struct device *dev) {}
 136 
 137 static inline void device_pm_check_callbacks(struct device *dev) {}
 138 
 139 static inline bool device_pm_initialized(struct device *dev)
 140 {
 141         return device_is_registered(dev);
 142 }
 143 
 144 #endif /* !CONFIG_PM_SLEEP */
 145 
 146 static inline void device_pm_init(struct device *dev)
 147 {
 148         device_pm_init_common(dev);
 149         device_pm_sleep_init(dev);
 150         pm_runtime_init(dev);
 151 }
 152 
 153 #ifdef CONFIG_PM_SLEEP
 154 
 155 /* drivers/base/power/wakeup_stats.c */
 156 extern int wakeup_source_sysfs_add(struct device *parent,
 157                                    struct wakeup_source *ws);
 158 extern void wakeup_source_sysfs_remove(struct wakeup_source *ws);
 159 
 160 extern int pm_wakeup_source_sysfs_add(struct device *parent);
 161 
 162 #else /* !CONFIG_PM_SLEEP */
 163 
 164 static inline int pm_wakeup_source_sysfs_add(struct device *parent)
 165 {
 166         return 0;
 167 }
 168 
 169 #endif /* CONFIG_PM_SLEEP */

/* [<][>][^][v][top][bottom][index][help] */