From 944301e0828d07daec90f1e4351dc5e7276fa44c Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Thu, 8 Sep 2011 16:09:21 -0700 Subject: [PATCH] Fixed digital audio output detection Fixed bug in WiredAccessoryObserver preventing correct detection of docks with digital audio connection (S/PDIF) Change-Id: I96eeebc53952625d75133ce0af68f4f219bce41d --- .../server/WiredAccessoryObserver.java | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/services/java/com/android/server/WiredAccessoryObserver.java b/services/java/com/android/server/WiredAccessoryObserver.java index e45c3685b1c49..6a63eaca8da24 100644 --- a/services/java/com/android/server/WiredAccessoryObserver.java +++ b/services/java/com/android/server/WiredAccessoryObserver.java @@ -107,25 +107,18 @@ class WiredAccessoryObserver extends UEventObserver { private synchronized final void updateState(String name, int state) { if (name.equals("usb_audio")) { - if (state == 1) { - switchState = ((mHeadsetState & (BIT_HEADSET|BIT_HEADSET_NO_MIC| - BIT_USB_HEADSET_DGTL|BIT_HDMI_AUDIO)) | - (state << 2)); - } else if (state == 2) { - switchState = ((mHeadsetState & (BIT_HEADSET|BIT_HEADSET_NO_MIC| - BIT_USB_HEADSET_ANLG|BIT_HDMI_AUDIO)) | - (state << 3)); - } else switchState = (mHeadsetState & (BIT_HEADSET|BIT_HEADSET_NO_MIC|BIT_HDMI_AUDIO)); - } - else if (name.equals("hdmi")) { + switchState = ((mHeadsetState & (BIT_HEADSET|BIT_HEADSET_NO_MIC|BIT_HDMI_AUDIO)) | + ((state == 1) ? BIT_USB_HEADSET_ANLG : + ((state == 2) ? BIT_USB_HEADSET_DGTL : 0))); + } else if (name.equals("hdmi")) { switchState = ((mHeadsetState & (BIT_HEADSET|BIT_HEADSET_NO_MIC| BIT_USB_HEADSET_DGTL|BIT_USB_HEADSET_ANLG)) | - (state << 4)); - } - else { + ((state == 1) ? BIT_HDMI_AUDIO : 0)); + } else { switchState = ((mHeadsetState & (BIT_HDMI_AUDIO|BIT_USB_HEADSET_ANLG| BIT_USB_HEADSET_DGTL)) | - state); + ((state == 1) ? BIT_HEADSET : + ((state == 2) ? BIT_HEADSET_NO_MIC : 0))); } update(name, switchState); }