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