Mika Westerberg
71b65445f0
ACPI / PM: Use target_state to set the device power state
...
Commit 20dacb71ad ("ACPI / PM: Rework device power management to follow
ACPI 6") changed the device power management to use D3hot if the device
in question does not have _PR3 method even if D3cold was requested by the
caller.
However, if the device has _PR3 device->power.state is also set to D3hot
instead of D3Cold after power resources have been turned off because
device->power.state will be assigned from "state" instead of
"target_state".
Next time the device is transitioned to D0, acpi_power_transition() will
find that the current power state of the device is D3hot instead of D3cold
which causes it to power down all resources required for the current
(wrong) state D3hot.
Below is a simplified ASL example of a real touch panel device which
triggers the problem:
Scope (TPL1)
{
Name (_PR0, Package (1) { \_SB.PCI0.I2C1.PXTC })
Name (_PR3, Package (1) { \_SB.PCI0.I2C1.PXTC })
...
}
In both D0 and D3hot the same power resource is required. However, when
acpi_power_transition() turns off power resources required for D3hot (as
the device is transitioned to D0) it powers down PXTC which then makes the
device to lose its power.
Fix this by assigning "target_state" to the device power state instead of
"state" that is always D3hot even for devices with valid _PR3.
Fixes: 20dacb71ad (ACPI / PM: Rework device power management to follow ACPI 6)
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2015-07-28 16:29:08 +02:00
..
acpica
Revert 'Revert "ACPICA: Permanently set _REV to the value '2'."'
2015-07-03 01:06:04 +02:00
apei
Power management and ACPI material for v4.2-rc1
2015-06-23 14:18:07 -07:00
pmic
ACPI/PMIC: Fix typo in MODULE_DESCRIPTION in intel_pmic_crc.c
2015-03-26 21:34:51 +01:00
ac.c
ACPI / AC: constify DMI system id table
2015-06-15 14:14:49 +02:00
acpi_apd.c
ACPI: add AMD ACPI2Platform device support for x86 system
2015-02-06 15:42:16 +01:00
acpi_cmos_rtc.c
acpi_extlog.c
acpi_ipmi.c
acpi_lpat.c
acpi_lpss.c
ACPI / LPSS: Fix up acpi_lpss_create_device()
2015-07-07 00:31:47 +02:00
acpi_memhotplug.c
acpi_pad.c
sched/topology: Rename topology_thread_cpumask() to topology_sibling_cpumask()
2015-05-27 15:22:15 +02:00
acpi_platform.c
ACPI / scan: Parse _CCA and setup device coherency
2015-06-15 14:40:48 +02:00
acpi_pnp.c
ACPI / PNP: add two IDs to list for PNPACPI device enumeration
2015-05-04 16:03:12 +02:00
acpi_processor.c
ACPI / processor: Introduce invalid_phys_cpuid()
2015-05-13 23:28:16 +02:00
acpi_video.c
ACPI / video: Make acpi_video_unregister_backlight() private
2015-06-19 01:12:50 +02:00
battery.c
ACPI / battery: mark DMI table as __initconst
2015-06-15 14:23:44 +02:00
battery.h
bgrt.c
blacklist.c
ACPI / init: Make it possible to override _REV
2015-07-03 01:06:00 +02:00
bus.c
ACPI / init: Switch over platform to the ACPI mode later
2015-06-10 23:51:27 +02:00
button.c
cm_sbs.c
container.c
custom_method.c
debugfs.c
device_pm.c
ACPI / PM: Use target_state to set the device power state
2015-07-28 16:29:08 +02:00
dock.c
driver core / ACPI: Represent ACPI companions using fwnode_handle
2015-03-16 23:49:03 +01:00
ec.c
ACPI / EC: Fix a code coverity issue when QR_EC transactions are failed.
2015-06-15 14:35:59 +02:00
ec_sys.c
event.c
fan.c
ACPI / PM: Rework device power management to follow ACPI 6
2015-05-16 01:55:35 +02:00
glue.c
ACPI / scan: Parse _CCA and setup device coherency
2015-06-15 14:40:48 +02:00
gsi.c
ACPI: move arm64 GSI IRQ model to generic GSI IRQ layer
2015-03-26 15:13:09 +00:00
hed.c
ACPI / HED: constify ACPI device ids
2015-06-15 14:28:32 +02:00
int340x_thermal.c
internal.h
Additional ACPICA material for v4.2-rc1
2015-07-02 17:11:28 -07:00
ioapic.c
Kconfig
Additional ACPICA material for v4.2-rc1
2015-07-02 17:11:28 -07:00
Makefile
The libnvdimm sub-system introduces, in addition to the libnvdimm-core,
2015-06-29 10:34:42 -07:00
nfit.c
nfit: add support for NVDIMM "latch" flag
2015-07-10 14:43:50 -04:00
nfit.h
nfit: add support for NVDIMM "latch" flag
2015-07-10 14:43:50 -04:00
numa.c
acpi: Add acpi_map_pxm_to_online_node()
2015-06-26 11:23:38 -04:00
nvs.c
osl.c
ACPI / PNP: Reserve ACPI resources at the fs_initcall_sync stage
2015-07-06 23:52:21 +02:00
pci_irq.c
Power management and ACPI material for v4.2-rc1
2015-06-23 14:18:07 -07:00
pci_link.c
pci_root.c
PCI: Don't clear ASPM bits when the FADT declares it's unsupported
2015-04-09 14:20:11 -05:00
pci_slot.c
power.c
ACPI / PM: Turn power resources on and off in the right order during resume
2015-05-25 23:59:54 +02:00
proc.c
processor_core.c
ACPI / processor: Introduce invalid_phys_cpuid()
2015-05-13 23:28:16 +02:00
processor_driver.c
processor_idle.c
ACPI / processor: constify DMI system id table
2015-06-15 14:29:48 +02:00
processor_pdc.c
ACPI / processor: Introduce invalid_logical_cpuid()
2015-05-13 23:28:14 +02:00
processor_perflib.c
processor_thermal.c
processor_throttling.c
property.c
ACPI / property: Define a symbol for PRP0001
2015-05-22 23:57:14 +02:00
reboot.c
resource.c
Merge branches 'pm-cpuidle', 'pm-cpufreq' and 'acpi-resources'
2015-07-16 23:47:19 +02:00
sbs.c
ACPI / SBS: Enable battery manager when present
2015-04-29 00:04:29 +02:00
sbshc.c
ACPI / SBS: Add 5 us delay to fix SBS hangs on MacBook
2015-04-30 23:18:11 +02:00
sbshc.h
scan.c
ACPI / scan: Add support for ACPI _CLS device matching
2015-07-07 01:55:20 +02:00
sleep.c
ACPI / PM: Enable all wakeup GPEs in suspend-to-idle
2015-03-30 01:52:02 +02:00
sleep.h
ACPI / sleep: Drop acpi_suspend() which is not used
2015-03-18 12:53:21 +01:00
sysfs.c
ACPI / sysfs: Treat the count field of counter_show() as unsigned
2015-03-10 01:03:30 +01:00
tables.c
ACPI / table: Print GIC information when MADT is parsed
2015-03-25 11:49:31 +00:00
thermal.c
thermal: of: fix cooling device weights in device tree
2015-05-04 21:27:50 -07:00
utils.c
acpi-video-detect: video: Make video_detect code part of the video module
2015-06-19 01:10:36 +02:00
video_detect.c
ACPI / video: Make acpi_video_unregister_backlight() private
2015-06-19 01:12:50 +02:00
wakeup.c