summaryrefslogtreecommitdiffstats
path: root/services/core/java/com/android/server/hdmi
diff options
context:
space:
mode:
authorJinsuk Kim <jinsukkim@google.com>2015-02-10 07:10:40 +0900
committerJinsuk Kim <jinsukkim@google.com>2015-02-10 14:14:39 +0900
commitbad839386afc76ea037da022960b63683e95a7b0 (patch)
tree4b23b38a3ff8e6212c19b619fee11994c20938dd /services/core/java/com/android/server/hdmi
parentbe96280fdad21a4687f19c3deb95fc2a5ceb630d (diff)
downloadframeworks_base-bad839386afc76ea037da022960b63683e95a7b0.zip
frameworks_base-bad839386afc76ea037da022960b63683e95a7b0.tar.gz
frameworks_base-bad839386afc76ea037da022960b63683e95a7b0.tar.bz2
CEC: Define a system property to keep playback device awake
Playback device doesn't go to suspend (standby) mode if it's the active source. This CL makes the behavior configurable through the system property persist.sys.hdmi.keep_awake. Bug: 19299723 Change-Id: Icb8b593ab44429ec0520e60d19d0368982ff5667
Diffstat (limited to 'services/core/java/com/android/server/hdmi')
-rw-r--r--services/core/java/com/android/server/hdmi/Constants.java4
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java59
2 files changed, 56 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/hdmi/Constants.java b/services/core/java/com/android/server/hdmi/Constants.java
index 0c86aed..e434f39 100644
--- a/services/core/java/com/android/server/hdmi/Constants.java
+++ b/services/core/java/com/android/server/hdmi/Constants.java
@@ -214,6 +214,10 @@ final class Constants {
// values which denotes the device type in HDMI Spec 1.4.
static final String PROPERTY_DEVICE_TYPE = "ro.hdmi.device_type";
+ // Set to false to allow playback device to go to suspend mode even
+ // when it's an active source. True by default.
+ static final String PROPERTY_KEEP_AWAKE = "persist.sys.hdmi.keep_awake";
+
static final int RECORDING_TYPE_DIGITAL_RF = 1;
static final int RECORDING_TYPE_ANALOGUE_RF = 2;
static final int RECORDING_TYPE_EXTERNAL_PHYSICAL_ADDRESS = 3;
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
index a8f6954..1e43670 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
@@ -38,9 +38,11 @@ final class HdmiCecLocalDevicePlayback extends HdmiCecLocalDevice {
// Used to keep the device awake while it is the active source. For devices that
// cannot wake up via CEC commands, this address the inconvenience of having to
- // turn them on.
+ // turn them on. True by default, and can be disabled (i.e. device can go to sleep
+ // in active device status) by explicitly setting the system property
+ // persist.sys.hdmi.keep_awake to false.
// Lazily initialized - should call getWakeLock() to get the instance.
- private WakeLock mWakeLock;
+ private ActiveWakeLock mWakeLock;
HdmiCecLocalDevicePlayback(HdmiControlService service) {
super(service, HdmiDeviceInfo.DEVICE_PLAYBACK);
@@ -142,19 +144,30 @@ final class HdmiCecLocalDevicePlayback extends HdmiCecLocalDevice {
mIsActiveSource = on;
if (on) {
getWakeLock().acquire();
- HdmiLogger.debug("active source: %b. Wake lock acquired", mIsActiveSource);
} else {
getWakeLock().release();
- HdmiLogger.debug("Wake lock released");
}
}
@ServiceThreadOnly
- private WakeLock getWakeLock() {
+ private ActiveWakeLock getWakeLock() {
assertRunOnServiceThread();
if (mWakeLock == null) {
- mWakeLock = mService.getPowerManager().newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
- mWakeLock.setReferenceCounted(false);
+ if (SystemProperties.getBoolean(Constants.PROPERTY_KEEP_AWAKE, true)) {
+ mWakeLock = new SystemWakeLock();
+ } else {
+ // Create a dummy lock object that doesn't do anything about wake lock,
+ // hence allows the device to go to sleep even if it's the active source.
+ mWakeLock = new ActiveWakeLock() {
+ @Override
+ public void acquire() { }
+ @Override
+ public void release() { }
+ @Override
+ public boolean isHeld() { return false; }
+ };
+ HdmiLogger.debug("No wakelock is used to keep the display on.");
+ }
}
return mWakeLock;
}
@@ -258,4 +271,36 @@ final class HdmiCecLocalDevicePlayback extends HdmiCecLocalDevice {
super.dump(pw);
pw.println("mIsActiveSource: " + mIsActiveSource);
}
+
+ // Wrapper interface over PowerManager.WakeLock
+ private interface ActiveWakeLock {
+ void acquire();
+ void release();
+ boolean isHeld();
+ }
+
+ private class SystemWakeLock implements ActiveWakeLock {
+ private final WakeLock mWakeLock;
+ public SystemWakeLock() {
+ mWakeLock = mService.getPowerManager().newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
+ mWakeLock.setReferenceCounted(false);
+ }
+
+ @Override
+ public void acquire() {
+ mWakeLock.acquire();
+ HdmiLogger.debug("active source: %b. Wake lock acquired", mIsActiveSource);
+ }
+
+ @Override
+ public void release() {
+ mWakeLock.release();
+ HdmiLogger.debug("Wake lock released");
+ }
+
+ @Override
+ public boolean isHeld() {
+ return mWakeLock.isHeld();
+ }
+ }
}