diff options
| author | 2019-04-16 17:20:51 +0800 | |
|---|---|---|
| committer | 2019-06-28 21:28:30 +0000 | |
| commit | e55d3d47276e867c11289c2017567df7b4cb43fa (patch) | |
| tree | 5aabf77283c4e701804fa6a414d9bfefe04212c3 | |
| parent | 78dc908e89f4780c5515d88d059f08dd40bb73ca (diff) | |
cec: message buffered before logical addr allocated [1/1]
BUG=130199965
Problem:
when atom received <System Audio Mode Request> after hotplug
befor logical address have not allocated, if response
<Feature Abort>, it may trigger tv send <Request ARC Termination>,
it may lead arc connect fail
Solution:
buffer <System Audio Mode Request> when received at the time
between hotplug-in and logical address allocated
Test: test ok using atom
Change-Id: I4de6b74ed2c1f115097f950332bbc3d7c7a1f417
Signed-off-by: Jinping Wang <jinping.wang@amlogic.com>
Cherry-pick: https://partner-android-review.git.corp.google.com/c/platform/frameworks/base/+/1343982/
(cherry picked from commit 3b1e136817f96eea0d548cc4262065564e02e619)
Change-Id: I9cd7524a491d6c56832b14cc6e620429c82b738c
| -rw-r--r-- | services/core/java/com/android/server/hdmi/HdmiCecController.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/hdmi/HdmiControlService.java | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecController.java b/services/core/java/com/android/server/hdmi/HdmiCecController.java index 86be585e5d23..6174e5418caf 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecController.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecController.java @@ -580,7 +580,9 @@ final class HdmiCecController { @ServiceThreadOnly private void onReceiveCommand(HdmiCecMessage message) { assertRunOnServiceThread(); - if (isAcceptableAddress(message.getDestination()) && mService.handleCecCommand(message)) { + if ((isAcceptableAddress(message.getDestination()) + || !mService.isAddressAllocated()) + && mService.handleCecCommand(message)) { return; } // Not handled message, so we will reply it with <Feature Abort>. diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index df4674c958b0..9aaf33c90df2 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -380,6 +380,9 @@ public class HdmiControlService extends SystemService { case Constants.MESSAGE_TEXT_VIEW_ON: bufferImageOrTextViewOn(message); return true; + case Constants.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST: + bufferSystemAudioModeRequest(message); + return true; // Add here if new message that needs to buffer default: // Do not need to buffer messages other than above @@ -412,6 +415,12 @@ public class HdmiControlService extends SystemService { } } + private void bufferSystemAudioModeRequest(HdmiCecMessage message) { + if (!replaceMessageIfBuffered(message, Constants.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST)) { + mBuffer.add(message); + } + } + // Returns true if the message is replaced private boolean replaceMessageIfBuffered(HdmiCecMessage message, int opcode) { for (int i = 0; i < mBuffer.size(); i++) { |