diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
index 2dd6bf5..0961fcb3 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
@@ -1360,9 +1360,6 @@
             case AudioSystem.DEVICE_OUT_USB_HEADSET:
                 connType = AudioRoutesInfo.MAIN_USB;
                 break;
-            case AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET:
-                connType = AudioRoutesInfo.MAIN_DOCK_SPEAKERS;
-                break;
         }
 
         synchronized (mCurAudioRoutes) {
diff --git a/services/usb/java/com/android/server/usb/UsbAlsaDevice.java b/services/usb/java/com/android/server/usb/UsbAlsaDevice.java
index 85b1de5..9d4db00 100644
--- a/services/usb/java/com/android/server/usb/UsbAlsaDevice.java
+++ b/services/usb/java/com/android/server/usb/UsbAlsaDevice.java
@@ -41,7 +41,6 @@
 
     private final boolean mIsInputHeadset;
     private final boolean mIsOutputHeadset;
-    private final boolean mIsDock;
 
     private boolean mSelected = false;
     private int mOutputState;
@@ -54,7 +53,7 @@
 
     public UsbAlsaDevice(IAudioService audioService, int card, int device, String deviceAddress,
             boolean hasOutput, boolean hasInput,
-            boolean isInputHeadset, boolean isOutputHeadset, boolean isDock) {
+            boolean isInputHeadset, boolean isOutputHeadset) {
         mAudioService = audioService;
         mCardNum = card;
         mDeviceNum = device;
@@ -63,32 +62,31 @@
         mHasInput = hasInput;
         mIsInputHeadset = isInputHeadset;
         mIsOutputHeadset = isOutputHeadset;
-        mIsDock = isDock;
     }
 
     /**
-     * @return the ALSA card number associated with this peripheral.
+     * @returns the ALSA card number associated with this peripheral.
      */
     public int getCardNum() {
         return mCardNum;
     }
 
     /**
-     * @return the ALSA device number associated with this peripheral.
+     * @returns the ALSA device number associated with this peripheral.
      */
     public int getDeviceNum() {
         return mDeviceNum;
     }
 
     /**
-     * @return the USB device device address associated with this peripheral.
+     * @returns the USB device device address associated with this peripheral.
      */
     public String getDeviceAddress() {
         return mDeviceAddress;
     }
 
     /**
-     * @return the ALSA card/device address string.
+     * @returns the ALSA card/device address string.
      */
     public String getAlsaCardDeviceString() {
         if (mCardNum < 0 || mDeviceNum < 0) {
@@ -100,42 +98,35 @@
     }
 
     /**
-     * @return true if the device supports output.
+     * @returns true if the device supports output.
      */
     public boolean hasOutput() {
         return mHasOutput;
     }
 
     /**
-     * @return true if the device supports input (recording).
+     * @returns true if the device supports input (recording).
      */
     public boolean hasInput() {
         return mHasInput;
     }
 
     /**
-     * @return true if the device is a headset for purposes of input.
+     * @returns true if the device is a headset for purposes of input.
      */
     public boolean isInputHeadset() {
         return mIsInputHeadset;
     }
 
     /**
-     * @return true if the device is a headset for purposes of output.
+     * @returns true if the device is a headset for purposes of output.
      */
     public boolean isOutputHeadset() {
         return mIsOutputHeadset;
     }
 
     /**
-     * @return true if the device is a USB dock.
-     */
-    public boolean isDock() {
-        return mIsDock;
-    }
-
-    /**
-     * @return true if input jack is detected or jack detection is not supported.
+     * @returns true if input jack is detected or jack detection is not supported.
      */
     private synchronized boolean isInputJackConnected() {
         if (mJackDetector == null) {
@@ -145,7 +136,7 @@
     }
 
     /**
-     * @return true if input jack is detected or jack detection is not supported.
+     * @returns true if input jack is detected or jack detection is not supported.
      */
     private synchronized boolean isOutputJackConnected() {
         if (mJackDetector == null) {
@@ -199,10 +190,9 @@
         try {
             // Output Device
             if (mHasOutput) {
-                int device = mIsDock ? AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET
-                        : (mIsOutputHeadset
-                            ? AudioSystem.DEVICE_OUT_USB_HEADSET
-                            : AudioSystem.DEVICE_OUT_USB_DEVICE);
+                int device = mIsOutputHeadset
+                        ? AudioSystem.DEVICE_OUT_USB_HEADSET
+                        : AudioSystem.DEVICE_OUT_USB_DEVICE;
                 if (DEBUG) {
                     Slog.d(TAG, "pre-call device:0x" + Integer.toHexString(device)
                             + " addr:" + alsaCardDeviceString
@@ -241,7 +231,7 @@
 
     /**
      * @Override
-     * @return a string representation of the object.
+     * @returns a string representation of the object.
      */
     public synchronized String toString() {
         return "UsbAlsaDevice: [card: " + mCardNum
@@ -283,7 +273,7 @@
 
     /**
      * @Override
-     * @return true if the objects are equivalent.
+     * @returns true if the objects are equivalent.
      */
     public boolean equals(Object obj) {
         if (!(obj instanceof UsbAlsaDevice)) {
@@ -295,13 +285,12 @@
                 && mHasOutput == other.mHasOutput
                 && mHasInput == other.mHasInput
                 && mIsInputHeadset == other.mIsInputHeadset
-                && mIsOutputHeadset == other.mIsOutputHeadset
-                && mIsDock == other.mIsDock);
+                && mIsOutputHeadset == other.mIsOutputHeadset);
     }
 
     /**
      * @Override
-     * @return a hash code generated from the object contents.
+     * @returns a hash code generated from the object contents.
      */
     public int hashCode() {
         final int prime = 31;
@@ -312,7 +301,6 @@
         result = prime * result + (mHasInput ? 0 : 1);
         result = prime * result + (mIsInputHeadset ? 0 : 1);
         result = prime * result + (mIsOutputHeadset ? 0 : 1);
-        result = prime * result + (mIsDock ? 0 : 1);
 
         return result;
     }
diff --git a/services/usb/java/com/android/server/usb/UsbAlsaManager.java b/services/usb/java/com/android/server/usb/UsbAlsaManager.java
index 22b110f..0aa62c5 100644
--- a/services/usb/java/com/android/server/usb/UsbAlsaManager.java
+++ b/services/usb/java/com/android/server/usb/UsbAlsaManager.java
@@ -237,7 +237,6 @@
         if (hasInput || hasOutput) {
             boolean isInputHeadset = parser.isInputHeadset();
             boolean isOutputHeadset = parser.isOutputHeadset();
-            boolean isDock = parser.isDock();
 
             if (mAudioService == null) {
                 Slog.e(TAG, "no AudioService");
@@ -247,7 +246,7 @@
             UsbAlsaDevice alsaDevice =
                     new UsbAlsaDevice(mAudioService, cardRec.getCardNum(), 0 /*device*/,
                                       deviceAddress, hasOutput, hasInput,
-                                      isInputHeadset, isOutputHeadset, isDock);
+                                      isInputHeadset, isOutputHeadset);
             if (alsaDevice != null) {
                 alsaDevice.setDeviceNameAndDescription(
                           cardRec.getCardName(), cardRec.getCardDescription());
diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java
index 5befe52..f33001c 100644
--- a/services/usb/java/com/android/server/usb/UsbHostManager.java
+++ b/services/usb/java/com/android/server/usb/UsbHostManager.java
@@ -155,7 +155,7 @@
                 pw.println("manfacturer:0x" + Integer.toHexString(deviceDescriptor.getVendorID())
                         + " product:" + Integer.toHexString(deviceDescriptor.getProductID()));
                 pw.println("isHeadset[in: " + parser.isInputHeadset()
-                        + " , out: " + parser.isOutputHeadset() + "], isDock: " + parser.isDock());
+                        + " , out: " + parser.isOutputHeadset() + "]");
             } else {
                 pw.println(formatTime() + " Disconnect " + mDeviceAddress);
             }
@@ -169,8 +169,9 @@
                 UsbDescriptorsTree descriptorTree = new UsbDescriptorsTree();
                 descriptorTree.parse(parser);
                 descriptorTree.report(new TextReportCanvas(parser, stringBuilder));
+
                 stringBuilder.append("isHeadset[in: " + parser.isInputHeadset()
-                        + " , out: " + parser.isOutputHeadset() + "], isDock: " + parser.isDock());
+                        + " , out: " + parser.isOutputHeadset() + "]");
                 pw.println(stringBuilder.toString());
             } else {
                 pw.println(formatTime() + " Disconnect " + mDeviceAddress);
@@ -187,8 +188,9 @@
                     descriptor.report(canvas);
                 }
                 pw.println(stringBuilder.toString());
+
                 pw.println("isHeadset[in: " + parser.isInputHeadset()
-                        + " , out: " + parser.isOutputHeadset() + "], isDock: " + parser.isDock());
+                        + " , out: " + parser.isOutputHeadset() + "]");
             } else {
                 pw.println(formatTime() + " Disconnect " + mDeviceAddress);
             }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java
index 38ce6cb..7250a07 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java
@@ -785,35 +785,4 @@
         return getOutputHeadsetProbability() >= OUT_HEADSET_TRIGGER;
     }
 
-    /**
-     * isDock() indicates if the connected USB output peripheral is a docking station with
-     * audio output.
-     * A valid audio dock must declare only one audio output control terminal of type
-     * TERMINAL_EXTERN_DIGITAL.
-     */
-    public boolean isDock() {
-        if (hasMIDIInterface() || hasHIDInterface()) {
-            return false;
-        }
-
-        ArrayList<UsbDescriptor> acDescriptors =
-                getACInterfaceDescriptors(UsbACInterface.ACI_OUTPUT_TERMINAL,
-                        UsbACInterface.AUDIO_AUDIOCONTROL);
-
-        if (acDescriptors.size() != 1) {
-            return false;
-        }
-
-        if (acDescriptors.get(0) instanceof UsbACTerminal) {
-            UsbACTerminal outDescr = (UsbACTerminal) acDescriptors.get(0);
-            if (outDescr.getTerminalType() == UsbTerminalTypes.TERMINAL_EXTERN_DIGITAL) {
-                return true;
-            }
-        } else {
-            Log.w(TAG, "Undefined Audio Output terminal l: " + acDescriptors.get(0).getLength()
-                    + " t:0x" + Integer.toHexString(acDescriptors.get(0).getType()));
-        }
-        return false;
-    }
-
 }
