In testing, I observed one instance of a call failing due to a signal
sent to the process. This could happen at various times so it's better
to be safe than sorry.
Bug: 20534809
Change-Id: I42242087300d8b840a50aec34aa6b2e1507cab50
Use the wakeup count interface for requesting suspend, instead of
autosleep, to allow userspace to collect stats on suspend/resume
activity.
Change-Id: I44b5ef031b2bdc5b09c904fb2adbbe16370c2984
Compile libsuspend as a static library as well, currently needed by the charger
code in some cases.
Related-to-bug: 7429504
Change-Id: I113017c2c855f915b77c76d8934b6e57c0bb532c
Signed-off-by: Iliyan Malchev <malchev@google.com>
Prevents possible SIGSEGV on second autosuspend_enable attempt when
first intialization attempt fails. autosuspend_inited should only
be set once autosuspend_ops has been assigned.
Consider the first call to autosuspend_enable().
autosuspend_init() sets its inited flag to true, and attempts to
set autosuspend_ops. If all the other autosuspend_*_init() attempts
fail, autosuspend_init() returns -1, which autosuspend_enable()
will return as a failure. A second call to autosuspend_enable()
will check autosuspend_init() and see that autosuspend has already
been initialized. It will attempt to access autosuspend_ops, which
were not set in the first initialization attempt, causing a SIGSEGV.
Change-Id: Ib2d3ee62fee4c3b6d0323e5b7f3709a23c6b923f
If autosuspend_autosleep_init is called when autosleep is enabled,
for example after a runtime restart with the screen off, the kernel
autosleep state will be enabled, but autosuspend_enabled is false.
Further calls to autosuspend_disable by the framework will not result
in autosleep being disabled.
Call autosuspend_autosleep_disable from autosuspend_autosleep_init
to get the kernel state into a known state that matches the
autosuspend_enabled flag.
Bug: 7119416
Change-Id: I8611e4fd256838272aad4382c2340508805b0376
libsuspend had only a single warning in the clang build. Fixing it to
make the build clean.
Change-Id: Iaac5f9144b6e6cb122141c6416056c1b2c9aa98e
Author: Edwin Vane <edwin.vane@intel.com>
Reviewed-by: Kevin P Schoedel <kevin.p.schoedel@intel.com>
Wait for the early suspend transition to finish to the point where
surfaceflinger would previously have synchronized. This is important
during screen on, to ensure the display early suspend handlers have
completed before surfaceflinger unblanks.
Change-Id: I91ac0253d9655c3f1ae3dd7f1a918c279568b23e
SurfaceFlinger and PowerManagerService manage their synchronization
without the help of early suspend, and SurfaceFlinger no longer unblocks
early suspend. Add a new thread when early suspend is detected that will
immediately unblock early suspend.
Change-Id: I87ef4984a2ab34cbbb3af8b7762236b9a92dc2ea
libsuspend provides functions autosuspend_enable() and
autosuspend_disable() to trigger suspend on a variety of different
kernels.
Change-Id: I5dc28fb51532fa7c514330f1cfde7698d31d734c