FM: disable and enable slimbus while swtiching output device

speaker on sequance

1. disable slimbus.
2. close hardware loop back.
3. startRecordsink thread and set preffered out put device as speaker.
4. enable slimbus again.

Change-Id: I46a56f908e3ce53955953c887d73701a3cbbbd23
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index ea7fc5b..6294037 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -974,7 +974,7 @@
           setLowPowerMode(false);
           startFM();
           if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true)))
-              mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+              enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
       }
    }
 
@@ -1699,9 +1699,7 @@
                           exitRecordSinkThread();
                       }
                       if ((mReceiver != null) && mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true))) {
-                          mEventReceived = false;
-                          mReceiver.EnableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
-                          waitForFWEvent();
+                          enableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
                       }
                       mStoppedOnFocusLoss = true;
 
@@ -1721,9 +1719,7 @@
 
                       //intentional fall through.
                       if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true))) {
-                          mEventReceived = false;
-                          mReceiver.EnableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
-                          waitForFWEvent();
+                          enableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
                       }
                       if (true == mPlaybackInProgress) {
                           stopFM();
@@ -1752,7 +1748,7 @@
                       if(false == mPlaybackInProgress)
                           startFM();
                       if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true)))
-                          mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+                          enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
                       mSession.setActive(true);
                       break;
                   default:
@@ -2399,12 +2395,12 @@
          return bStatus;
    }
 
-   private boolean checkForFwResponse(){
-       Log.d(LOGTAG, "checkForFwResponse");
+   private boolean enableSlimbus(int flag) {
+       Log.d(LOGTAG, "enableSlimbus");
        boolean bStatus = false;
        // Send command to enable FM core
        mEventReceived = false;
-       mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+       mReceiver.EnableSlimbus(flag);
        bStatus = waitForFWEvent();
        return bStatus;
    }
@@ -2525,10 +2521,11 @@
          {
            if (mReceiver.isCherokeeChip()) {
                if ((mPref.getBoolean("SLIMBUS_SEQ", true)) ) {
-                   bStatus = checkForFwResponse();
+                       bStatus = enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
                    if (bStatus) {
                        bStatus = fmTurnOnSequenceCherokee();
                    } else {
+                       Log.d(LOGTAG, "set SLIMBUS_SEQ flag to false");
                        mEditor.putBoolean("SLIMBUS_SEQ", false);
                        mEditor.commit();
                        bStatus = fmTurnOnSequence();
@@ -2555,6 +2552,10 @@
       if(audioManager != null)
       {
          Log.d(LOGTAG, "audioManager.setFmRadioOn = false \n" );
+         if ((mReceiver != null) && mReceiver.isCherokeeChip() &&
+                            (mPref.getBoolean("SLIMBUS_SEQ", true))) {
+             enableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
+         }
          stopFM();
          unMute();
          // If call is active, we will use audio focus to resume fm after call ends.
@@ -2755,7 +2756,7 @@
            Log.d(LOGTAG, "enabling speaker");
                startApplicationLoopBack(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER);
        }
-
+       enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
        Log.d(LOGTAG, "speakerOn completed:" + speakerOn);
    }
   /*
@@ -4155,7 +4156,7 @@
            audioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC,
                   AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
            startFM();
-           mReceiver.EnableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+           enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
            mStoppedOnFocusLoss = false;
        }
    }
@@ -4250,6 +4251,10 @@
             return false;
         }
         if(mIsFMDeviceLoopbackActive) {
+            if ((mReceiver != null) && mReceiver.isCherokeeChip() &&
+                            (mPref.getBoolean("SLIMBUS_SEQ", true))) {
+                enableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
+            }
             configureFMDeviceLoopback(false);
         }
         if(!isRecordSinking()) {