xref: /openbmc/linux/drivers/acpi/device_pm.c (revision 9d749629)
1 /*
2  * drivers/acpi/device_pm.c - ACPI device power management routines.
3  *
4  * Copyright (C) 2012, Intel Corp.
5  * Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
6  *
7  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8  *
9  *  This program is free software; you can redistribute it and/or modify
10  *  it under the terms of the GNU General Public License version 2 as published
11  *  by the Free Software Foundation.
12  *
13  *  This program is distributed in the hope that it will be useful, but
14  *  WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  *  General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License along
19  *  with this program; if not, write to the Free Software Foundation, Inc.,
20  *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
21  *
22  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23  */
24 
25 #include <linux/device.h>
26 #include <linux/export.h>
27 #include <linux/mutex.h>
28 #include <linux/pm_qos.h>
29 #include <linux/pm_runtime.h>
30 
31 #include <acpi/acpi.h>
32 #include <acpi/acpi_bus.h>
33 #include <acpi/acpi_drivers.h>
34 
35 #include "internal.h"
36 
37 #define _COMPONENT	ACPI_POWER_COMPONENT
38 ACPI_MODULE_NAME("device_pm");
39 
40 static DEFINE_MUTEX(acpi_pm_notifier_lock);
41 
42 /**
43  * acpi_add_pm_notifier - Register PM notifier for given ACPI device.
44  * @adev: ACPI device to add the notifier for.
45  * @context: Context information to pass to the notifier routine.
46  *
47  * NOTE: @adev need not be a run-wake or wakeup device to be a valid source of
48  * PM wakeup events.  For example, wakeup events may be generated for bridges
49  * if one of the devices below the bridge is signaling wakeup, even if the
50  * bridge itself doesn't have a wakeup GPE associated with it.
51  */
52 acpi_status acpi_add_pm_notifier(struct acpi_device *adev,
53 				 acpi_notify_handler handler, void *context)
54 {
55 	acpi_status status = AE_ALREADY_EXISTS;
56 
57 	mutex_lock(&acpi_pm_notifier_lock);
58 
59 	if (adev->wakeup.flags.notifier_present)
60 		goto out;
61 
62 	status = acpi_install_notify_handler(adev->handle,
63 					     ACPI_SYSTEM_NOTIFY,
64 					     handler, context);
65 	if (ACPI_FAILURE(status))
66 		goto out;
67 
68 	adev->wakeup.flags.notifier_present = true;
69 
70  out:
71 	mutex_unlock(&acpi_pm_notifier_lock);
72 	return status;
73 }
74 
75 /**
76  * acpi_remove_pm_notifier - Unregister PM notifier from given ACPI device.
77  * @adev: ACPI device to remove the notifier from.
78  */
79 acpi_status acpi_remove_pm_notifier(struct acpi_device *adev,
80 				    acpi_notify_handler handler)
81 {
82 	acpi_status status = AE_BAD_PARAMETER;
83 
84 	mutex_lock(&acpi_pm_notifier_lock);
85 
86 	if (!adev->wakeup.flags.notifier_present)
87 		goto out;
88 
89 	status = acpi_remove_notify_handler(adev->handle,
90 					    ACPI_SYSTEM_NOTIFY,
91 					    handler);
92 	if (ACPI_FAILURE(status))
93 		goto out;
94 
95 	adev->wakeup.flags.notifier_present = false;
96 
97  out:
98 	mutex_unlock(&acpi_pm_notifier_lock);
99 	return status;
100 }
101 
102 /**
103  * acpi_power_state_string - String representation of ACPI device power state.
104  * @state: ACPI device power state to return the string representation of.
105  */
106 const char *acpi_power_state_string(int state)
107 {
108 	switch (state) {
109 	case ACPI_STATE_D0:
110 		return "D0";
111 	case ACPI_STATE_D1:
112 		return "D1";
113 	case ACPI_STATE_D2:
114 		return "D2";
115 	case ACPI_STATE_D3_HOT:
116 		return "D3hot";
117 	case ACPI_STATE_D3_COLD:
118 		return "D3cold";
119 	default:
120 		return "(unknown)";
121 	}
122 }
123 
124 /**
125  * acpi_device_get_power - Get power state of an ACPI device.
126  * @device: Device to get the power state of.
127  * @state: Place to store the power state of the device.
128  *
129  * This function does not update the device's power.state field, but it may
130  * update its parent's power.state field (when the parent's power state is
131  * unknown and the device's power state turns out to be D0).
132  */
133 int acpi_device_get_power(struct acpi_device *device, int *state)
134 {
135 	int result = ACPI_STATE_UNKNOWN;
136 
137 	if (!device || !state)
138 		return -EINVAL;
139 
140 	if (!device->flags.power_manageable) {
141 		/* TBD: Non-recursive algorithm for walking up hierarchy. */
142 		*state = device->parent ?
143 			device->parent->power.state : ACPI_STATE_D0;
144 		goto out;
145 	}
146 
147 	/*
148 	 * Get the device's power state either directly (via _PSC) or
149 	 * indirectly (via power resources).
150 	 */
151 	if (device->power.flags.explicit_get) {
152 		unsigned long long psc;
153 		acpi_status status = acpi_evaluate_integer(device->handle,
154 							   "_PSC", NULL, &psc);
155 		if (ACPI_FAILURE(status))
156 			return -ENODEV;
157 
158 		result = psc;
159 	}
160 	/* The test below covers ACPI_STATE_UNKNOWN too. */
161 	if (result <= ACPI_STATE_D2) {
162 	  ; /* Do nothing. */
163 	} else if (device->power.flags.power_resources) {
164 		int error = acpi_power_get_inferred_state(device, &result);
165 		if (error)
166 			return error;
167 	} else if (result == ACPI_STATE_D3_HOT) {
168 		result = ACPI_STATE_D3;
169 	}
170 
171 	/*
172 	 * If we were unsure about the device parent's power state up to this
173 	 * point, the fact that the device is in D0 implies that the parent has
174 	 * to be in D0 too.
175 	 */
176 	if (device->parent && device->parent->power.state == ACPI_STATE_UNKNOWN
177 	    && result == ACPI_STATE_D0)
178 		device->parent->power.state = ACPI_STATE_D0;
179 
180 	*state = result;
181 
182  out:
183 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] power state is %s\n",
184 			  device->pnp.bus_id, acpi_power_state_string(*state)));
185 
186 	return 0;
187 }
188 
189 static int acpi_dev_pm_explicit_set(struct acpi_device *adev, int state)
190 {
191 	if (adev->power.states[state].flags.explicit_set) {
192 		char method[5] = { '_', 'P', 'S', '0' + state, '\0' };
193 		acpi_status status;
194 
195 		status = acpi_evaluate_object(adev->handle, method, NULL, NULL);
196 		if (ACPI_FAILURE(status))
197 			return -ENODEV;
198 	}
199 	return 0;
200 }
201 
202 /**
203  * acpi_device_set_power - Set power state of an ACPI device.
204  * @device: Device to set the power state of.
205  * @state: New power state to set.
206  *
207  * Callers must ensure that the device is power manageable before using this
208  * function.
209  */
210 int acpi_device_set_power(struct acpi_device *device, int state)
211 {
212 	int result = 0;
213 	bool cut_power = false;
214 
215 	if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3_COLD))
216 		return -EINVAL;
217 
218 	/* Make sure this is a valid target state */
219 
220 	if (state == device->power.state) {
221 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at %s\n",
222 				  acpi_power_state_string(state)));
223 		return 0;
224 	}
225 
226 	if (!device->power.states[state].flags.valid) {
227 		printk(KERN_WARNING PREFIX "Device does not support %s\n",
228 		       acpi_power_state_string(state));
229 		return -ENODEV;
230 	}
231 	if (device->parent && (state < device->parent->power.state)) {
232 		printk(KERN_WARNING PREFIX
233 			      "Cannot set device to a higher-powered"
234 			      " state than parent\n");
235 		return -ENODEV;
236 	}
237 
238 	/* For D3cold we should first transition into D3hot. */
239 	if (state == ACPI_STATE_D3_COLD
240 	    && device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible) {
241 		state = ACPI_STATE_D3_HOT;
242 		cut_power = true;
243 	}
244 
245 	if (state < device->power.state && state != ACPI_STATE_D0
246 	    && device->power.state >= ACPI_STATE_D3_HOT) {
247 		printk(KERN_WARNING PREFIX
248 			"Cannot transition to non-D0 state from D3\n");
249 		return -ENODEV;
250 	}
251 
252 	/*
253 	 * Transition Power
254 	 * ----------------
255 	 * In accordance with the ACPI specification first apply power (via
256 	 * power resources) and then evalute _PSx.
257 	 */
258 	if (device->power.flags.power_resources) {
259 		result = acpi_power_transition(device, state);
260 		if (result)
261 			goto end;
262 	}
263 	result = acpi_dev_pm_explicit_set(device, state);
264 	if (result)
265 		goto end;
266 
267 	if (cut_power) {
268 		device->power.state = state;
269 		state = ACPI_STATE_D3_COLD;
270 		result = acpi_power_transition(device, state);
271 	}
272 
273  end:
274 	if (result) {
275 		printk(KERN_WARNING PREFIX
276 			      "Device [%s] failed to transition to %s\n",
277 			      device->pnp.bus_id,
278 			      acpi_power_state_string(state));
279 	} else {
280 		device->power.state = state;
281 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
282 				  "Device [%s] transitioned to %s\n",
283 				  device->pnp.bus_id,
284 				  acpi_power_state_string(state)));
285 	}
286 
287 	return result;
288 }
289 EXPORT_SYMBOL(acpi_device_set_power);
290 
291 int acpi_bus_set_power(acpi_handle handle, int state)
292 {
293 	struct acpi_device *device;
294 	int result;
295 
296 	result = acpi_bus_get_device(handle, &device);
297 	if (result)
298 		return result;
299 
300 	if (!device->flags.power_manageable) {
301 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
302 				"Device [%s] is not power manageable\n",
303 				dev_name(&device->dev)));
304 		return -ENODEV;
305 	}
306 
307 	return acpi_device_set_power(device, state);
308 }
309 EXPORT_SYMBOL(acpi_bus_set_power);
310 
311 int acpi_bus_init_power(struct acpi_device *device)
312 {
313 	int state;
314 	int result;
315 
316 	if (!device)
317 		return -EINVAL;
318 
319 	device->power.state = ACPI_STATE_UNKNOWN;
320 
321 	result = acpi_device_get_power(device, &state);
322 	if (result)
323 		return result;
324 
325 	if (state < ACPI_STATE_D3_COLD && device->power.flags.power_resources) {
326 		result = acpi_power_on_resources(device, state);
327 		if (result)
328 			return result;
329 
330 		result = acpi_dev_pm_explicit_set(device, state);
331 		if (result)
332 			return result;
333 	} else if (state == ACPI_STATE_UNKNOWN) {
334 		/* No power resources and missing _PSC? Try to force D0. */
335 		state = ACPI_STATE_D0;
336 		result = acpi_dev_pm_explicit_set(device, state);
337 		if (result)
338 			return result;
339 	}
340 	device->power.state = state;
341 	return 0;
342 }
343 
344 int acpi_bus_update_power(acpi_handle handle, int *state_p)
345 {
346 	struct acpi_device *device;
347 	int state;
348 	int result;
349 
350 	result = acpi_bus_get_device(handle, &device);
351 	if (result)
352 		return result;
353 
354 	result = acpi_device_get_power(device, &state);
355 	if (result)
356 		return result;
357 
358 	if (state == ACPI_STATE_UNKNOWN)
359 		state = ACPI_STATE_D0;
360 
361 	result = acpi_device_set_power(device, state);
362 	if (!result && state_p)
363 		*state_p = state;
364 
365 	return result;
366 }
367 EXPORT_SYMBOL_GPL(acpi_bus_update_power);
368 
369 bool acpi_bus_power_manageable(acpi_handle handle)
370 {
371 	struct acpi_device *device;
372 	int result;
373 
374 	result = acpi_bus_get_device(handle, &device);
375 	return result ? false : device->flags.power_manageable;
376 }
377 EXPORT_SYMBOL(acpi_bus_power_manageable);
378 
379 bool acpi_bus_can_wakeup(acpi_handle handle)
380 {
381 	struct acpi_device *device;
382 	int result;
383 
384 	result = acpi_bus_get_device(handle, &device);
385 	return result ? false : device->wakeup.flags.valid;
386 }
387 EXPORT_SYMBOL(acpi_bus_can_wakeup);
388 
389 /**
390  * acpi_device_power_state - Get preferred power state of ACPI device.
391  * @dev: Device whose preferred target power state to return.
392  * @adev: ACPI device node corresponding to @dev.
393  * @target_state: System state to match the resultant device state.
394  * @d_max_in: Deepest low-power state to take into consideration.
395  * @d_min_p: Location to store the upper limit of the allowed states range.
396  * Return value: Preferred power state of the device on success, -ENODEV
397  * (if there's no 'struct acpi_device' for @dev) or -EINVAL on failure
398  *
399  * Find the lowest power (highest number) ACPI device power state that the
400  * device can be in while the system is in the state represented by
401  * @target_state.  If @d_min_p is set, the highest power (lowest number) device
402  * power state that @dev can be in for the given system sleep state is stored
403  * at the location pointed to by it.
404  *
405  * Callers must ensure that @dev and @adev are valid pointers and that @adev
406  * actually corresponds to @dev before using this function.
407  */
408 int acpi_device_power_state(struct device *dev, struct acpi_device *adev,
409 			    u32 target_state, int d_max_in, int *d_min_p)
410 {
411 	char acpi_method[] = "_SxD";
412 	unsigned long long d_min, d_max;
413 	bool wakeup = false;
414 
415 	if (d_max_in < ACPI_STATE_D0 || d_max_in > ACPI_STATE_D3)
416 		return -EINVAL;
417 
418 	if (d_max_in > ACPI_STATE_D3_HOT) {
419 		enum pm_qos_flags_status stat;
420 
421 		stat = dev_pm_qos_flags(dev, PM_QOS_FLAG_NO_POWER_OFF);
422 		if (stat == PM_QOS_FLAGS_ALL)
423 			d_max_in = ACPI_STATE_D3_HOT;
424 	}
425 
426 	acpi_method[2] = '0' + target_state;
427 	/*
428 	 * If the sleep state is S0, the lowest limit from ACPI is D3,
429 	 * but if the device has _S0W, we will use the value from _S0W
430 	 * as the lowest limit from ACPI.  Finally, we will constrain
431 	 * the lowest limit with the specified one.
432 	 */
433 	d_min = ACPI_STATE_D0;
434 	d_max = ACPI_STATE_D3;
435 
436 	/*
437 	 * If present, _SxD methods return the minimum D-state (highest power
438 	 * state) we can use for the corresponding S-states.  Otherwise, the
439 	 * minimum D-state is D0 (ACPI 3.x).
440 	 *
441 	 * NOTE: We rely on acpi_evaluate_integer() not clobbering the integer
442 	 * provided -- that's our fault recovery, we ignore retval.
443 	 */
444 	if (target_state > ACPI_STATE_S0) {
445 		acpi_evaluate_integer(adev->handle, acpi_method, NULL, &d_min);
446 		wakeup = device_may_wakeup(dev) && adev->wakeup.flags.valid
447 			&& adev->wakeup.sleep_state >= target_state;
448 	} else if (dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) !=
449 			PM_QOS_FLAGS_NONE) {
450 		wakeup = adev->wakeup.flags.valid;
451 	}
452 
453 	/*
454 	 * If _PRW says we can wake up the system from the target sleep state,
455 	 * the D-state returned by _SxD is sufficient for that (we assume a
456 	 * wakeup-aware driver if wake is set).  Still, if _SxW exists
457 	 * (ACPI 3.x), it should return the maximum (lowest power) D-state that
458 	 * can wake the system.  _S0W may be valid, too.
459 	 */
460 	if (wakeup) {
461 		acpi_status status;
462 
463 		acpi_method[3] = 'W';
464 		status = acpi_evaluate_integer(adev->handle, acpi_method, NULL,
465 						&d_max);
466 		if (ACPI_FAILURE(status)) {
467 			if (target_state != ACPI_STATE_S0 ||
468 			    status != AE_NOT_FOUND)
469 				d_max = d_min;
470 		} else if (d_max < d_min) {
471 			/* Warn the user of the broken DSDT */
472 			printk(KERN_WARNING "ACPI: Wrong value from %s\n",
473 				acpi_method);
474 			/* Sanitize it */
475 			d_min = d_max;
476 		}
477 	}
478 
479 	if (d_max_in < d_min)
480 		return -EINVAL;
481 	if (d_min_p)
482 		*d_min_p = d_min;
483 	/* constrain d_max with specified lowest limit (max number) */
484 	if (d_max > d_max_in) {
485 		for (d_max = d_max_in; d_max > d_min; d_max--) {
486 			if (adev->power.states[d_max].flags.valid)
487 				break;
488 		}
489 	}
490 	return d_max;
491 }
492 EXPORT_SYMBOL_GPL(acpi_device_power_state);
493 
494 /**
495  * acpi_pm_device_sleep_state - Get preferred power state of ACPI device.
496  * @dev: Device whose preferred target power state to return.
497  * @d_min_p: Location to store the upper limit of the allowed states range.
498  * @d_max_in: Deepest low-power state to take into consideration.
499  * Return value: Preferred power state of the device on success, -ENODEV
500  * (if there's no 'struct acpi_device' for @dev) or -EINVAL on failure
501  *
502  * The caller must ensure that @dev is valid before using this function.
503  */
504 int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p, int d_max_in)
505 {
506 	acpi_handle handle = DEVICE_ACPI_HANDLE(dev);
507 	struct acpi_device *adev;
508 
509 	if (!handle || acpi_bus_get_device(handle, &adev)) {
510 		dev_dbg(dev, "ACPI handle without context in %s!\n", __func__);
511 		return -ENODEV;
512 	}
513 
514 	return acpi_device_power_state(dev, adev, acpi_target_system_state(),
515 				       d_max_in, d_min_p);
516 }
517 EXPORT_SYMBOL(acpi_pm_device_sleep_state);
518 
519 #ifdef CONFIG_PM_RUNTIME
520 /**
521  * acpi_wakeup_device - Wakeup notification handler for ACPI devices.
522  * @handle: ACPI handle of the device the notification is for.
523  * @event: Type of the signaled event.
524  * @context: Device corresponding to @handle.
525  */
526 static void acpi_wakeup_device(acpi_handle handle, u32 event, void *context)
527 {
528 	struct device *dev = context;
529 
530 	if (event == ACPI_NOTIFY_DEVICE_WAKE && dev) {
531 		pm_wakeup_event(dev, 0);
532 		pm_runtime_resume(dev);
533 	}
534 }
535 
536 /**
537  * __acpi_device_run_wake - Enable/disable runtime remote wakeup for device.
538  * @adev: ACPI device to enable/disable the remote wakeup for.
539  * @enable: Whether to enable or disable the wakeup functionality.
540  *
541  * Enable/disable the GPE associated with @adev so that it can generate
542  * wakeup signals for the device in response to external (remote) events and
543  * enable/disable device wakeup power.
544  *
545  * Callers must ensure that @adev is a valid ACPI device node before executing
546  * this function.
547  */
548 int __acpi_device_run_wake(struct acpi_device *adev, bool enable)
549 {
550 	struct acpi_device_wakeup *wakeup = &adev->wakeup;
551 
552 	if (enable) {
553 		acpi_status res;
554 		int error;
555 
556 		error = acpi_enable_wakeup_device_power(adev, ACPI_STATE_S0);
557 		if (error)
558 			return error;
559 
560 		res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number);
561 		if (ACPI_FAILURE(res)) {
562 			acpi_disable_wakeup_device_power(adev);
563 			return -EIO;
564 		}
565 	} else {
566 		acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
567 		acpi_disable_wakeup_device_power(adev);
568 	}
569 	return 0;
570 }
571 
572 /**
573  * acpi_pm_device_run_wake - Enable/disable remote wakeup for given device.
574  * @dev: Device to enable/disable the platform to wake up.
575  * @enable: Whether to enable or disable the wakeup functionality.
576  */
577 int acpi_pm_device_run_wake(struct device *phys_dev, bool enable)
578 {
579 	struct acpi_device *adev;
580 	acpi_handle handle;
581 
582 	if (!device_run_wake(phys_dev))
583 		return -EINVAL;
584 
585 	handle = DEVICE_ACPI_HANDLE(phys_dev);
586 	if (!handle || acpi_bus_get_device(handle, &adev)) {
587 		dev_dbg(phys_dev, "ACPI handle without context in %s!\n",
588 			__func__);
589 		return -ENODEV;
590 	}
591 
592 	return __acpi_device_run_wake(adev, enable);
593 }
594 EXPORT_SYMBOL(acpi_pm_device_run_wake);
595 #else
596 static inline void acpi_wakeup_device(acpi_handle handle, u32 event,
597 				      void *context) {}
598 #endif /* CONFIG_PM_RUNTIME */
599 
600 #ifdef CONFIG_PM_SLEEP
601 /**
602  * __acpi_device_sleep_wake - Enable or disable device to wake up the system.
603  * @dev: Device to enable/desible to wake up the system.
604  * @target_state: System state the device is supposed to wake up from.
605  * @enable: Whether to enable or disable @dev to wake up the system.
606  */
607 int __acpi_device_sleep_wake(struct acpi_device *adev, u32 target_state,
608 			     bool enable)
609 {
610 	return enable ?
611 		acpi_enable_wakeup_device_power(adev, target_state) :
612 		acpi_disable_wakeup_device_power(adev);
613 }
614 
615 /**
616  * acpi_pm_device_sleep_wake - Enable or disable device to wake up the system.
617  * @dev: Device to enable/desible to wake up the system from sleep states.
618  * @enable: Whether to enable or disable @dev to wake up the system.
619  */
620 int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
621 {
622 	acpi_handle handle;
623 	struct acpi_device *adev;
624 	int error;
625 
626 	if (!device_can_wakeup(dev))
627 		return -EINVAL;
628 
629 	handle = DEVICE_ACPI_HANDLE(dev);
630 	if (!handle || acpi_bus_get_device(handle, &adev)) {
631 		dev_dbg(dev, "ACPI handle without context in %s!\n", __func__);
632 		return -ENODEV;
633 	}
634 
635 	error = __acpi_device_sleep_wake(adev, acpi_target_system_state(),
636 					 enable);
637 	if (!error)
638 		dev_info(dev, "System wakeup %s by ACPI\n",
639 				enable ? "enabled" : "disabled");
640 
641 	return error;
642 }
643 #endif /* CONFIG_PM_SLEEP */
644 
645 /**
646  * acpi_dev_pm_get_node - Get ACPI device node for the given physical device.
647  * @dev: Device to get the ACPI node for.
648  */
649 struct acpi_device *acpi_dev_pm_get_node(struct device *dev)
650 {
651 	acpi_handle handle = DEVICE_ACPI_HANDLE(dev);
652 	struct acpi_device *adev;
653 
654 	return handle && !acpi_bus_get_device(handle, &adev) ? adev : NULL;
655 }
656 
657 /**
658  * acpi_dev_pm_low_power - Put ACPI device into a low-power state.
659  * @dev: Device to put into a low-power state.
660  * @adev: ACPI device node corresponding to @dev.
661  * @system_state: System state to choose the device state for.
662  */
663 static int acpi_dev_pm_low_power(struct device *dev, struct acpi_device *adev,
664 				 u32 system_state)
665 {
666 	int power_state;
667 
668 	if (!acpi_device_power_manageable(adev))
669 		return 0;
670 
671 	power_state = acpi_device_power_state(dev, adev, system_state,
672 					      ACPI_STATE_D3, NULL);
673 	if (power_state < ACPI_STATE_D0 || power_state > ACPI_STATE_D3)
674 		return -EIO;
675 
676 	return acpi_device_set_power(adev, power_state);
677 }
678 
679 /**
680  * acpi_dev_pm_full_power - Put ACPI device into the full-power state.
681  * @adev: ACPI device node to put into the full-power state.
682  */
683 static int acpi_dev_pm_full_power(struct acpi_device *adev)
684 {
685 	return acpi_device_power_manageable(adev) ?
686 		acpi_device_set_power(adev, ACPI_STATE_D0) : 0;
687 }
688 
689 #ifdef CONFIG_PM_RUNTIME
690 /**
691  * acpi_dev_runtime_suspend - Put device into a low-power state using ACPI.
692  * @dev: Device to put into a low-power state.
693  *
694  * Put the given device into a runtime low-power state using the standard ACPI
695  * mechanism.  Set up remote wakeup if desired, choose the state to put the
696  * device into (this checks if remote wakeup is expected to work too), and set
697  * the power state of the device.
698  */
699 int acpi_dev_runtime_suspend(struct device *dev)
700 {
701 	struct acpi_device *adev = acpi_dev_pm_get_node(dev);
702 	bool remote_wakeup;
703 	int error;
704 
705 	if (!adev)
706 		return 0;
707 
708 	remote_wakeup = dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) >
709 				PM_QOS_FLAGS_NONE;
710 	error = __acpi_device_run_wake(adev, remote_wakeup);
711 	if (remote_wakeup && error)
712 		return -EAGAIN;
713 
714 	error = acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0);
715 	if (error)
716 		__acpi_device_run_wake(adev, false);
717 
718 	return error;
719 }
720 EXPORT_SYMBOL_GPL(acpi_dev_runtime_suspend);
721 
722 /**
723  * acpi_dev_runtime_resume - Put device into the full-power state using ACPI.
724  * @dev: Device to put into the full-power state.
725  *
726  * Put the given device into the full-power state using the standard ACPI
727  * mechanism at run time.  Set the power state of the device to ACPI D0 and
728  * disable remote wakeup.
729  */
730 int acpi_dev_runtime_resume(struct device *dev)
731 {
732 	struct acpi_device *adev = acpi_dev_pm_get_node(dev);
733 	int error;
734 
735 	if (!adev)
736 		return 0;
737 
738 	error = acpi_dev_pm_full_power(adev);
739 	__acpi_device_run_wake(adev, false);
740 	return error;
741 }
742 EXPORT_SYMBOL_GPL(acpi_dev_runtime_resume);
743 
744 /**
745  * acpi_subsys_runtime_suspend - Suspend device using ACPI.
746  * @dev: Device to suspend.
747  *
748  * Carry out the generic runtime suspend procedure for @dev and use ACPI to put
749  * it into a runtime low-power state.
750  */
751 int acpi_subsys_runtime_suspend(struct device *dev)
752 {
753 	int ret = pm_generic_runtime_suspend(dev);
754 	return ret ? ret : acpi_dev_runtime_suspend(dev);
755 }
756 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_suspend);
757 
758 /**
759  * acpi_subsys_runtime_resume - Resume device using ACPI.
760  * @dev: Device to Resume.
761  *
762  * Use ACPI to put the given device into the full-power state and carry out the
763  * generic runtime resume procedure for it.
764  */
765 int acpi_subsys_runtime_resume(struct device *dev)
766 {
767 	int ret = acpi_dev_runtime_resume(dev);
768 	return ret ? ret : pm_generic_runtime_resume(dev);
769 }
770 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_resume);
771 #endif /* CONFIG_PM_RUNTIME */
772 
773 #ifdef CONFIG_PM_SLEEP
774 /**
775  * acpi_dev_suspend_late - Put device into a low-power state using ACPI.
776  * @dev: Device to put into a low-power state.
777  *
778  * Put the given device into a low-power state during system transition to a
779  * sleep state using the standard ACPI mechanism.  Set up system wakeup if
780  * desired, choose the state to put the device into (this checks if system
781  * wakeup is expected to work too), and set the power state of the device.
782  */
783 int acpi_dev_suspend_late(struct device *dev)
784 {
785 	struct acpi_device *adev = acpi_dev_pm_get_node(dev);
786 	u32 target_state;
787 	bool wakeup;
788 	int error;
789 
790 	if (!adev)
791 		return 0;
792 
793 	target_state = acpi_target_system_state();
794 	wakeup = device_may_wakeup(dev);
795 	error = __acpi_device_sleep_wake(adev, target_state, wakeup);
796 	if (wakeup && error)
797 		return error;
798 
799 	error = acpi_dev_pm_low_power(dev, adev, target_state);
800 	if (error)
801 		__acpi_device_sleep_wake(adev, ACPI_STATE_UNKNOWN, false);
802 
803 	return error;
804 }
805 EXPORT_SYMBOL_GPL(acpi_dev_suspend_late);
806 
807 /**
808  * acpi_dev_resume_early - Put device into the full-power state using ACPI.
809  * @dev: Device to put into the full-power state.
810  *
811  * Put the given device into the full-power state using the standard ACPI
812  * mechanism during system transition to the working state.  Set the power
813  * state of the device to ACPI D0 and disable remote wakeup.
814  */
815 int acpi_dev_resume_early(struct device *dev)
816 {
817 	struct acpi_device *adev = acpi_dev_pm_get_node(dev);
818 	int error;
819 
820 	if (!adev)
821 		return 0;
822 
823 	error = acpi_dev_pm_full_power(adev);
824 	__acpi_device_sleep_wake(adev, ACPI_STATE_UNKNOWN, false);
825 	return error;
826 }
827 EXPORT_SYMBOL_GPL(acpi_dev_resume_early);
828 
829 /**
830  * acpi_subsys_prepare - Prepare device for system transition to a sleep state.
831  * @dev: Device to prepare.
832  */
833 int acpi_subsys_prepare(struct device *dev)
834 {
835 	/*
836 	 * Follow PCI and resume devices suspended at run time before running
837 	 * their system suspend callbacks.
838 	 */
839 	pm_runtime_resume(dev);
840 	return pm_generic_prepare(dev);
841 }
842 EXPORT_SYMBOL_GPL(acpi_subsys_prepare);
843 
844 /**
845  * acpi_subsys_suspend_late - Suspend device using ACPI.
846  * @dev: Device to suspend.
847  *
848  * Carry out the generic late suspend procedure for @dev and use ACPI to put
849  * it into a low-power state during system transition into a sleep state.
850  */
851 int acpi_subsys_suspend_late(struct device *dev)
852 {
853 	int ret = pm_generic_suspend_late(dev);
854 	return ret ? ret : acpi_dev_suspend_late(dev);
855 }
856 EXPORT_SYMBOL_GPL(acpi_subsys_suspend_late);
857 
858 /**
859  * acpi_subsys_resume_early - Resume device using ACPI.
860  * @dev: Device to Resume.
861  *
862  * Use ACPI to put the given device into the full-power state and carry out the
863  * generic early resume procedure for it during system transition into the
864  * working state.
865  */
866 int acpi_subsys_resume_early(struct device *dev)
867 {
868 	int ret = acpi_dev_resume_early(dev);
869 	return ret ? ret : pm_generic_resume_early(dev);
870 }
871 EXPORT_SYMBOL_GPL(acpi_subsys_resume_early);
872 #endif /* CONFIG_PM_SLEEP */
873 
874 static struct dev_pm_domain acpi_general_pm_domain = {
875 	.ops = {
876 #ifdef CONFIG_PM_RUNTIME
877 		.runtime_suspend = acpi_subsys_runtime_suspend,
878 		.runtime_resume = acpi_subsys_runtime_resume,
879 		.runtime_idle = pm_generic_runtime_idle,
880 #endif
881 #ifdef CONFIG_PM_SLEEP
882 		.prepare = acpi_subsys_prepare,
883 		.suspend_late = acpi_subsys_suspend_late,
884 		.resume_early = acpi_subsys_resume_early,
885 		.poweroff_late = acpi_subsys_suspend_late,
886 		.restore_early = acpi_subsys_resume_early,
887 #endif
888 	},
889 };
890 
891 /**
892  * acpi_dev_pm_attach - Prepare device for ACPI power management.
893  * @dev: Device to prepare.
894  * @power_on: Whether or not to power on the device.
895  *
896  * If @dev has a valid ACPI handle that has a valid struct acpi_device object
897  * attached to it, install a wakeup notification handler for the device and
898  * add it to the general ACPI PM domain.  If @power_on is set, the device will
899  * be put into the ACPI D0 state before the function returns.
900  *
901  * This assumes that the @dev's bus type uses generic power management callbacks
902  * (or doesn't use any power management callbacks at all).
903  *
904  * Callers must ensure proper synchronization of this function with power
905  * management callbacks.
906  */
907 int acpi_dev_pm_attach(struct device *dev, bool power_on)
908 {
909 	struct acpi_device *adev = acpi_dev_pm_get_node(dev);
910 
911 	if (!adev)
912 		return -ENODEV;
913 
914 	if (dev->pm_domain)
915 		return -EEXIST;
916 
917 	acpi_add_pm_notifier(adev, acpi_wakeup_device, dev);
918 	dev->pm_domain = &acpi_general_pm_domain;
919 	if (power_on) {
920 		acpi_dev_pm_full_power(adev);
921 		__acpi_device_run_wake(adev, false);
922 	}
923 	return 0;
924 }
925 EXPORT_SYMBOL_GPL(acpi_dev_pm_attach);
926 
927 /**
928  * acpi_dev_pm_detach - Remove ACPI power management from the device.
929  * @dev: Device to take care of.
930  * @power_off: Whether or not to try to remove power from the device.
931  *
932  * Remove the device from the general ACPI PM domain and remove its wakeup
933  * notifier.  If @power_off is set, additionally remove power from the device if
934  * possible.
935  *
936  * Callers must ensure proper synchronization of this function with power
937  * management callbacks.
938  */
939 void acpi_dev_pm_detach(struct device *dev, bool power_off)
940 {
941 	struct acpi_device *adev = acpi_dev_pm_get_node(dev);
942 
943 	if (adev && dev->pm_domain == &acpi_general_pm_domain) {
944 		dev->pm_domain = NULL;
945 		acpi_remove_pm_notifier(adev, acpi_wakeup_device);
946 		if (power_off) {
947 			/*
948 			 * If the device's PM QoS resume latency limit or flags
949 			 * have been exposed to user space, they have to be
950 			 * hidden at this point, so that they don't affect the
951 			 * choice of the low-power state to put the device into.
952 			 */
953 			dev_pm_qos_hide_latency_limit(dev);
954 			dev_pm_qos_hide_flags(dev);
955 			__acpi_device_run_wake(adev, false);
956 			acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0);
957 		}
958 	}
959 }
960 EXPORT_SYMBOL_GPL(acpi_dev_pm_detach);
961 
962 /**
963  * acpi_dev_pm_add_dependent - Add physical device depending for PM.
964  * @handle: Handle of ACPI device node.
965  * @depdev: Device depending on that node for PM.
966  */
967 void acpi_dev_pm_add_dependent(acpi_handle handle, struct device *depdev)
968 {
969 	struct acpi_device_physical_node *dep;
970 	struct acpi_device *adev;
971 
972 	if (!depdev || acpi_bus_get_device(handle, &adev))
973 		return;
974 
975 	mutex_lock(&adev->physical_node_lock);
976 
977 	list_for_each_entry(dep, &adev->power_dependent, node)
978 		if (dep->dev == depdev)
979 			goto out;
980 
981 	dep = kzalloc(sizeof(*dep), GFP_KERNEL);
982 	if (dep) {
983 		dep->dev = depdev;
984 		list_add_tail(&dep->node, &adev->power_dependent);
985 	}
986 
987  out:
988 	mutex_unlock(&adev->physical_node_lock);
989 }
990 EXPORT_SYMBOL_GPL(acpi_dev_pm_add_dependent);
991 
992 /**
993  * acpi_dev_pm_remove_dependent - Remove physical device depending for PM.
994  * @handle: Handle of ACPI device node.
995  * @depdev: Device depending on that node for PM.
996  */
997 void acpi_dev_pm_remove_dependent(acpi_handle handle, struct device *depdev)
998 {
999 	struct acpi_device_physical_node *dep;
1000 	struct acpi_device *adev;
1001 
1002 	if (!depdev || acpi_bus_get_device(handle, &adev))
1003 		return;
1004 
1005 	mutex_lock(&adev->physical_node_lock);
1006 
1007 	list_for_each_entry(dep, &adev->power_dependent, node)
1008 		if (dep->dev == depdev) {
1009 			list_del(&dep->node);
1010 			kfree(dep);
1011 			break;
1012 		}
1013 
1014 	mutex_unlock(&adev->physical_node_lock);
1015 }
1016 EXPORT_SYMBOL_GPL(acpi_dev_pm_remove_dependent);
1017