diff --git a/src/java/com/android/internal/telephony/CallManager.java b/src/java/com/android/internal/telephony/CallManager.java
index 96407c7..3f6df87 100644
--- a/src/java/com/android/internal/telephony/CallManager.java
+++ b/src/java/com/android/internal/telephony/CallManager.java
@@ -502,72 +502,6 @@
         return getFirstActiveRingingCall(subId).getPhone();
     }
 
-    public void setAudioMode() {
-        Context context = getContext();
-        if (context == null) return;
-        AudioManager audioManager = (AudioManager)
-                context.getSystemService(Context.AUDIO_SERVICE);
-
-        // change the audio mode and request/abandon audio focus according to phone state,
-        // but only on audio mode transitions
-        switch (getState()) {
-            case RINGING:
-                int curAudioMode = audioManager.getMode();
-                if (curAudioMode != AudioManager.MODE_RINGTONE) {
-                    // only request audio focus if the ringtone is going to be heard
-                    if (audioManager.getStreamVolume(AudioManager.STREAM_RING) > 0) {
-                        if (VDBG) Rlog.d(LOG_TAG, "requestAudioFocus on STREAM_RING");
-                        audioManager.requestAudioFocusForCall(AudioManager.STREAM_RING,
-                                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
-                    }
-                    if(!mSpeedUpAudioForMtCall) {
-                        audioManager.setMode(AudioManager.MODE_RINGTONE);
-                    }
-                }
-
-                if (mSpeedUpAudioForMtCall && (curAudioMode != AudioManager.MODE_IN_CALL)) {
-                    audioManager.setMode(AudioManager.MODE_IN_CALL);
-                }
-                break;
-            case OFFHOOK:
-                Phone offhookPhone = getFgPhone();
-                if (getActiveFgCallState() == Call.State.IDLE) {
-                    // There is no active Fg calls, the OFFHOOK state
-                    // is set by the Bg call. So set the phone to bgPhone.
-                    offhookPhone = getBgPhone();
-                }
-
-                int newAudioMode = AudioManager.MODE_IN_CALL;
-                if (offhookPhone instanceof SipPhone) {
-                    Rlog.d(LOG_TAG, "setAudioMode Set audio mode for SIP call!");
-                    // enable IN_COMMUNICATION audio mode instead for sipPhone
-                    newAudioMode = AudioManager.MODE_IN_COMMUNICATION;
-                }
-                int currMode = audioManager.getMode();
-                if (currMode != newAudioMode || mSpeedUpAudioForMtCall) {
-                    // request audio focus before setting the new mode
-                    if (VDBG) Rlog.d(LOG_TAG, "requestAudioFocus on STREAM_VOICE_CALL");
-                    audioManager.requestAudioFocusForCall(AudioManager.STREAM_VOICE_CALL,
-                            AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
-                    Rlog.d(LOG_TAG, "setAudioMode Setting audio mode from "
-                            + currMode + " to " + newAudioMode);
-                    audioManager.setMode(newAudioMode);
-                }
-                mSpeedUpAudioForMtCall = false;
-                break;
-            case IDLE:
-                if (audioManager.getMode() != AudioManager.MODE_NORMAL) {
-                    audioManager.setMode(AudioManager.MODE_NORMAL);
-                    if (VDBG) Rlog.d(LOG_TAG, "abandonAudioFocus");
-                    // abandon audio focus after the mode has been set back to normal
-                    audioManager.abandonAudioFocusForCall();
-                }
-                mSpeedUpAudioForMtCall = false;
-                break;
-        }
-        Rlog.d(LOG_TAG, "setAudioMode state = " + getState());
-    }
-
     private Context getContext() {
         Phone defaultPhone = getDefaultPhone();
         return ((defaultPhone == null) ? null : defaultPhone.getContext());
@@ -690,24 +624,6 @@
             }
         }
 
-        Context context = getContext();
-        if (context == null) {
-            Rlog.d(LOG_TAG, "Speedup Audio Path enhancement: Context is null");
-        } else if (context.getResources().getBoolean(
-                com.android.internal.R.bool.config_speed_up_audio_on_mt_calls)) {
-            Rlog.d(LOG_TAG, "Speedup Audio Path enhancement");
-            AudioManager audioManager = (AudioManager)
-                    context.getSystemService(Context.AUDIO_SERVICE);
-            int currMode = audioManager.getMode();
-            if ((currMode != AudioManager.MODE_IN_CALL)
-                    && !(ringingPhone instanceof SipPhone)) {
-                Rlog.d(LOG_TAG, "setAudioMode Setting audio mode from " +
-                                currMode + " to " + AudioManager.MODE_IN_CALL);
-                audioManager.setMode(AudioManager.MODE_IN_CALL);
-                mSpeedUpAudioForMtCall = true;
-            }
-        }
-
         // We only support the AUDIO_ONLY video state in this scenario.
         ringingPhone.acceptCall(VideoCallProfile.VideoState.AUDIO_ONLY);
 
