xref: /openbmc/linux/drivers/acpi/device_pm.c (revision a8da474e)
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  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19  */
20 
21 #include <linux/acpi.h>
22 #include <linux/export.h>
23 #include <linux/mutex.h>
24 #include <linux/pm_qos.h>
25 #include <linux/pm_runtime.h>
26 
27 #include "internal.h"
28 
29 #define _COMPONENT	ACPI_POWER_COMPONENT
30 ACPI_MODULE_NAME("device_pm");
31 
32 /**
33  * acpi_power_state_string - String representation of ACPI device power state.
34  * @state: ACPI device power state to return the string representation of.
35  */
36 const char *acpi_power_state_string(int state)
37 {
38 	switch (state) {
39 	case ACPI_STATE_D0:
40 		return "D0";
41 	case ACPI_STATE_D1:
42 		return "D1";
43 	case ACPI_STATE_D2:
44 		return "D2";
45 	case ACPI_STATE_D3_HOT:
46 		return "D3hot";
47 	case ACPI_STATE_D3_COLD:
48 		return "D3cold";
49 	default:
50 		return "(unknown)";
51 	}
52 }
53 
54 /**
55  * acpi_device_get_power - Get power state of an ACPI device.
56  * @device: Device to get the power state of.
57  * @state: Place to store the power state of the device.
58  *
59  * This function does not update the device's power.state field, but it may
60  * update its parent's power.state field (when the parent's power state is
61  * unknown and the device's power state turns out to be D0).
62  */
63 int acpi_device_get_power(struct acpi_device *device, int *state)
64 {
65 	int result = ACPI_STATE_UNKNOWN;
66 
67 	if (!device || !state)
68 		return -EINVAL;
69 
70 	if (!device->flags.power_manageable) {
71 		/* TBD: Non-recursive algorithm for walking up hierarchy. */
72 		*state = device->parent ?
73 			device->parent->power.state : ACPI_STATE_D0;
74 		goto out;
75 	}
76 
77 	/*
78 	 * Get the device's power state from power resources settings and _PSC,
79 	 * if available.
80 	 */
81 	if (device->power.flags.power_resources) {
82 		int error = acpi_power_get_inferred_state(device, &result);
83 		if (error)
84 			return error;
85 	}
86 	if (device->power.flags.explicit_get) {
87 		acpi_handle handle = device->handle;
88 		unsigned long long psc;
89 		acpi_status status;
90 
91 		status = acpi_evaluate_integer(handle, "_PSC", NULL, &psc);
92 		if (ACPI_FAILURE(status))
93 			return -ENODEV;
94 
95 		/*
96 		 * The power resources settings may indicate a power state
97 		 * shallower than the actual power state of the device, because
98 		 * the same power resources may be referenced by other devices.
99 		 *
100 		 * For systems predating ACPI 4.0 we assume that D3hot is the
101 		 * deepest state that can be supported.
102 		 */
103 		if (psc > result && psc < ACPI_STATE_D3_COLD)
104 			result = psc;
105 		else if (result == ACPI_STATE_UNKNOWN)
106 			result = psc > ACPI_STATE_D2 ? ACPI_STATE_D3_HOT : psc;
107 	}
108 
109 	/*
110 	 * If we were unsure about the device parent's power state up to this
111 	 * point, the fact that the device is in D0 implies that the parent has
112 	 * to be in D0 too, except if ignore_parent is set.
113 	 */
114 	if (!device->power.flags.ignore_parent && device->parent
115 	    && device->parent->power.state == ACPI_STATE_UNKNOWN
116 	    && result == ACPI_STATE_D0)
117 		device->parent->power.state = ACPI_STATE_D0;
118 
119 	*state = result;
120 
121  out:
122 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] power state is %s\n",
123 			  device->pnp.bus_id, acpi_power_state_string(*state)));
124 
125 	return 0;
126 }
127 
128 static int acpi_dev_pm_explicit_set(struct acpi_device *adev, int state)
129 {
130 	if (adev->power.states[state].flags.explicit_set) {
131 		char method[5] = { '_', 'P', 'S', '0' + state, '\0' };
132 		acpi_status status;
133 
134 		status = acpi_evaluate_object(adev->handle, method, NULL, NULL);
135 		if (ACPI_FAILURE(status))
136 			return -ENODEV;
137 	}
138 	return 0;
139 }
140 
141 /**
142  * acpi_device_set_power - Set power state of an ACPI device.
143  * @device: Device to set the power state of.
144  * @state: New power state to set.
145  *
146  * Callers must ensure that the device is power manageable before using this
147  * function.
148  */
149 int acpi_device_set_power(struct acpi_device *device, int state)
150 {
151 	int target_state = state;
152 	int result = 0;
153 
154 	if (!device || !device->flags.power_manageable
155 	    || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3_COLD))
156 		return -EINVAL;
157 
158 	/* Make sure this is a valid target state */
159 
160 	if (state == device->power.state) {
161 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] already in %s\n",
162 				  device->pnp.bus_id,
163 				  acpi_power_state_string(state)));
164 		return 0;
165 	}
166 
167 	if (state == ACPI_STATE_D3_COLD) {
168 		/*
169 		 * For transitions to D3cold we need to execute _PS3 and then
170 		 * possibly drop references to the power resources in use.
171 		 */
172 		state = ACPI_STATE_D3_HOT;
173 		/* If _PR3 is not available, use D3hot as the target state. */
174 		if (!device->power.states[ACPI_STATE_D3_COLD].flags.valid)
175 			target_state = state;
176 	} else if (!device->power.states[state].flags.valid) {
177 		dev_warn(&device->dev, "Power state %s not supported\n",
178 			 acpi_power_state_string(state));
179 		return -ENODEV;
180 	}
181 
182 	if (!device->power.flags.ignore_parent &&
183 	    device->parent && (state < device->parent->power.state)) {
184 		dev_warn(&device->dev,
185 			 "Cannot transition to power state %s for parent in %s\n",
186 			 acpi_power_state_string(state),
187 			 acpi_power_state_string(device->parent->power.state));
188 		return -ENODEV;
189 	}
190 
191 	/*
192 	 * Transition Power
193 	 * ----------------
194 	 * In accordance with ACPI 6, _PSx is executed before manipulating power
195 	 * resources, unless the target state is D0, in which case _PS0 is
196 	 * supposed to be executed after turning the power resources on.
197 	 */
198 	if (state > ACPI_STATE_D0) {
199 		/*
200 		 * According to ACPI 6, devices cannot go from lower-power
201 		 * (deeper) states to higher-power (shallower) states.
202 		 */
203 		if (state < device->power.state) {
204 			dev_warn(&device->dev, "Cannot transition from %s to %s\n",
205 				 acpi_power_state_string(device->power.state),
206 				 acpi_power_state_string(state));
207 			return -ENODEV;
208 		}
209 
210 		result = acpi_dev_pm_explicit_set(device, state);
211 		if (result)
212 			goto end;
213 
214 		if (device->power.flags.power_resources)
215 			result = acpi_power_transition(device, target_state);
216 	} else {
217 		if (device->power.flags.power_resources) {
218 			result = acpi_power_transition(device, ACPI_STATE_D0);
219 			if (result)
220 				goto end;
221 		}
222 		result = acpi_dev_pm_explicit_set(device, ACPI_STATE_D0);
223 	}
224 
225  end:
226 	if (result) {
227 		dev_warn(&device->dev, "Failed to change power state to %s\n",
228 			 acpi_power_state_string(state));
229 	} else {
230 		device->power.state = target_state;
231 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
232 				  "Device [%s] transitioned to %s\n",
233 				  device->pnp.bus_id,
234 				  acpi_power_state_string(state)));
235 	}
236 
237 	return result;
238 }
239 EXPORT_SYMBOL(acpi_device_set_power);
240 
241 int acpi_bus_set_power(acpi_handle handle, int state)
242 {
243 	struct acpi_device *device;
244 	int result;
245 
246 	result = acpi_bus_get_device(handle, &device);
247 	if (result)
248 		return result;
249 
250 	return acpi_device_set_power(device, state);
251 }
252 EXPORT_SYMBOL(acpi_bus_set_power);
253 
254 int acpi_bus_init_power(struct acpi_device *device)
255 {
256 	int state;
257 	int result;
258 
259 	if (!device)
260 		return -EINVAL;
261 
262 	device->power.state = ACPI_STATE_UNKNOWN;
263 	if (!acpi_device_is_present(device))
264 		return -ENXIO;
265 
266 	result = acpi_device_get_power(device, &state);
267 	if (result)
268 		return result;
269 
270 	if (state < ACPI_STATE_D3_COLD && device->power.flags.power_resources) {
271 		/* Reference count the power resources. */
272 		result = acpi_power_on_resources(device, state);
273 		if (result)
274 			return result;
275 
276 		if (state == ACPI_STATE_D0) {
277 			/*
278 			 * If _PSC is not present and the state inferred from
279 			 * power resources appears to be D0, it still may be
280 			 * necessary to execute _PS0 at this point, because
281 			 * another device using the same power resources may
282 			 * have been put into D0 previously and that's why we
283 			 * see D0 here.
284 			 */
285 			result = acpi_dev_pm_explicit_set(device, state);
286 			if (result)
287 				return result;
288 		}
289 	} else if (state == ACPI_STATE_UNKNOWN) {
290 		/*
291 		 * No power resources and missing _PSC?  Cross fingers and make
292 		 * it D0 in hope that this is what the BIOS put the device into.
293 		 * [We tried to force D0 here by executing _PS0, but that broke
294 		 * Toshiba P870-303 in a nasty way.]
295 		 */
296 		state = ACPI_STATE_D0;
297 	}
298 	device->power.state = state;
299 	return 0;
300 }
301 
302 /**
303  * acpi_device_fix_up_power - Force device with missing _PSC into D0.
304  * @device: Device object whose power state is to be fixed up.
305  *
306  * Devices without power resources and _PSC, but having _PS0 and _PS3 defined,
307  * are assumed to be put into D0 by the BIOS.  However, in some cases that may
308  * not be the case and this function should be used then.
309  */
310 int acpi_device_fix_up_power(struct acpi_device *device)
311 {
312 	int ret = 0;
313 
314 	if (!device->power.flags.power_resources
315 	    && !device->power.flags.explicit_get
316 	    && device->power.state == ACPI_STATE_D0)
317 		ret = acpi_dev_pm_explicit_set(device, ACPI_STATE_D0);
318 
319 	return ret;
320 }
321 
322 int acpi_device_update_power(struct acpi_device *device, int *state_p)
323 {
324 	int state;
325 	int result;
326 
327 	if (device->power.state == ACPI_STATE_UNKNOWN) {
328 		result = acpi_bus_init_power(device);
329 		if (!result && state_p)
330 			*state_p = device->power.state;
331 
332 		return result;
333 	}
334 
335 	result = acpi_device_get_power(device, &state);
336 	if (result)
337 		return result;
338 
339 	if (state == ACPI_STATE_UNKNOWN) {
340 		state = ACPI_STATE_D0;
341 		result = acpi_device_set_power(device, state);
342 		if (result)
343 			return result;
344 	} else {
345 		if (device->power.flags.power_resources) {
346 			/*
347 			 * We don't need to really switch the state, bu we need
348 			 * to update the power resources' reference counters.
349 			 */
350 			result = acpi_power_transition(device, state);
351 			if (result)
352 				return result;
353 		}
354 		device->power.state = state;
355 	}
356 	if (state_p)
357 		*state_p = state;
358 
359 	return 0;
360 }
361 EXPORT_SYMBOL_GPL(acpi_device_update_power);
362 
363 int acpi_bus_update_power(acpi_handle handle, int *state_p)
364 {
365 	struct acpi_device *device;
366 	int result;
367 
368 	result = acpi_bus_get_device(handle, &device);
369 	return result ? result : acpi_device_update_power(device, state_p);
370 }
371 EXPORT_SYMBOL_GPL(acpi_bus_update_power);
372 
373 bool acpi_bus_power_manageable(acpi_handle handle)
374 {
375 	struct acpi_device *device;
376 	int result;
377 
378 	result = acpi_bus_get_device(handle, &device);
379 	return result ? false : device->flags.power_manageable;
380 }
381 EXPORT_SYMBOL(acpi_bus_power_manageable);
382 
383 #ifdef CONFIG_PM
384 static DEFINE_MUTEX(acpi_pm_notifier_lock);
385 
386 static void acpi_pm_notify_handler(acpi_handle handle, u32 val, void *not_used)
387 {
388 	struct acpi_device *adev;
389 
390 	if (val != ACPI_NOTIFY_DEVICE_WAKE)
391 		return;
392 
393 	adev = acpi_bus_get_acpi_device(handle);
394 	if (!adev)
395 		return;
396 
397 	mutex_lock(&acpi_pm_notifier_lock);
398 
399 	if (adev->wakeup.flags.notifier_present) {
400 		__pm_wakeup_event(adev->wakeup.ws, 0);
401 		if (adev->wakeup.context.work.func)
402 			queue_pm_work(&adev->wakeup.context.work);
403 	}
404 
405 	mutex_unlock(&acpi_pm_notifier_lock);
406 
407 	acpi_bus_put_acpi_device(adev);
408 }
409 
410 /**
411  * acpi_add_pm_notifier - Register PM notify handler for given ACPI device.
412  * @adev: ACPI device to add the notify handler for.
413  * @dev: Device to generate a wakeup event for while handling the notification.
414  * @work_func: Work function to execute when handling the notification.
415  *
416  * NOTE: @adev need not be a run-wake or wakeup device to be a valid source of
417  * PM wakeup events.  For example, wakeup events may be generated for bridges
418  * if one of the devices below the bridge is signaling wakeup, even if the
419  * bridge itself doesn't have a wakeup GPE associated with it.
420  */
421 acpi_status acpi_add_pm_notifier(struct acpi_device *adev, struct device *dev,
422 				 void (*work_func)(struct work_struct *work))
423 {
424 	acpi_status status = AE_ALREADY_EXISTS;
425 
426 	if (!dev && !work_func)
427 		return AE_BAD_PARAMETER;
428 
429 	mutex_lock(&acpi_pm_notifier_lock);
430 
431 	if (adev->wakeup.flags.notifier_present)
432 		goto out;
433 
434 	adev->wakeup.ws = wakeup_source_register(dev_name(&adev->dev));
435 	adev->wakeup.context.dev = dev;
436 	if (work_func)
437 		INIT_WORK(&adev->wakeup.context.work, work_func);
438 
439 	status = acpi_install_notify_handler(adev->handle, ACPI_SYSTEM_NOTIFY,
440 					     acpi_pm_notify_handler, NULL);
441 	if (ACPI_FAILURE(status))
442 		goto out;
443 
444 	adev->wakeup.flags.notifier_present = true;
445 
446  out:
447 	mutex_unlock(&acpi_pm_notifier_lock);
448 	return status;
449 }
450 
451 /**
452  * acpi_remove_pm_notifier - Unregister PM notifier from given ACPI device.
453  * @adev: ACPI device to remove the notifier from.
454  */
455 acpi_status acpi_remove_pm_notifier(struct acpi_device *adev)
456 {
457 	acpi_status status = AE_BAD_PARAMETER;
458 
459 	mutex_lock(&acpi_pm_notifier_lock);
460 
461 	if (!adev->wakeup.flags.notifier_present)
462 		goto out;
463 
464 	status = acpi_remove_notify_handler(adev->handle,
465 					    ACPI_SYSTEM_NOTIFY,
466 					    acpi_pm_notify_handler);
467 	if (ACPI_FAILURE(status))
468 		goto out;
469 
470 	if (adev->wakeup.context.work.func) {
471 		cancel_work_sync(&adev->wakeup.context.work);
472 		adev->wakeup.context.work.func = NULL;
473 	}
474 	adev->wakeup.context.dev = NULL;
475 	wakeup_source_unregister(adev->wakeup.ws);
476 
477 	adev->wakeup.flags.notifier_present = false;
478 
479  out:
480 	mutex_unlock(&acpi_pm_notifier_lock);
481 	return status;
482 }
483 
484 bool acpi_bus_can_wakeup(acpi_handle handle)
485 {
486 	struct acpi_device *device;
487 	int result;
488 
489 	result = acpi_bus_get_device(handle, &device);
490 	return result ? false : device->wakeup.flags.valid;
491 }
492 EXPORT_SYMBOL(acpi_bus_can_wakeup);
493 
494 /**
495  * acpi_dev_pm_get_state - Get preferred power state of ACPI device.
496  * @dev: Device whose preferred target power state to return.
497  * @adev: ACPI device node corresponding to @dev.
498  * @target_state: System state to match the resultant device state.
499  * @d_min_p: Location to store the highest power state available to the device.
500  * @d_max_p: Location to store the lowest power state available to the device.
501  *
502  * Find the lowest power (highest number) and highest power (lowest number) ACPI
503  * device power states that the device can be in while the system is in the
504  * state represented by @target_state.  Store the integer numbers representing
505  * those stats in the memory locations pointed to by @d_max_p and @d_min_p,
506  * respectively.
507  *
508  * Callers must ensure that @dev and @adev are valid pointers and that @adev
509  * actually corresponds to @dev before using this function.
510  *
511  * Returns 0 on success or -ENODATA when one of the ACPI methods fails or
512  * returns a value that doesn't make sense.  The memory locations pointed to by
513  * @d_max_p and @d_min_p are only modified on success.
514  */
515 static int acpi_dev_pm_get_state(struct device *dev, struct acpi_device *adev,
516 				 u32 target_state, int *d_min_p, int *d_max_p)
517 {
518 	char method[] = { '_', 'S', '0' + target_state, 'D', '\0' };
519 	acpi_handle handle = adev->handle;
520 	unsigned long long ret;
521 	int d_min, d_max;
522 	bool wakeup = false;
523 	acpi_status status;
524 
525 	/*
526 	 * If the system state is S0, the lowest power state the device can be
527 	 * in is D3cold, unless the device has _S0W and is supposed to signal
528 	 * wakeup, in which case the return value of _S0W has to be used as the
529 	 * lowest power state available to the device.
530 	 */
531 	d_min = ACPI_STATE_D0;
532 	d_max = ACPI_STATE_D3_COLD;
533 
534 	/*
535 	 * If present, _SxD methods return the minimum D-state (highest power
536 	 * state) we can use for the corresponding S-states.  Otherwise, the
537 	 * minimum D-state is D0 (ACPI 3.x).
538 	 */
539 	if (target_state > ACPI_STATE_S0) {
540 		/*
541 		 * We rely on acpi_evaluate_integer() not clobbering the integer
542 		 * provided if AE_NOT_FOUND is returned.
543 		 */
544 		ret = d_min;
545 		status = acpi_evaluate_integer(handle, method, NULL, &ret);
546 		if ((ACPI_FAILURE(status) && status != AE_NOT_FOUND)
547 		    || ret > ACPI_STATE_D3_COLD)
548 			return -ENODATA;
549 
550 		/*
551 		 * We need to handle legacy systems where D3hot and D3cold are
552 		 * the same and 3 is returned in both cases, so fall back to
553 		 * D3cold if D3hot is not a valid state.
554 		 */
555 		if (!adev->power.states[ret].flags.valid) {
556 			if (ret == ACPI_STATE_D3_HOT)
557 				ret = ACPI_STATE_D3_COLD;
558 			else
559 				return -ENODATA;
560 		}
561 		d_min = ret;
562 		wakeup = device_may_wakeup(dev) && adev->wakeup.flags.valid
563 			&& adev->wakeup.sleep_state >= target_state;
564 	} else if (dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) !=
565 			PM_QOS_FLAGS_NONE) {
566 		wakeup = adev->wakeup.flags.valid;
567 	}
568 
569 	/*
570 	 * If _PRW says we can wake up the system from the target sleep state,
571 	 * the D-state returned by _SxD is sufficient for that (we assume a
572 	 * wakeup-aware driver if wake is set).  Still, if _SxW exists
573 	 * (ACPI 3.x), it should return the maximum (lowest power) D-state that
574 	 * can wake the system.  _S0W may be valid, too.
575 	 */
576 	if (wakeup) {
577 		method[3] = 'W';
578 		status = acpi_evaluate_integer(handle, method, NULL, &ret);
579 		if (status == AE_NOT_FOUND) {
580 			if (target_state > ACPI_STATE_S0)
581 				d_max = d_min;
582 		} else if (ACPI_SUCCESS(status) && ret <= ACPI_STATE_D3_COLD) {
583 			/* Fall back to D3cold if ret is not a valid state. */
584 			if (!adev->power.states[ret].flags.valid)
585 				ret = ACPI_STATE_D3_COLD;
586 
587 			d_max = ret > d_min ? ret : d_min;
588 		} else {
589 			return -ENODATA;
590 		}
591 	}
592 
593 	if (d_min_p)
594 		*d_min_p = d_min;
595 
596 	if (d_max_p)
597 		*d_max_p = d_max;
598 
599 	return 0;
600 }
601 
602 /**
603  * acpi_pm_device_sleep_state - Get preferred power state of ACPI device.
604  * @dev: Device whose preferred target power state to return.
605  * @d_min_p: Location to store the upper limit of the allowed states range.
606  * @d_max_in: Deepest low-power state to take into consideration.
607  * Return value: Preferred power state of the device on success, -ENODEV
608  * if there's no 'struct acpi_device' for @dev, -EINVAL if @d_max_in is
609  * incorrect, or -ENODATA on ACPI method failure.
610  *
611  * The caller must ensure that @dev is valid before using this function.
612  */
613 int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p, int d_max_in)
614 {
615 	struct acpi_device *adev;
616 	int ret, d_min, d_max;
617 
618 	if (d_max_in < ACPI_STATE_D0 || d_max_in > ACPI_STATE_D3_COLD)
619 		return -EINVAL;
620 
621 	if (d_max_in > ACPI_STATE_D2) {
622 		enum pm_qos_flags_status stat;
623 
624 		stat = dev_pm_qos_flags(dev, PM_QOS_FLAG_NO_POWER_OFF);
625 		if (stat == PM_QOS_FLAGS_ALL)
626 			d_max_in = ACPI_STATE_D2;
627 	}
628 
629 	adev = ACPI_COMPANION(dev);
630 	if (!adev) {
631 		dev_dbg(dev, "ACPI companion missing in %s!\n", __func__);
632 		return -ENODEV;
633 	}
634 
635 	ret = acpi_dev_pm_get_state(dev, adev, acpi_target_system_state(),
636 				    &d_min, &d_max);
637 	if (ret)
638 		return ret;
639 
640 	if (d_max_in < d_min)
641 		return -EINVAL;
642 
643 	if (d_max > d_max_in) {
644 		for (d_max = d_max_in; d_max > d_min; d_max--) {
645 			if (adev->power.states[d_max].flags.valid)
646 				break;
647 		}
648 	}
649 
650 	if (d_min_p)
651 		*d_min_p = d_min;
652 
653 	return d_max;
654 }
655 EXPORT_SYMBOL(acpi_pm_device_sleep_state);
656 
657 /**
658  * acpi_pm_notify_work_func - ACPI devices wakeup notification work function.
659  * @work: Work item to handle.
660  */
661 static void acpi_pm_notify_work_func(struct work_struct *work)
662 {
663 	struct device *dev;
664 
665 	dev = container_of(work, struct acpi_device_wakeup_context, work)->dev;
666 	if (dev) {
667 		pm_wakeup_event(dev, 0);
668 		pm_runtime_resume(dev);
669 	}
670 }
671 
672 /**
673  * acpi_device_wakeup - Enable/disable wakeup functionality for device.
674  * @adev: ACPI device to enable/disable wakeup functionality for.
675  * @target_state: State the system is transitioning into.
676  * @enable: Whether to enable or disable the wakeup functionality.
677  *
678  * Enable/disable the GPE associated with @adev so that it can generate
679  * wakeup signals for the device in response to external (remote) events and
680  * enable/disable device wakeup power.
681  *
682  * Callers must ensure that @adev is a valid ACPI device node before executing
683  * this function.
684  */
685 static int acpi_device_wakeup(struct acpi_device *adev, u32 target_state,
686 			      bool enable)
687 {
688 	struct acpi_device_wakeup *wakeup = &adev->wakeup;
689 
690 	if (enable) {
691 		acpi_status res;
692 		int error;
693 
694 		error = acpi_enable_wakeup_device_power(adev, target_state);
695 		if (error)
696 			return error;
697 
698 		if (adev->wakeup.flags.enabled)
699 			return 0;
700 
701 		res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number);
702 		if (ACPI_SUCCESS(res)) {
703 			adev->wakeup.flags.enabled = 1;
704 		} else {
705 			acpi_disable_wakeup_device_power(adev);
706 			return -EIO;
707 		}
708 	} else {
709 		if (adev->wakeup.flags.enabled) {
710 			acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
711 			adev->wakeup.flags.enabled = 0;
712 		}
713 		acpi_disable_wakeup_device_power(adev);
714 	}
715 	return 0;
716 }
717 
718 /**
719  * acpi_pm_device_run_wake - Enable/disable remote wakeup for given device.
720  * @dev: Device to enable/disable the platform to wake up.
721  * @enable: Whether to enable or disable the wakeup functionality.
722  */
723 int acpi_pm_device_run_wake(struct device *phys_dev, bool enable)
724 {
725 	struct acpi_device *adev;
726 
727 	if (!device_run_wake(phys_dev))
728 		return -EINVAL;
729 
730 	adev = ACPI_COMPANION(phys_dev);
731 	if (!adev) {
732 		dev_dbg(phys_dev, "ACPI companion missing in %s!\n", __func__);
733 		return -ENODEV;
734 	}
735 
736 	return acpi_device_wakeup(adev, ACPI_STATE_S0, enable);
737 }
738 EXPORT_SYMBOL(acpi_pm_device_run_wake);
739 
740 #ifdef CONFIG_PM_SLEEP
741 /**
742  * acpi_pm_device_sleep_wake - Enable or disable device to wake up the system.
743  * @dev: Device to enable/desible to wake up the system from sleep states.
744  * @enable: Whether to enable or disable @dev to wake up the system.
745  */
746 int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
747 {
748 	struct acpi_device *adev;
749 	int error;
750 
751 	if (!device_can_wakeup(dev))
752 		return -EINVAL;
753 
754 	adev = ACPI_COMPANION(dev);
755 	if (!adev) {
756 		dev_dbg(dev, "ACPI companion missing in %s!\n", __func__);
757 		return -ENODEV;
758 	}
759 
760 	error = acpi_device_wakeup(adev, acpi_target_system_state(), enable);
761 	if (!error)
762 		dev_info(dev, "System wakeup %s by ACPI\n",
763 				enable ? "enabled" : "disabled");
764 
765 	return error;
766 }
767 #endif /* CONFIG_PM_SLEEP */
768 
769 /**
770  * acpi_dev_pm_low_power - Put ACPI device into a low-power state.
771  * @dev: Device to put into a low-power state.
772  * @adev: ACPI device node corresponding to @dev.
773  * @system_state: System state to choose the device state for.
774  */
775 static int acpi_dev_pm_low_power(struct device *dev, struct acpi_device *adev,
776 				 u32 system_state)
777 {
778 	int ret, state;
779 
780 	if (!acpi_device_power_manageable(adev))
781 		return 0;
782 
783 	ret = acpi_dev_pm_get_state(dev, adev, system_state, NULL, &state);
784 	return ret ? ret : acpi_device_set_power(adev, state);
785 }
786 
787 /**
788  * acpi_dev_pm_full_power - Put ACPI device into the full-power state.
789  * @adev: ACPI device node to put into the full-power state.
790  */
791 static int acpi_dev_pm_full_power(struct acpi_device *adev)
792 {
793 	return acpi_device_power_manageable(adev) ?
794 		acpi_device_set_power(adev, ACPI_STATE_D0) : 0;
795 }
796 
797 /**
798  * acpi_dev_runtime_suspend - Put device into a low-power state using ACPI.
799  * @dev: Device to put into a low-power state.
800  *
801  * Put the given device into a runtime low-power state using the standard ACPI
802  * mechanism.  Set up remote wakeup if desired, choose the state to put the
803  * device into (this checks if remote wakeup is expected to work too), and set
804  * the power state of the device.
805  */
806 int acpi_dev_runtime_suspend(struct device *dev)
807 {
808 	struct acpi_device *adev = ACPI_COMPANION(dev);
809 	bool remote_wakeup;
810 	int error;
811 
812 	if (!adev)
813 		return 0;
814 
815 	remote_wakeup = dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) >
816 				PM_QOS_FLAGS_NONE;
817 	error = acpi_device_wakeup(adev, ACPI_STATE_S0, remote_wakeup);
818 	if (remote_wakeup && error)
819 		return -EAGAIN;
820 
821 	error = acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0);
822 	if (error)
823 		acpi_device_wakeup(adev, ACPI_STATE_S0, false);
824 
825 	return error;
826 }
827 EXPORT_SYMBOL_GPL(acpi_dev_runtime_suspend);
828 
829 /**
830  * acpi_dev_runtime_resume - Put device into the full-power state using ACPI.
831  * @dev: Device to put into the full-power state.
832  *
833  * Put the given device into the full-power state using the standard ACPI
834  * mechanism at run time.  Set the power state of the device to ACPI D0 and
835  * disable remote wakeup.
836  */
837 int acpi_dev_runtime_resume(struct device *dev)
838 {
839 	struct acpi_device *adev = ACPI_COMPANION(dev);
840 	int error;
841 
842 	if (!adev)
843 		return 0;
844 
845 	error = acpi_dev_pm_full_power(adev);
846 	acpi_device_wakeup(adev, ACPI_STATE_S0, false);
847 	return error;
848 }
849 EXPORT_SYMBOL_GPL(acpi_dev_runtime_resume);
850 
851 /**
852  * acpi_subsys_runtime_suspend - Suspend device using ACPI.
853  * @dev: Device to suspend.
854  *
855  * Carry out the generic runtime suspend procedure for @dev and use ACPI to put
856  * it into a runtime low-power state.
857  */
858 int acpi_subsys_runtime_suspend(struct device *dev)
859 {
860 	int ret = pm_generic_runtime_suspend(dev);
861 	return ret ? ret : acpi_dev_runtime_suspend(dev);
862 }
863 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_suspend);
864 
865 /**
866  * acpi_subsys_runtime_resume - Resume device using ACPI.
867  * @dev: Device to Resume.
868  *
869  * Use ACPI to put the given device into the full-power state and carry out the
870  * generic runtime resume procedure for it.
871  */
872 int acpi_subsys_runtime_resume(struct device *dev)
873 {
874 	int ret = acpi_dev_runtime_resume(dev);
875 	return ret ? ret : pm_generic_runtime_resume(dev);
876 }
877 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_resume);
878 
879 #ifdef CONFIG_PM_SLEEP
880 /**
881  * acpi_dev_suspend_late - Put device into a low-power state using ACPI.
882  * @dev: Device to put into a low-power state.
883  *
884  * Put the given device into a low-power state during system transition to a
885  * sleep state using the standard ACPI mechanism.  Set up system wakeup if
886  * desired, choose the state to put the device into (this checks if system
887  * wakeup is expected to work too), and set the power state of the device.
888  */
889 int acpi_dev_suspend_late(struct device *dev)
890 {
891 	struct acpi_device *adev = ACPI_COMPANION(dev);
892 	u32 target_state;
893 	bool wakeup;
894 	int error;
895 
896 	if (!adev)
897 		return 0;
898 
899 	target_state = acpi_target_system_state();
900 	wakeup = device_may_wakeup(dev) && acpi_device_can_wakeup(adev);
901 	error = acpi_device_wakeup(adev, target_state, wakeup);
902 	if (wakeup && error)
903 		return error;
904 
905 	error = acpi_dev_pm_low_power(dev, adev, target_state);
906 	if (error)
907 		acpi_device_wakeup(adev, ACPI_STATE_UNKNOWN, false);
908 
909 	return error;
910 }
911 EXPORT_SYMBOL_GPL(acpi_dev_suspend_late);
912 
913 /**
914  * acpi_dev_resume_early - Put device into the full-power state using ACPI.
915  * @dev: Device to put into the full-power state.
916  *
917  * Put the given device into the full-power state using the standard ACPI
918  * mechanism during system transition to the working state.  Set the power
919  * state of the device to ACPI D0 and disable remote wakeup.
920  */
921 int acpi_dev_resume_early(struct device *dev)
922 {
923 	struct acpi_device *adev = ACPI_COMPANION(dev);
924 	int error;
925 
926 	if (!adev)
927 		return 0;
928 
929 	error = acpi_dev_pm_full_power(adev);
930 	acpi_device_wakeup(adev, ACPI_STATE_UNKNOWN, false);
931 	return error;
932 }
933 EXPORT_SYMBOL_GPL(acpi_dev_resume_early);
934 
935 /**
936  * acpi_subsys_prepare - Prepare device for system transition to a sleep state.
937  * @dev: Device to prepare.
938  */
939 int acpi_subsys_prepare(struct device *dev)
940 {
941 	struct acpi_device *adev = ACPI_COMPANION(dev);
942 	u32 sys_target;
943 	int ret, state;
944 
945 	ret = pm_generic_prepare(dev);
946 	if (ret < 0)
947 		return ret;
948 
949 	if (!adev || !pm_runtime_suspended(dev)
950 	    || device_may_wakeup(dev) != !!adev->wakeup.prepare_count)
951 		return 0;
952 
953 	sys_target = acpi_target_system_state();
954 	if (sys_target == ACPI_STATE_S0)
955 		return 1;
956 
957 	if (adev->power.flags.dsw_present)
958 		return 0;
959 
960 	ret = acpi_dev_pm_get_state(dev, adev, sys_target, NULL, &state);
961 	return !ret && state == adev->power.state;
962 }
963 EXPORT_SYMBOL_GPL(acpi_subsys_prepare);
964 
965 /**
966  * acpi_subsys_suspend - Run the device driver's suspend callback.
967  * @dev: Device to handle.
968  *
969  * Follow PCI and resume devices suspended at run time before running their
970  * system suspend callbacks.
971  */
972 int acpi_subsys_suspend(struct device *dev)
973 {
974 	pm_runtime_resume(dev);
975 	return pm_generic_suspend(dev);
976 }
977 EXPORT_SYMBOL_GPL(acpi_subsys_suspend);
978 
979 /**
980  * acpi_subsys_suspend_late - Suspend device using ACPI.
981  * @dev: Device to suspend.
982  *
983  * Carry out the generic late suspend procedure for @dev and use ACPI to put
984  * it into a low-power state during system transition into a sleep state.
985  */
986 int acpi_subsys_suspend_late(struct device *dev)
987 {
988 	int ret = pm_generic_suspend_late(dev);
989 	return ret ? ret : acpi_dev_suspend_late(dev);
990 }
991 EXPORT_SYMBOL_GPL(acpi_subsys_suspend_late);
992 
993 /**
994  * acpi_subsys_resume_early - Resume device using ACPI.
995  * @dev: Device to Resume.
996  *
997  * Use ACPI to put the given device into the full-power state and carry out the
998  * generic early resume procedure for it during system transition into the
999  * working state.
1000  */
1001 int acpi_subsys_resume_early(struct device *dev)
1002 {
1003 	int ret = acpi_dev_resume_early(dev);
1004 	return ret ? ret : pm_generic_resume_early(dev);
1005 }
1006 EXPORT_SYMBOL_GPL(acpi_subsys_resume_early);
1007 
1008 /**
1009  * acpi_subsys_freeze - Run the device driver's freeze callback.
1010  * @dev: Device to handle.
1011  */
1012 int acpi_subsys_freeze(struct device *dev)
1013 {
1014 	/*
1015 	 * This used to be done in acpi_subsys_prepare() for all devices and
1016 	 * some drivers may depend on it, so do it here.  Ideally, however,
1017 	 * runtime-suspended devices should not be touched during freeze/thaw
1018 	 * transitions.
1019 	 */
1020 	pm_runtime_resume(dev);
1021 	return pm_generic_freeze(dev);
1022 }
1023 EXPORT_SYMBOL_GPL(acpi_subsys_freeze);
1024 
1025 #endif /* CONFIG_PM_SLEEP */
1026 
1027 static struct dev_pm_domain acpi_general_pm_domain = {
1028 	.ops = {
1029 		.runtime_suspend = acpi_subsys_runtime_suspend,
1030 		.runtime_resume = acpi_subsys_runtime_resume,
1031 #ifdef CONFIG_PM_SLEEP
1032 		.prepare = acpi_subsys_prepare,
1033 		.complete = pm_complete_with_resume_check,
1034 		.suspend = acpi_subsys_suspend,
1035 		.suspend_late = acpi_subsys_suspend_late,
1036 		.resume_early = acpi_subsys_resume_early,
1037 		.freeze = acpi_subsys_freeze,
1038 		.poweroff = acpi_subsys_suspend,
1039 		.poweroff_late = acpi_subsys_suspend_late,
1040 		.restore_early = acpi_subsys_resume_early,
1041 #endif
1042 	},
1043 };
1044 
1045 /**
1046  * acpi_dev_pm_detach - Remove ACPI power management from the device.
1047  * @dev: Device to take care of.
1048  * @power_off: Whether or not to try to remove power from the device.
1049  *
1050  * Remove the device from the general ACPI PM domain and remove its wakeup
1051  * notifier.  If @power_off is set, additionally remove power from the device if
1052  * possible.
1053  *
1054  * Callers must ensure proper synchronization of this function with power
1055  * management callbacks.
1056  */
1057 static void acpi_dev_pm_detach(struct device *dev, bool power_off)
1058 {
1059 	struct acpi_device *adev = ACPI_COMPANION(dev);
1060 
1061 	if (adev && dev->pm_domain == &acpi_general_pm_domain) {
1062 		dev->pm_domain = NULL;
1063 		acpi_remove_pm_notifier(adev);
1064 		if (power_off) {
1065 			/*
1066 			 * If the device's PM QoS resume latency limit or flags
1067 			 * have been exposed to user space, they have to be
1068 			 * hidden at this point, so that they don't affect the
1069 			 * choice of the low-power state to put the device into.
1070 			 */
1071 			dev_pm_qos_hide_latency_limit(dev);
1072 			dev_pm_qos_hide_flags(dev);
1073 			acpi_device_wakeup(adev, ACPI_STATE_S0, false);
1074 			acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0);
1075 		}
1076 	}
1077 }
1078 
1079 /**
1080  * acpi_dev_pm_attach - Prepare device for ACPI power management.
1081  * @dev: Device to prepare.
1082  * @power_on: Whether or not to power on the device.
1083  *
1084  * If @dev has a valid ACPI handle that has a valid struct acpi_device object
1085  * attached to it, install a wakeup notification handler for the device and
1086  * add it to the general ACPI PM domain.  If @power_on is set, the device will
1087  * be put into the ACPI D0 state before the function returns.
1088  *
1089  * This assumes that the @dev's bus type uses generic power management callbacks
1090  * (or doesn't use any power management callbacks at all).
1091  *
1092  * Callers must ensure proper synchronization of this function with power
1093  * management callbacks.
1094  */
1095 int acpi_dev_pm_attach(struct device *dev, bool power_on)
1096 {
1097 	struct acpi_device *adev = ACPI_COMPANION(dev);
1098 
1099 	if (!adev)
1100 		return -ENODEV;
1101 
1102 	if (dev->pm_domain)
1103 		return -EEXIST;
1104 
1105 	/*
1106 	 * Only attach the power domain to the first device if the
1107 	 * companion is shared by multiple. This is to prevent doing power
1108 	 * management twice.
1109 	 */
1110 	if (!acpi_device_is_first_physical_node(adev, dev))
1111 		return -EBUSY;
1112 
1113 	acpi_add_pm_notifier(adev, dev, acpi_pm_notify_work_func);
1114 	dev->pm_domain = &acpi_general_pm_domain;
1115 	if (power_on) {
1116 		acpi_dev_pm_full_power(adev);
1117 		acpi_device_wakeup(adev, ACPI_STATE_S0, false);
1118 	}
1119 
1120 	dev->pm_domain->detach = acpi_dev_pm_detach;
1121 	return 0;
1122 }
1123 EXPORT_SYMBOL_GPL(acpi_dev_pm_attach);
1124 #endif /* CONFIG_PM */
1125