]> Pileus Git - ~andy/linux/blob - drivers/base/power/main.c
Merge remote-tracking branch 'spi/fix/atmel' into spi-linus
[~andy/linux] / drivers / base / power / main.c
1 /*
2  * drivers/base/power/main.c - Where the driver meets power management.
3  *
4  * Copyright (c) 2003 Patrick Mochel
5  * Copyright (c) 2003 Open Source Development Lab
6  *
7  * This file is released under the GPLv2
8  *
9  *
10  * The driver model core calls device_pm_add() when a device is registered.
11  * This will initialize the embedded device_pm_info object in the device
12  * and add it to the list of power-controlled devices. sysfs entries for
13  * controlling device power management will also be added.
14  *
15  * A separate list is used for keeping track of power info, because the power
16  * domain dependencies may differ from the ancestral dependencies that the
17  * subsystem list maintains.
18  */
19
20 #include <linux/device.h>
21 #include <linux/kallsyms.h>
22 #include <linux/export.h>
23 #include <linux/mutex.h>
24 #include <linux/pm.h>
25 #include <linux/pm_runtime.h>
26 #include <linux/resume-trace.h>
27 #include <linux/interrupt.h>
28 #include <linux/sched.h>
29 #include <linux/async.h>
30 #include <linux/suspend.h>
31 #include <trace/events/power.h>
32 #include <linux/cpuidle.h>
33 #include "../base.h"
34 #include "power.h"
35
36 typedef int (*pm_callback_t)(struct device *);
37
38 /*
39  * The entries in the dpm_list list are in a depth first order, simply
40  * because children are guaranteed to be discovered after parents, and
41  * are inserted at the back of the list on discovery.
42  *
43  * Since device_pm_add() may be called with a device lock held,
44  * we must never try to acquire a device lock while holding
45  * dpm_list_mutex.
46  */
47
48 LIST_HEAD(dpm_list);
49 static LIST_HEAD(dpm_prepared_list);
50 static LIST_HEAD(dpm_suspended_list);
51 static LIST_HEAD(dpm_late_early_list);
52 static LIST_HEAD(dpm_noirq_list);
53
54 struct suspend_stats suspend_stats;
55 static DEFINE_MUTEX(dpm_list_mtx);
56 static pm_message_t pm_transition;
57
58 static int async_error;
59
60 static char *pm_verb(int event)
61 {
62         switch (event) {
63         case PM_EVENT_SUSPEND:
64                 return "suspend";
65         case PM_EVENT_RESUME:
66                 return "resume";
67         case PM_EVENT_FREEZE:
68                 return "freeze";
69         case PM_EVENT_QUIESCE:
70                 return "quiesce";
71         case PM_EVENT_HIBERNATE:
72                 return "hibernate";
73         case PM_EVENT_THAW:
74                 return "thaw";
75         case PM_EVENT_RESTORE:
76                 return "restore";
77         case PM_EVENT_RECOVER:
78                 return "recover";
79         default:
80                 return "(unknown PM event)";
81         }
82 }
83
84 /**
85  * device_pm_sleep_init - Initialize system suspend-related device fields.
86  * @dev: Device object being initialized.
87  */
88 void device_pm_sleep_init(struct device *dev)
89 {
90         dev->power.is_prepared = false;
91         dev->power.is_suspended = false;
92         init_completion(&dev->power.completion);
93         complete_all(&dev->power.completion);
94         dev->power.wakeup = NULL;
95         INIT_LIST_HEAD(&dev->power.entry);
96 }
97
98 /**
99  * device_pm_lock - Lock the list of active devices used by the PM core.
100  */
101 void device_pm_lock(void)
102 {
103         mutex_lock(&dpm_list_mtx);
104 }
105
106 /**
107  * device_pm_unlock - Unlock the list of active devices used by the PM core.
108  */
109 void device_pm_unlock(void)
110 {
111         mutex_unlock(&dpm_list_mtx);
112 }
113
114 /**
115  * device_pm_add - Add a device to the PM core's list of active devices.
116  * @dev: Device to add to the list.
117  */
118 void device_pm_add(struct device *dev)
119 {
120         pr_debug("PM: Adding info for %s:%s\n",
121                  dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
122         mutex_lock(&dpm_list_mtx);
123         if (dev->parent && dev->parent->power.is_prepared)
124                 dev_warn(dev, "parent %s should not be sleeping\n",
125                         dev_name(dev->parent));
126         list_add_tail(&dev->power.entry, &dpm_list);
127         mutex_unlock(&dpm_list_mtx);
128 }
129
130 /**
131  * device_pm_remove - Remove a device from the PM core's list of active devices.
132  * @dev: Device to be removed from the list.
133  */
134 void device_pm_remove(struct device *dev)
135 {
136         pr_debug("PM: Removing info for %s:%s\n",
137                  dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
138         complete_all(&dev->power.completion);
139         mutex_lock(&dpm_list_mtx);
140         list_del_init(&dev->power.entry);
141         mutex_unlock(&dpm_list_mtx);
142         device_wakeup_disable(dev);
143         pm_runtime_remove(dev);
144 }
145
146 /**
147  * device_pm_move_before - Move device in the PM core's list of active devices.
148  * @deva: Device to move in dpm_list.
149  * @devb: Device @deva should come before.
150  */
151 void device_pm_move_before(struct device *deva, struct device *devb)
152 {
153         pr_debug("PM: Moving %s:%s before %s:%s\n",
154                  deva->bus ? deva->bus->name : "No Bus", dev_name(deva),
155                  devb->bus ? devb->bus->name : "No Bus", dev_name(devb));
156         /* Delete deva from dpm_list and reinsert before devb. */
157         list_move_tail(&deva->power.entry, &devb->power.entry);
158 }
159
160 /**
161  * device_pm_move_after - Move device in the PM core's list of active devices.
162  * @deva: Device to move in dpm_list.
163  * @devb: Device @deva should come after.
164  */
165 void device_pm_move_after(struct device *deva, struct device *devb)
166 {
167         pr_debug("PM: Moving %s:%s after %s:%s\n",
168                  deva->bus ? deva->bus->name : "No Bus", dev_name(deva),
169                  devb->bus ? devb->bus->name : "No Bus", dev_name(devb));
170         /* Delete deva from dpm_list and reinsert after devb. */
171         list_move(&deva->power.entry, &devb->power.entry);
172 }
173
174 /**
175  * device_pm_move_last - Move device to end of the PM core's list of devices.
176  * @dev: Device to move in dpm_list.
177  */
178 void device_pm_move_last(struct device *dev)
179 {
180         pr_debug("PM: Moving %s:%s to end of list\n",
181                  dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
182         list_move_tail(&dev->power.entry, &dpm_list);
183 }
184
185 static ktime_t initcall_debug_start(struct device *dev)
186 {
187         ktime_t calltime = ktime_set(0, 0);
188
189         if (pm_print_times_enabled) {
190                 pr_info("calling  %s+ @ %i, parent: %s\n",
191                         dev_name(dev), task_pid_nr(current),
192                         dev->parent ? dev_name(dev->parent) : "none");
193                 calltime = ktime_get();
194         }
195
196         return calltime;
197 }
198
199 static void initcall_debug_report(struct device *dev, ktime_t calltime,
200                                   int error, pm_message_t state, char *info)
201 {
202         ktime_t rettime;
203         s64 nsecs;
204
205         rettime = ktime_get();
206         nsecs = (s64) ktime_to_ns(ktime_sub(rettime, calltime));
207
208         if (pm_print_times_enabled) {
209                 pr_info("call %s+ returned %d after %Ld usecs\n", dev_name(dev),
210                         error, (unsigned long long)nsecs >> 10);
211         }
212
213         trace_device_pm_report_time(dev, info, nsecs, pm_verb(state.event),
214                                     error);
215 }
216
217 /**
218  * dpm_wait - Wait for a PM operation to complete.
219  * @dev: Device to wait for.
220  * @async: If unset, wait only if the device's power.async_suspend flag is set.
221  */
222 static void dpm_wait(struct device *dev, bool async)
223 {
224         if (!dev)
225                 return;
226
227         if (async || (pm_async_enabled && dev->power.async_suspend))
228                 wait_for_completion(&dev->power.completion);
229 }
230
231 static int dpm_wait_fn(struct device *dev, void *async_ptr)
232 {
233         dpm_wait(dev, *((bool *)async_ptr));
234         return 0;
235 }
236
237 static void dpm_wait_for_children(struct device *dev, bool async)
238 {
239        device_for_each_child(dev, &async, dpm_wait_fn);
240 }
241
242 /**
243  * pm_op - Return the PM operation appropriate for given PM event.
244  * @ops: PM operations to choose from.
245  * @state: PM transition of the system being carried out.
246  */
247 static pm_callback_t pm_op(const struct dev_pm_ops *ops, pm_message_t state)
248 {
249         switch (state.event) {
250 #ifdef CONFIG_SUSPEND
251         case PM_EVENT_SUSPEND:
252                 return ops->suspend;
253         case PM_EVENT_RESUME:
254                 return ops->resume;
255 #endif /* CONFIG_SUSPEND */
256 #ifdef CONFIG_HIBERNATE_CALLBACKS
257         case PM_EVENT_FREEZE:
258         case PM_EVENT_QUIESCE:
259                 return ops->freeze;
260         case PM_EVENT_HIBERNATE:
261                 return ops->poweroff;
262         case PM_EVENT_THAW:
263         case PM_EVENT_RECOVER:
264                 return ops->thaw;
265                 break;
266         case PM_EVENT_RESTORE:
267                 return ops->restore;
268 #endif /* CONFIG_HIBERNATE_CALLBACKS */
269         }
270
271         return NULL;
272 }
273
274 /**
275  * pm_late_early_op - Return the PM operation appropriate for given PM event.
276  * @ops: PM operations to choose from.
277  * @state: PM transition of the system being carried out.
278  *
279  * Runtime PM is disabled for @dev while this function is being executed.
280  */
281 static pm_callback_t pm_late_early_op(const struct dev_pm_ops *ops,
282                                       pm_message_t state)
283 {
284         switch (state.event) {
285 #ifdef CONFIG_SUSPEND
286         case PM_EVENT_SUSPEND:
287                 return ops->suspend_late;
288         case PM_EVENT_RESUME:
289                 return ops->resume_early;
290 #endif /* CONFIG_SUSPEND */
291 #ifdef CONFIG_HIBERNATE_CALLBACKS
292         case PM_EVENT_FREEZE:
293         case PM_EVENT_QUIESCE:
294                 return ops->freeze_late;
295         case PM_EVENT_HIBERNATE:
296                 return ops->poweroff_late;
297         case PM_EVENT_THAW:
298         case PM_EVENT_RECOVER:
299                 return ops->thaw_early;
300         case PM_EVENT_RESTORE:
301                 return ops->restore_early;
302 #endif /* CONFIG_HIBERNATE_CALLBACKS */
303         }
304
305         return NULL;
306 }
307
308 /**
309  * pm_noirq_op - Return the PM operation appropriate for given PM event.
310  * @ops: PM operations to choose from.
311  * @state: PM transition of the system being carried out.
312  *
313  * The driver of @dev will not receive interrupts while this function is being
314  * executed.
315  */
316 static pm_callback_t pm_noirq_op(const struct dev_pm_ops *ops, pm_message_t state)
317 {
318         switch (state.event) {
319 #ifdef CONFIG_SUSPEND
320         case PM_EVENT_SUSPEND:
321                 return ops->suspend_noirq;
322         case PM_EVENT_RESUME:
323                 return ops->resume_noirq;
324 #endif /* CONFIG_SUSPEND */
325 #ifdef CONFIG_HIBERNATE_CALLBACKS
326         case PM_EVENT_FREEZE:
327         case PM_EVENT_QUIESCE:
328                 return ops->freeze_noirq;
329         case PM_EVENT_HIBERNATE:
330                 return ops->poweroff_noirq;
331         case PM_EVENT_THAW:
332         case PM_EVENT_RECOVER:
333                 return ops->thaw_noirq;
334         case PM_EVENT_RESTORE:
335                 return ops->restore_noirq;
336 #endif /* CONFIG_HIBERNATE_CALLBACKS */
337         }
338
339         return NULL;
340 }
341
342 static void pm_dev_dbg(struct device *dev, pm_message_t state, char *info)
343 {
344         dev_dbg(dev, "%s%s%s\n", info, pm_verb(state.event),
345                 ((state.event & PM_EVENT_SLEEP) && device_may_wakeup(dev)) ?
346                 ", may wakeup" : "");
347 }
348
349 static void pm_dev_err(struct device *dev, pm_message_t state, char *info,
350                         int error)
351 {
352         printk(KERN_ERR "PM: Device %s failed to %s%s: error %d\n",
353                 dev_name(dev), pm_verb(state.event), info, error);
354 }
355
356 static void dpm_show_time(ktime_t starttime, pm_message_t state, char *info)
357 {
358         ktime_t calltime;
359         u64 usecs64;
360         int usecs;
361
362         calltime = ktime_get();
363         usecs64 = ktime_to_ns(ktime_sub(calltime, starttime));
364         do_div(usecs64, NSEC_PER_USEC);
365         usecs = usecs64;
366         if (usecs == 0)
367                 usecs = 1;
368         pr_info("PM: %s%s%s of devices complete after %ld.%03ld msecs\n",
369                 info ?: "", info ? " " : "", pm_verb(state.event),
370                 usecs / USEC_PER_MSEC, usecs % USEC_PER_MSEC);
371 }
372
373 static int dpm_run_callback(pm_callback_t cb, struct device *dev,
374                             pm_message_t state, char *info)
375 {
376         ktime_t calltime;
377         int error;
378
379         if (!cb)
380                 return 0;
381
382         calltime = initcall_debug_start(dev);
383
384         pm_dev_dbg(dev, state, info);
385         error = cb(dev);
386         suspend_report_result(cb, error);
387
388         initcall_debug_report(dev, calltime, error, state, info);
389
390         return error;
391 }
392
393 /*------------------------- Resume routines -------------------------*/
394
395 /**
396  * device_resume_noirq - Execute an "early resume" callback for given device.
397  * @dev: Device to handle.
398  * @state: PM transition of the system being carried out.
399  *
400  * The driver of @dev will not receive interrupts while this function is being
401  * executed.
402  */
403 static int device_resume_noirq(struct device *dev, pm_message_t state)
404 {
405         pm_callback_t callback = NULL;
406         char *info = NULL;
407         int error = 0;
408
409         TRACE_DEVICE(dev);
410         TRACE_RESUME(0);
411
412         if (dev->power.syscore)
413                 goto Out;
414
415         if (dev->pm_domain) {
416                 info = "noirq power domain ";
417                 callback = pm_noirq_op(&dev->pm_domain->ops, state);
418         } else if (dev->type && dev->type->pm) {
419                 info = "noirq type ";
420                 callback = pm_noirq_op(dev->type->pm, state);
421         } else if (dev->class && dev->class->pm) {
422                 info = "noirq class ";
423                 callback = pm_noirq_op(dev->class->pm, state);
424         } else if (dev->bus && dev->bus->pm) {
425                 info = "noirq bus ";
426                 callback = pm_noirq_op(dev->bus->pm, state);
427         }
428
429         if (!callback && dev->driver && dev->driver->pm) {
430                 info = "noirq driver ";
431                 callback = pm_noirq_op(dev->driver->pm, state);
432         }
433
434         error = dpm_run_callback(callback, dev, state, info);
435
436  Out:
437         TRACE_RESUME(error);
438         return error;
439 }
440
441 /**
442  * dpm_resume_noirq - Execute "noirq resume" callbacks for all devices.
443  * @state: PM transition of the system being carried out.
444  *
445  * Call the "noirq" resume handlers for all devices in dpm_noirq_list and
446  * enable device drivers to receive interrupts.
447  */
448 static void dpm_resume_noirq(pm_message_t state)
449 {
450         ktime_t starttime = ktime_get();
451
452         mutex_lock(&dpm_list_mtx);
453         while (!list_empty(&dpm_noirq_list)) {
454                 struct device *dev = to_device(dpm_noirq_list.next);
455                 int error;
456
457                 get_device(dev);
458                 list_move_tail(&dev->power.entry, &dpm_late_early_list);
459                 mutex_unlock(&dpm_list_mtx);
460
461                 error = device_resume_noirq(dev, state);
462                 if (error) {
463                         suspend_stats.failed_resume_noirq++;
464                         dpm_save_failed_step(SUSPEND_RESUME_NOIRQ);
465                         dpm_save_failed_dev(dev_name(dev));
466                         pm_dev_err(dev, state, " noirq", error);
467                 }
468
469                 mutex_lock(&dpm_list_mtx);
470                 put_device(dev);
471         }
472         mutex_unlock(&dpm_list_mtx);
473         dpm_show_time(starttime, state, "noirq");
474         resume_device_irqs();
475         cpuidle_resume();
476 }
477
478 /**
479  * device_resume_early - Execute an "early resume" callback for given device.
480  * @dev: Device to handle.
481  * @state: PM transition of the system being carried out.
482  *
483  * Runtime PM is disabled for @dev while this function is being executed.
484  */
485 static int device_resume_early(struct device *dev, pm_message_t state)
486 {
487         pm_callback_t callback = NULL;
488         char *info = NULL;
489         int error = 0;
490
491         TRACE_DEVICE(dev);
492         TRACE_RESUME(0);
493
494         if (dev->power.syscore)
495                 goto Out;
496
497         if (dev->pm_domain) {
498                 info = "early power domain ";
499                 callback = pm_late_early_op(&dev->pm_domain->ops, state);
500         } else if (dev->type && dev->type->pm) {
501                 info = "early type ";
502                 callback = pm_late_early_op(dev->type->pm, state);
503         } else if (dev->class && dev->class->pm) {
504                 info = "early class ";
505                 callback = pm_late_early_op(dev->class->pm, state);
506         } else if (dev->bus && dev->bus->pm) {
507                 info = "early bus ";
508                 callback = pm_late_early_op(dev->bus->pm, state);
509         }
510
511         if (!callback && dev->driver && dev->driver->pm) {
512                 info = "early driver ";
513                 callback = pm_late_early_op(dev->driver->pm, state);
514         }
515
516         error = dpm_run_callback(callback, dev, state, info);
517
518  Out:
519         TRACE_RESUME(error);
520
521         pm_runtime_enable(dev);
522         return error;
523 }
524
525 /**
526  * dpm_resume_early - Execute "early resume" callbacks for all devices.
527  * @state: PM transition of the system being carried out.
528  */
529 static void dpm_resume_early(pm_message_t state)
530 {
531         ktime_t starttime = ktime_get();
532
533         mutex_lock(&dpm_list_mtx);
534         while (!list_empty(&dpm_late_early_list)) {
535                 struct device *dev = to_device(dpm_late_early_list.next);
536                 int error;
537
538                 get_device(dev);
539                 list_move_tail(&dev->power.entry, &dpm_suspended_list);
540                 mutex_unlock(&dpm_list_mtx);
541
542                 error = device_resume_early(dev, state);
543                 if (error) {
544                         suspend_stats.failed_resume_early++;
545                         dpm_save_failed_step(SUSPEND_RESUME_EARLY);
546                         dpm_save_failed_dev(dev_name(dev));
547                         pm_dev_err(dev, state, " early", error);
548                 }
549
550                 mutex_lock(&dpm_list_mtx);
551                 put_device(dev);
552         }
553         mutex_unlock(&dpm_list_mtx);
554         dpm_show_time(starttime, state, "early");
555 }
556
557 /**
558  * dpm_resume_start - Execute "noirq" and "early" device callbacks.
559  * @state: PM transition of the system being carried out.
560  */
561 void dpm_resume_start(pm_message_t state)
562 {
563         dpm_resume_noirq(state);
564         dpm_resume_early(state);
565 }
566 EXPORT_SYMBOL_GPL(dpm_resume_start);
567
568 /**
569  * device_resume - Execute "resume" callbacks for given device.
570  * @dev: Device to handle.
571  * @state: PM transition of the system being carried out.
572  * @async: If true, the device is being resumed asynchronously.
573  */
574 static int device_resume(struct device *dev, pm_message_t state, bool async)
575 {
576         pm_callback_t callback = NULL;
577         char *info = NULL;
578         int error = 0;
579
580         TRACE_DEVICE(dev);
581         TRACE_RESUME(0);
582
583         if (dev->power.syscore)
584                 goto Complete;
585
586         dpm_wait(dev->parent, async);
587         device_lock(dev);
588
589         /*
590          * This is a fib.  But we'll allow new children to be added below
591          * a resumed device, even if the device hasn't been completed yet.
592          */
593         dev->power.is_prepared = false;
594
595         if (!dev->power.is_suspended)
596                 goto Unlock;
597
598         if (dev->pm_domain) {
599                 info = "power domain ";
600                 callback = pm_op(&dev->pm_domain->ops, state);
601                 goto Driver;
602         }
603
604         if (dev->type && dev->type->pm) {
605                 info = "type ";
606                 callback = pm_op(dev->type->pm, state);
607                 goto Driver;
608         }
609
610         if (dev->class) {
611                 if (dev->class->pm) {
612                         info = "class ";
613                         callback = pm_op(dev->class->pm, state);
614                         goto Driver;
615                 } else if (dev->class->resume) {
616                         info = "legacy class ";
617                         callback = dev->class->resume;
618                         goto End;
619                 }
620         }
621
622         if (dev->bus) {
623                 if (dev->bus->pm) {
624                         info = "bus ";
625                         callback = pm_op(dev->bus->pm, state);
626                 } else if (dev->bus->resume) {
627                         info = "legacy bus ";
628                         callback = dev->bus->resume;
629                         goto End;
630                 }
631         }
632
633  Driver:
634         if (!callback && dev->driver && dev->driver->pm) {
635                 info = "driver ";
636                 callback = pm_op(dev->driver->pm, state);
637         }
638
639  End:
640         error = dpm_run_callback(callback, dev, state, info);
641         dev->power.is_suspended = false;
642
643  Unlock:
644         device_unlock(dev);
645
646  Complete:
647         complete_all(&dev->power.completion);
648
649         TRACE_RESUME(error);
650
651         return error;
652 }
653
654 static void async_resume(void *data, async_cookie_t cookie)
655 {
656         struct device *dev = (struct device *)data;
657         int error;
658
659         error = device_resume(dev, pm_transition, true);
660         if (error)
661                 pm_dev_err(dev, pm_transition, " async", error);
662         put_device(dev);
663 }
664
665 static bool is_async(struct device *dev)
666 {
667         return dev->power.async_suspend && pm_async_enabled
668                 && !pm_trace_is_enabled();
669 }
670
671 /**
672  * dpm_resume - Execute "resume" callbacks for non-sysdev devices.
673  * @state: PM transition of the system being carried out.
674  *
675  * Execute the appropriate "resume" callback for all devices whose status
676  * indicates that they are suspended.
677  */
678 void dpm_resume(pm_message_t state)
679 {
680         struct device *dev;
681         ktime_t starttime = ktime_get();
682
683         might_sleep();
684
685         mutex_lock(&dpm_list_mtx);
686         pm_transition = state;
687         async_error = 0;
688
689         list_for_each_entry(dev, &dpm_suspended_list, power.entry) {
690                 INIT_COMPLETION(dev->power.completion);
691                 if (is_async(dev)) {
692                         get_device(dev);
693                         async_schedule(async_resume, dev);
694                 }
695         }
696
697         while (!list_empty(&dpm_suspended_list)) {
698                 dev = to_device(dpm_suspended_list.next);
699                 get_device(dev);
700                 if (!is_async(dev)) {
701                         int error;
702
703                         mutex_unlock(&dpm_list_mtx);
704
705                         error = device_resume(dev, state, false);
706                         if (error) {
707                                 suspend_stats.failed_resume++;
708                                 dpm_save_failed_step(SUSPEND_RESUME);
709                                 dpm_save_failed_dev(dev_name(dev));
710                                 pm_dev_err(dev, state, "", error);
711                         }
712
713                         mutex_lock(&dpm_list_mtx);
714                 }
715                 if (!list_empty(&dev->power.entry))
716                         list_move_tail(&dev->power.entry, &dpm_prepared_list);
717                 put_device(dev);
718         }
719         mutex_unlock(&dpm_list_mtx);
720         async_synchronize_full();
721         dpm_show_time(starttime, state, NULL);
722 }
723
724 /**
725  * device_complete - Complete a PM transition for given device.
726  * @dev: Device to handle.
727  * @state: PM transition of the system being carried out.
728  */
729 static void device_complete(struct device *dev, pm_message_t state)
730 {
731         void (*callback)(struct device *) = NULL;
732         char *info = NULL;
733
734         if (dev->power.syscore)
735                 return;
736
737         device_lock(dev);
738
739         if (dev->pm_domain) {
740                 info = "completing power domain ";
741                 callback = dev->pm_domain->ops.complete;
742         } else if (dev->type && dev->type->pm) {
743                 info = "completing type ";
744                 callback = dev->type->pm->complete;
745         } else if (dev->class && dev->class->pm) {
746                 info = "completing class ";
747                 callback = dev->class->pm->complete;
748         } else if (dev->bus && dev->bus->pm) {
749                 info = "completing bus ";
750                 callback = dev->bus->pm->complete;
751         }
752
753         if (!callback && dev->driver && dev->driver->pm) {
754                 info = "completing driver ";
755                 callback = dev->driver->pm->complete;
756         }
757
758         if (callback) {
759                 pm_dev_dbg(dev, state, info);
760                 callback(dev);
761         }
762
763         device_unlock(dev);
764
765         pm_runtime_put(dev);
766 }
767
768 /**
769  * dpm_complete - Complete a PM transition for all non-sysdev devices.
770  * @state: PM transition of the system being carried out.
771  *
772  * Execute the ->complete() callbacks for all devices whose PM status is not
773  * DPM_ON (this allows new devices to be registered).
774  */
775 void dpm_complete(pm_message_t state)
776 {
777         struct list_head list;
778
779         might_sleep();
780
781         INIT_LIST_HEAD(&list);
782         mutex_lock(&dpm_list_mtx);
783         while (!list_empty(&dpm_prepared_list)) {
784                 struct device *dev = to_device(dpm_prepared_list.prev);
785
786                 get_device(dev);
787                 dev->power.is_prepared = false;
788                 list_move(&dev->power.entry, &list);
789                 mutex_unlock(&dpm_list_mtx);
790
791                 device_complete(dev, state);
792
793                 mutex_lock(&dpm_list_mtx);
794                 put_device(dev);
795         }
796         list_splice(&list, &dpm_list);
797         mutex_unlock(&dpm_list_mtx);
798 }
799
800 /**
801  * dpm_resume_end - Execute "resume" callbacks and complete system transition.
802  * @state: PM transition of the system being carried out.
803  *
804  * Execute "resume" callbacks for all devices and complete the PM transition of
805  * the system.
806  */
807 void dpm_resume_end(pm_message_t state)
808 {
809         dpm_resume(state);
810         dpm_complete(state);
811 }
812 EXPORT_SYMBOL_GPL(dpm_resume_end);
813
814
815 /*------------------------- Suspend routines -------------------------*/
816
817 /**
818  * resume_event - Return a "resume" message for given "suspend" sleep state.
819  * @sleep_state: PM message representing a sleep state.
820  *
821  * Return a PM message representing the resume event corresponding to given
822  * sleep state.
823  */
824 static pm_message_t resume_event(pm_message_t sleep_state)
825 {
826         switch (sleep_state.event) {
827         case PM_EVENT_SUSPEND:
828                 return PMSG_RESUME;
829         case PM_EVENT_FREEZE:
830         case PM_EVENT_QUIESCE:
831                 return PMSG_RECOVER;
832         case PM_EVENT_HIBERNATE:
833                 return PMSG_RESTORE;
834         }
835         return PMSG_ON;
836 }
837
838 /**
839  * device_suspend_noirq - Execute a "late suspend" callback for given device.
840  * @dev: Device to handle.
841  * @state: PM transition of the system being carried out.
842  *
843  * The driver of @dev will not receive interrupts while this function is being
844  * executed.
845  */
846 static int device_suspend_noirq(struct device *dev, pm_message_t state)
847 {
848         pm_callback_t callback = NULL;
849         char *info = NULL;
850
851         if (dev->power.syscore)
852                 return 0;
853
854         if (dev->pm_domain) {
855                 info = "noirq power domain ";
856                 callback = pm_noirq_op(&dev->pm_domain->ops, state);
857         } else if (dev->type && dev->type->pm) {
858                 info = "noirq type ";
859                 callback = pm_noirq_op(dev->type->pm, state);
860         } else if (dev->class && dev->class->pm) {
861                 info = "noirq class ";
862                 callback = pm_noirq_op(dev->class->pm, state);
863         } else if (dev->bus && dev->bus->pm) {
864                 info = "noirq bus ";
865                 callback = pm_noirq_op(dev->bus->pm, state);
866         }
867
868         if (!callback && dev->driver && dev->driver->pm) {
869                 info = "noirq driver ";
870                 callback = pm_noirq_op(dev->driver->pm, state);
871         }
872
873         return dpm_run_callback(callback, dev, state, info);
874 }
875
876 /**
877  * dpm_suspend_noirq - Execute "noirq suspend" callbacks for all devices.
878  * @state: PM transition of the system being carried out.
879  *
880  * Prevent device drivers from receiving interrupts and call the "noirq" suspend
881  * handlers for all non-sysdev devices.
882  */
883 static int dpm_suspend_noirq(pm_message_t state)
884 {
885         ktime_t starttime = ktime_get();
886         int error = 0;
887
888         cpuidle_pause();
889         suspend_device_irqs();
890         mutex_lock(&dpm_list_mtx);
891         while (!list_empty(&dpm_late_early_list)) {
892                 struct device *dev = to_device(dpm_late_early_list.prev);
893
894                 get_device(dev);
895                 mutex_unlock(&dpm_list_mtx);
896
897                 error = device_suspend_noirq(dev, state);
898
899                 mutex_lock(&dpm_list_mtx);
900                 if (error) {
901                         pm_dev_err(dev, state, " noirq", error);
902                         suspend_stats.failed_suspend_noirq++;
903                         dpm_save_failed_step(SUSPEND_SUSPEND_NOIRQ);
904                         dpm_save_failed_dev(dev_name(dev));
905                         put_device(dev);
906                         break;
907                 }
908                 if (!list_empty(&dev->power.entry))
909                         list_move(&dev->power.entry, &dpm_noirq_list);
910                 put_device(dev);
911
912                 if (pm_wakeup_pending()) {
913                         error = -EBUSY;
914                         break;
915                 }
916         }
917         mutex_unlock(&dpm_list_mtx);
918         if (error)
919                 dpm_resume_noirq(resume_event(state));
920         else
921                 dpm_show_time(starttime, state, "noirq");
922         return error;
923 }
924
925 /**
926  * device_suspend_late - Execute a "late suspend" callback for given device.
927  * @dev: Device to handle.
928  * @state: PM transition of the system being carried out.
929  *
930  * Runtime PM is disabled for @dev while this function is being executed.
931  */
932 static int device_suspend_late(struct device *dev, pm_message_t state)
933 {
934         pm_callback_t callback = NULL;
935         char *info = NULL;
936
937         __pm_runtime_disable(dev, false);
938
939         if (dev->power.syscore)
940                 return 0;
941
942         if (dev->pm_domain) {
943                 info = "late power domain ";
944                 callback = pm_late_early_op(&dev->pm_domain->ops, state);
945         } else if (dev->type && dev->type->pm) {
946                 info = "late type ";
947                 callback = pm_late_early_op(dev->type->pm, state);
948         } else if (dev->class && dev->class->pm) {
949                 info = "late class ";
950                 callback = pm_late_early_op(dev->class->pm, state);
951         } else if (dev->bus && dev->bus->pm) {
952                 info = "late bus ";
953                 callback = pm_late_early_op(dev->bus->pm, state);
954         }
955
956         if (!callback && dev->driver && dev->driver->pm) {
957                 info = "late driver ";
958                 callback = pm_late_early_op(dev->driver->pm, state);
959         }
960
961         return dpm_run_callback(callback, dev, state, info);
962 }
963
964 /**
965  * dpm_suspend_late - Execute "late suspend" callbacks for all devices.
966  * @state: PM transition of the system being carried out.
967  */
968 static int dpm_suspend_late(pm_message_t state)
969 {
970         ktime_t starttime = ktime_get();
971         int error = 0;
972
973         mutex_lock(&dpm_list_mtx);
974         while (!list_empty(&dpm_suspended_list)) {
975                 struct device *dev = to_device(dpm_suspended_list.prev);
976
977                 get_device(dev);
978                 mutex_unlock(&dpm_list_mtx);
979
980                 error = device_suspend_late(dev, state);
981
982                 mutex_lock(&dpm_list_mtx);
983                 if (error) {
984                         pm_dev_err(dev, state, " late", error);
985                         suspend_stats.failed_suspend_late++;
986                         dpm_save_failed_step(SUSPEND_SUSPEND_LATE);
987                         dpm_save_failed_dev(dev_name(dev));
988                         put_device(dev);
989                         break;
990                 }
991                 if (!list_empty(&dev->power.entry))
992                         list_move(&dev->power.entry, &dpm_late_early_list);
993                 put_device(dev);
994
995                 if (pm_wakeup_pending()) {
996                         error = -EBUSY;
997                         break;
998                 }
999         }
1000         mutex_unlock(&dpm_list_mtx);
1001         if (error)
1002                 dpm_resume_early(resume_event(state));
1003         else
1004                 dpm_show_time(starttime, state, "late");
1005
1006         return error;
1007 }
1008
1009 /**
1010  * dpm_suspend_end - Execute "late" and "noirq" device suspend callbacks.
1011  * @state: PM transition of the system being carried out.
1012  */
1013 int dpm_suspend_end(pm_message_t state)
1014 {
1015         int error = dpm_suspend_late(state);
1016         if (error)
1017                 return error;
1018
1019         error = dpm_suspend_noirq(state);
1020         if (error) {
1021                 dpm_resume_early(resume_event(state));
1022                 return error;
1023         }
1024
1025         return 0;
1026 }
1027 EXPORT_SYMBOL_GPL(dpm_suspend_end);
1028
1029 /**
1030  * legacy_suspend - Execute a legacy (bus or class) suspend callback for device.
1031  * @dev: Device to suspend.
1032  * @state: PM transition of the system being carried out.
1033  * @cb: Suspend callback to execute.
1034  */
1035 static int legacy_suspend(struct device *dev, pm_message_t state,
1036                           int (*cb)(struct device *dev, pm_message_t state),
1037                           char *info)
1038 {
1039         int error;
1040         ktime_t calltime;
1041
1042         calltime = initcall_debug_start(dev);
1043
1044         error = cb(dev, state);
1045         suspend_report_result(cb, error);
1046
1047         initcall_debug_report(dev, calltime, error, state, info);
1048
1049         return error;
1050 }
1051
1052 /**
1053  * device_suspend - Execute "suspend" callbacks for given device.
1054  * @dev: Device to handle.
1055  * @state: PM transition of the system being carried out.
1056  * @async: If true, the device is being suspended asynchronously.
1057  */
1058 static int __device_suspend(struct device *dev, pm_message_t state, bool async)
1059 {
1060         pm_callback_t callback = NULL;
1061         char *info = NULL;
1062         int error = 0;
1063
1064         dpm_wait_for_children(dev, async);
1065
1066         if (async_error)
1067                 goto Complete;
1068
1069         /*
1070          * If a device configured to wake up the system from sleep states
1071          * has been suspended at run time and there's a resume request pending
1072          * for it, this is equivalent to the device signaling wakeup, so the
1073          * system suspend operation should be aborted.
1074          */
1075         if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
1076                 pm_wakeup_event(dev, 0);
1077
1078         if (pm_wakeup_pending()) {
1079                 async_error = -EBUSY;
1080                 goto Complete;
1081         }
1082
1083         if (dev->power.syscore)
1084                 goto Complete;
1085
1086         device_lock(dev);
1087
1088         if (dev->pm_domain) {
1089                 info = "power domain ";
1090                 callback = pm_op(&dev->pm_domain->ops, state);
1091                 goto Run;
1092         }
1093
1094         if (dev->type && dev->type->pm) {
1095                 info = "type ";
1096                 callback = pm_op(dev->type->pm, state);
1097                 goto Run;
1098         }
1099
1100         if (dev->class) {
1101                 if (dev->class->pm) {
1102                         info = "class ";
1103                         callback = pm_op(dev->class->pm, state);
1104                         goto Run;
1105                 } else if (dev->class->suspend) {
1106                         pm_dev_dbg(dev, state, "legacy class ");
1107                         error = legacy_suspend(dev, state, dev->class->suspend,
1108                                                 "legacy class ");
1109                         goto End;
1110                 }
1111         }
1112
1113         if (dev->bus) {
1114                 if (dev->bus->pm) {
1115                         info = "bus ";
1116                         callback = pm_op(dev->bus->pm, state);
1117                 } else if (dev->bus->suspend) {
1118                         pm_dev_dbg(dev, state, "legacy bus ");
1119                         error = legacy_suspend(dev, state, dev->bus->suspend,
1120                                                 "legacy bus ");
1121                         goto End;
1122                 }
1123         }
1124
1125  Run:
1126         if (!callback && dev->driver && dev->driver->pm) {
1127                 info = "driver ";
1128                 callback = pm_op(dev->driver->pm, state);
1129         }
1130
1131         error = dpm_run_callback(callback, dev, state, info);
1132
1133  End:
1134         if (!error) {
1135                 dev->power.is_suspended = true;
1136                 if (dev->power.wakeup_path
1137                     && dev->parent && !dev->parent->power.ignore_children)
1138                         dev->parent->power.wakeup_path = true;
1139         }
1140
1141         device_unlock(dev);
1142
1143  Complete:
1144         complete_all(&dev->power.completion);
1145         if (error)
1146                 async_error = error;
1147
1148         return error;
1149 }
1150
1151 static void async_suspend(void *data, async_cookie_t cookie)
1152 {
1153         struct device *dev = (struct device *)data;
1154         int error;
1155
1156         error = __device_suspend(dev, pm_transition, true);
1157         if (error) {
1158                 dpm_save_failed_dev(dev_name(dev));
1159                 pm_dev_err(dev, pm_transition, " async", error);
1160         }
1161
1162         put_device(dev);
1163 }
1164
1165 static int device_suspend(struct device *dev)
1166 {
1167         INIT_COMPLETION(dev->power.completion);
1168
1169         if (pm_async_enabled && dev->power.async_suspend) {
1170                 get_device(dev);
1171                 async_schedule(async_suspend, dev);
1172                 return 0;
1173         }
1174
1175         return __device_suspend(dev, pm_transition, false);
1176 }
1177
1178 /**
1179  * dpm_suspend - Execute "suspend" callbacks for all non-sysdev devices.
1180  * @state: PM transition of the system being carried out.
1181  */
1182 int dpm_suspend(pm_message_t state)
1183 {
1184         ktime_t starttime = ktime_get();
1185         int error = 0;
1186
1187         might_sleep();
1188
1189         mutex_lock(&dpm_list_mtx);
1190         pm_transition = state;
1191         async_error = 0;
1192         while (!list_empty(&dpm_prepared_list)) {
1193                 struct device *dev = to_device(dpm_prepared_list.prev);
1194
1195                 get_device(dev);
1196                 mutex_unlock(&dpm_list_mtx);
1197
1198                 error = device_suspend(dev);
1199
1200                 mutex_lock(&dpm_list_mtx);
1201                 if (error) {
1202                         pm_dev_err(dev, state, "", error);
1203                         dpm_save_failed_dev(dev_name(dev));
1204                         put_device(dev);
1205                         break;
1206                 }
1207                 if (!list_empty(&dev->power.entry))
1208                         list_move(&dev->power.entry, &dpm_suspended_list);
1209                 put_device(dev);
1210                 if (async_error)
1211                         break;
1212         }
1213         mutex_unlock(&dpm_list_mtx);
1214         async_synchronize_full();
1215         if (!error)
1216                 error = async_error;
1217         if (error) {
1218                 suspend_stats.failed_suspend++;
1219                 dpm_save_failed_step(SUSPEND_SUSPEND);
1220         } else
1221                 dpm_show_time(starttime, state, NULL);
1222         return error;
1223 }
1224
1225 /**
1226  * device_prepare - Prepare a device for system power transition.
1227  * @dev: Device to handle.
1228  * @state: PM transition of the system being carried out.
1229  *
1230  * Execute the ->prepare() callback(s) for given device.  No new children of the
1231  * device may be registered after this function has returned.
1232  */
1233 static int device_prepare(struct device *dev, pm_message_t state)
1234 {
1235         int (*callback)(struct device *) = NULL;
1236         char *info = NULL;
1237         int error = 0;
1238
1239         if (dev->power.syscore)
1240                 return 0;
1241
1242         /*
1243          * If a device's parent goes into runtime suspend at the wrong time,
1244          * it won't be possible to resume the device.  To prevent this we
1245          * block runtime suspend here, during the prepare phase, and allow
1246          * it again during the complete phase.
1247          */
1248         pm_runtime_get_noresume(dev);
1249
1250         device_lock(dev);
1251
1252         dev->power.wakeup_path = device_may_wakeup(dev);
1253
1254         if (dev->pm_domain) {
1255                 info = "preparing power domain ";
1256                 callback = dev->pm_domain->ops.prepare;
1257         } else if (dev->type && dev->type->pm) {
1258                 info = "preparing type ";
1259                 callback = dev->type->pm->prepare;
1260         } else if (dev->class && dev->class->pm) {
1261                 info = "preparing class ";
1262                 callback = dev->class->pm->prepare;
1263         } else if (dev->bus && dev->bus->pm) {
1264                 info = "preparing bus ";
1265                 callback = dev->bus->pm->prepare;
1266         }
1267
1268         if (!callback && dev->driver && dev->driver->pm) {
1269                 info = "preparing driver ";
1270                 callback = dev->driver->pm->prepare;
1271         }
1272
1273         if (callback) {
1274                 error = callback(dev);
1275                 suspend_report_result(callback, error);
1276         }
1277
1278         device_unlock(dev);
1279
1280         return error;
1281 }
1282
1283 /**
1284  * dpm_prepare - Prepare all non-sysdev devices for a system PM transition.
1285  * @state: PM transition of the system being carried out.
1286  *
1287  * Execute the ->prepare() callback(s) for all devices.
1288  */
1289 int dpm_prepare(pm_message_t state)
1290 {
1291         int error = 0;
1292
1293         might_sleep();
1294
1295         mutex_lock(&dpm_list_mtx);
1296         while (!list_empty(&dpm_list)) {
1297                 struct device *dev = to_device(dpm_list.next);
1298
1299                 get_device(dev);
1300                 mutex_unlock(&dpm_list_mtx);
1301
1302                 error = device_prepare(dev, state);
1303
1304                 mutex_lock(&dpm_list_mtx);
1305                 if (error) {
1306                         if (error == -EAGAIN) {
1307                                 put_device(dev);
1308                                 error = 0;
1309                                 continue;
1310                         }
1311                         printk(KERN_INFO "PM: Device %s not prepared "
1312                                 "for power transition: code %d\n",
1313                                 dev_name(dev), error);
1314                         put_device(dev);
1315                         break;
1316                 }
1317                 dev->power.is_prepared = true;
1318                 if (!list_empty(&dev->power.entry))
1319                         list_move_tail(&dev->power.entry, &dpm_prepared_list);
1320                 put_device(dev);
1321         }
1322         mutex_unlock(&dpm_list_mtx);
1323         return error;
1324 }
1325
1326 /**
1327  * dpm_suspend_start - Prepare devices for PM transition and suspend them.
1328  * @state: PM transition of the system being carried out.
1329  *
1330  * Prepare all non-sysdev devices for system PM transition and execute "suspend"
1331  * callbacks for them.
1332  */
1333 int dpm_suspend_start(pm_message_t state)
1334 {
1335         int error;
1336
1337         error = dpm_prepare(state);
1338         if (error) {
1339                 suspend_stats.failed_prepare++;
1340                 dpm_save_failed_step(SUSPEND_PREPARE);
1341         } else
1342                 error = dpm_suspend(state);
1343         return error;
1344 }
1345 EXPORT_SYMBOL_GPL(dpm_suspend_start);
1346
1347 void __suspend_report_result(const char *function, void *fn, int ret)
1348 {
1349         if (ret)
1350                 printk(KERN_ERR "%s(): %pF returns %d\n", function, fn, ret);
1351 }
1352 EXPORT_SYMBOL_GPL(__suspend_report_result);
1353
1354 /**
1355  * device_pm_wait_for_dev - Wait for suspend/resume of a device to complete.
1356  * @dev: Device to wait for.
1357  * @subordinate: Device that needs to wait for @dev.
1358  */
1359 int device_pm_wait_for_dev(struct device *subordinate, struct device *dev)
1360 {
1361         dpm_wait(dev, subordinate->power.async_suspend);
1362         return async_error;
1363 }
1364 EXPORT_SYMBOL_GPL(device_pm_wait_for_dev);
1365
1366 /**
1367  * dpm_for_each_dev - device iterator.
1368  * @data: data for the callback.
1369  * @fn: function to be called for each device.
1370  *
1371  * Iterate over devices in dpm_list, and call @fn for each device,
1372  * passing it @data.
1373  */
1374 void dpm_for_each_dev(void *data, void (*fn)(struct device *, void *))
1375 {
1376         struct device *dev;
1377
1378         if (!fn)
1379                 return;
1380
1381         device_pm_lock();
1382         list_for_each_entry(dev, &dpm_list, power.entry)
1383                 fn(dev, data);
1384         device_pm_unlock();
1385 }
1386 EXPORT_SYMBOL_GPL(dpm_for_each_dev);