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