summaryrefslogtreecommitdiffstats
path: root/services/core/java/com/android/server/hdmi
diff options
context:
space:
mode:
authorJinsuk Kim <jinsukkim@google.com>2015-01-29 07:34:34 +0900
committerJinsuk Kim <jinsukkim@google.com>2015-01-29 06:47:34 +0000
commit07600116b59e2accd1e95b9029c2c9819cd76c5a (patch)
treec44b44b804509101cdb3eca8ed3ed11c18b256d2 /services/core/java/com/android/server/hdmi
parent2ee0d6f44d7274bb1846cc6ff7a60451539a2b51 (diff)
downloadframeworks_base-07600116b59e2accd1e95b9029c2c9819cd76c5a.zip
frameworks_base-07600116b59e2accd1e95b9029c2c9819cd76c5a.tar.gz
frameworks_base-07600116b59e2accd1e95b9029c2c9819cd76c5a.tar.bz2
CEC: Ensure stable AVR connection
Make sure AVR device removal due to hotplug detection failure occur in a less strict manner - doing it only if the failure is detected 3 times in a row. Bug: 19171321 Change-Id: I1479663b05cdc957cc52123799c756f6b74f6708
Diffstat (limited to 'services/core/java/com/android/server/hdmi')
-rw-r--r--services/core/java/com/android/server/hdmi/HotplugDetectionAction.java19
1 files changed, 19 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java
index 722be71..1bbd038 100644
--- a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java
+++ b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java
@@ -38,6 +38,7 @@ final class HotplugDetectionAction extends HdmiCecFeatureAction {
private static final int POLLING_INTERVAL_MS = 5000;
private static final int TIMEOUT_COUNT = 3;
+ private static final int AVR_COUNT_MAX = 3;
// State in which waits for next polling
private static final int STATE_WAIT_FOR_NEXT_POLLING = 1;
@@ -48,6 +49,12 @@ final class HotplugDetectionAction extends HdmiCecFeatureAction {
private int mTimeoutCount = 0;
+ // Counter used to ensure the connection to AVR is stable. Occasional failure to get
+ // polling response from AVR despite its presence leads to unstable status flipping.
+ // This is a workaround to deal with it, by removing the device only if the removal
+ // is detected {@code AVR_COUNT_MAX} times in a row.
+ private int mAvrStatusCount = 0;
+
/**
* Constructor
*
@@ -148,10 +155,22 @@ final class HotplugDetectionAction extends HdmiCecFeatureAction {
BitSet removed = complement(currentInfos, polledResult);
int index = -1;
while ((index = removed.nextSetBit(index + 1)) != -1) {
+ if (index == Constants.ADDR_AUDIO_SYSTEM) {
+ ++mAvrStatusCount;
+ Slog.w(TAG, "Ack not returned from AVR. count: " + mAvrStatusCount);
+ if (mAvrStatusCount < AVR_COUNT_MAX) {
+ continue;
+ }
+ }
Slog.v(TAG, "Remove device by hot-plug detection:" + index);
removeDevice(index);
}
+ // Reset the counter if the ack is returned from AVR.
+ if (!removed.get(Constants.ADDR_AUDIO_SYSTEM)) {
+ mAvrStatusCount = 0;
+ }
+
// Next, check added devices.
BitSet added = complement(polledResult, currentInfos);
index = -1;