From 757c097753a166a6f3ecbbcbf42075ce3ba1a7ed Mon Sep 17 00:00:00 2001 From: Jinsuk Kim Date: Mon, 23 Feb 2015 10:15:42 +0900 Subject: [PATCH] CEC: Switch ARC hardware circuit before device update Audio Return Channel hardware circuit was being switched after the device update initiated by hotplug event. The device instance was already removed by the time ARC update was attempted, hence caused an exception. This CL ensure the config change is done in advance, when the AVR device instance is still present. Bug: 19250400 Change-Id: I31cf682f5c8d1a279a0703d10fe182f3da23d3db --- .../android/server/hdmi/HdmiCecLocalDeviceTv.java | 14 +++++++++++++- .../server/hdmi/HotplugDetectionAction.java | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index 4f458e60022f5..cfc9132e1ff97 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -881,7 +881,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { HdmiLogger.debug("Set Arc Status[old:%b new:%b]", mArcEstablished, enabled); boolean oldStatus = mArcEstablished; // 1. Enable/disable ARC circuit. - mService.setAudioReturnChannel(getAvrDeviceInfo().getPortId(), enabled); + setAudioReturnChannel(enabled); // 2. Notify arc status to audio service. notifyArcStatusToAudioService(enabled); // 3. Update arc status; @@ -889,6 +889,18 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { return oldStatus; } + /** + * Switch hardware ARC circuit in the system. + */ + @ServiceThreadOnly + void setAudioReturnChannel(boolean enabled) { + assertRunOnServiceThread(); + HdmiDeviceInfo avr = getAvrDeviceInfo(); + if (avr != null) { + mService.setAudioReturnChannel(avr.getPortId(), enabled); + } + } + @ServiceThreadOnly private void updateArcFeatureStatus(int portId, boolean isConnected) { assertRunOnServiceThread(); diff --git a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java index 1bbd038e7f4d6..f7555e9802338 100644 --- a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java +++ b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java @@ -262,6 +262,7 @@ final class HotplugDetectionAction extends HdmiCecFeatureAction { // Turn off system audio mode and update settings. tv().setSystemAudioMode(false, true); if (tv().isArcEstabilished()) { + tv().setAudioReturnChannel(false); addAndStartAction(new RequestArcTerminationAction(localDevice(), address)); } }