Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ebc81b8 authored by Zhang Rui's avatar Zhang Rui Committed by Len Brown
Browse files

ACPI: Introduce ACPI D3_COLD state support



If a device has _PR3, it means the device supports D3_COLD.
Add the ability to validate and enter D3_COLD state in ACPI.

Signed-off-by: default avatarZhang Rui <rui.zhang@intel.com>
Signed-off-by: default avatarLin Ming <ming.m.lin@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent c16fa4f2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -500,14 +500,14 @@ int acpi_power_transition(struct acpi_device *device, int state)
{
	int result;

	if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3))
	if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3_COLD))
		return -EINVAL;

	if (device->power.state == state)
		return 0;

	if ((device->power.state < ACPI_STATE_D0)
	    || (device->power.state > ACPI_STATE_D3))
	    || (device->power.state > ACPI_STATE_D3_COLD))
		return -ENODEV;

	/* TBD: Resources must be ordered. */
+7 −0
Original line number Diff line number Diff line
@@ -885,6 +885,13 @@ static int acpi_bus_get_power_flags(struct acpi_device *device)
				acpi_bus_add_power_resource(ps->resources.handles[j]);
		}

		/* The exist of _PR3 indicates D3Cold support */
		if (i == ACPI_STATE_D3) {
			status = acpi_get_handle(device->handle, object_name, &handle);
			if (ACPI_SUCCESS(status))
				device->power.states[ACPI_STATE_D3_COLD].flags.valid = 1;
		}

		/* Evaluate "_PSx" to see if we can do explicit sets */
		object_name[2] = 'S';
		status = acpi_get_handle(device->handle, object_name, &handle);