ACPI: PM: postpone bringing devices to D0 unless we need them
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 22 Jun 2021 21:39:39 +0000 (14:39 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 23 Jun 2021 17:33:42 +0000 (19:33 +0200)
commitf7599be2bb7694d94b65a57a74aba75f2c101c28
treeaaea12f49331200957d7171ec44609de9332cd4b
parent8fbd6c15ea0a1d5e5d4e8ce4cc31e31afbcc1678
ACPI: PM: postpone bringing devices to D0 unless we need them

Currently ACPI power domain brings devices into D0 state in the "resume
early" phase. Normally this does not cause any issues, as powering up
happens quickly. However there are peripherals that have certain timing
requirements for powering on, for example some models of Elan
touchscreens need 300msec after powering up/releasing reset line before
they can accept commands from the host. Such devices will dominate
the time spent in early resume phase and cause increase in overall
resume time as we wait for early resume to complete before we can
proceed to the normal resume stage.

There are ways for a driver to indicate that it can tolerate device
being in the low power mode and that it knows how to power the device
back up when resuming, bit that requires changes to individual drivers
that may not really care about details of ACPI controlled power
management.

This change attempts to solve this issue at ACPI power domain level, by
postponing powering up device until we get to the normal resume stage,
unless there is early resume handler defined for the device, or device
does not declare any resume handlers, in which case we continue powering
up such devices early. This allows us to shave off several hundred
milliseconds of resume time on affected systems.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/device_pm.c