diff --git a/core/include/chre/core/audio_request_manager.h b/core/include/chre/core/audio_request_manager.h
index 8f5ec49..11caf20 100644
--- a/core/include/chre/core/audio_request_manager.h
+++ b/core/include/chre/core/audio_request_manager.h
@@ -147,6 +147,14 @@
         / kOneSecondInNanoseconds);
   }
 
+  /**
+   * @return the instance of platform audio to allow platform-specific
+   * funtionality to call it. Example: handling host awake events.
+   */
+  PlatformAudio& getPlatformAudio() {
+    return mPlatformAudio;
+  }
+
  private:
   /**
    * One instance of an audio request from a nanoapp.
diff --git a/core/include/chre/core/event_loop_manager.h b/core/include/chre/core/event_loop_manager.h
index c1991ff..50d9dec 100644
--- a/core/include/chre/core/event_loop_manager.h
+++ b/core/include/chre/core/event_loop_manager.h
@@ -59,6 +59,7 @@
   WifiHandleFailedRanging,
   WifiHandleRangingEvent,
   AudioAvailabilityChange,
+  AudioHandleHostAwake,
 };
 
 //! The function signature of a system callback mirrors the CHRE event free
diff --git a/platform/slpi/include/chre/target_platform/platform_audio_base.h b/platform/slpi/include/chre/target_platform/platform_audio_base.h
index 3b84c3c..8bdeae9 100644
--- a/platform/slpi/include/chre/target_platform/platform_audio_base.h
+++ b/platform/slpi/include/chre/target_platform/platform_audio_base.h
@@ -24,10 +24,24 @@
  * functionality from.
  */
 class PlatformAudioBase {
+ public:
+  /**
+   * Invoked whenever the host goes awake. This is used to implement the
+   * deferred audio disable operation. This is called on the CHRE thread.
+   */
+  void onHostAwake();
+
  protected:
   //! The number of open audio clients. This is incremented/decremented by the
   //! setHandleEnabled platform API.
   uint32_t mNumAudioClients = 0;
+
+  //! The current state of the audio feature enabled on the host.
+  bool currentAudioEnabled = false;
+
+  //! The target state of the audio feature enabled on the host. This is used to
+  //! support deferred disabling when the next AP wake occurs.
+  bool targetAudioEnabled = false;
 };
 
 }  // namespace chre
diff --git a/platform/slpi/platform_audio.cc b/platform/slpi/platform_audio.cc
index 8b4d924..ebf9c80 100644
--- a/platform/slpi/platform_audio.cc
+++ b/platform/slpi/platform_audio.cc
@@ -106,11 +106,21 @@
   }
 
   if (lastNumAudioClients == 0 && mNumAudioClients > 0) {
+    // When enabling, request audio immediately.
     LOGD("Enabling WCD SLPI");
-    sendAudioRequest();
+    targetAudioEnabled = true;
+    if (!currentAudioEnabled) {
+      currentAudioEnabled = true;
+      sendAudioRequest();
+    }
   } else if (lastNumAudioClients > 0 && mNumAudioClients == 0) {
-    LOGD("Disabling WCD SLPI");
-    sendAudioRelease();
+    targetAudioEnabled = false;
+    if (EventLoopManagerSingleton::get()->getEventLoop()
+            .getPowerControlManager().hostIsAwake()) {
+      onHostAwake();
+    } else {
+      LOGD("Deferring disable WCD SLPI");
+    }
   }
 }
 
@@ -151,4 +161,12 @@
   return result;
 }
 
+void PlatformAudioBase::onHostAwake() {
+  if (currentAudioEnabled && !targetAudioEnabled) {
+    LOGD("Disabling WCD SPI");
+    currentAudioEnabled = targetAudioEnabled;
+    sendAudioRelease();
+  }
+}
+
 }  // namespace chre
diff --git a/platform/slpi/see/power_control_manager.cc b/platform/slpi/see/power_control_manager.cc
index b0fd3b8..e98c495 100644
--- a/platform/slpi/see/power_control_manager.cc
+++ b/platform/slpi/see/power_control_manager.cc
@@ -34,6 +34,20 @@
     EventLoopManagerSingleton::get()->getEventLoop().postEvent(
         mHostIsAwake ? CHRE_EVENT_HOST_AWAKE : CHRE_EVENT_HOST_ASLEEP,
         nullptr /* eventData */, nullptr /* freeCallback */);
+
+#ifdef CHRE_AUDIO_SUPPORT_ENABLED
+    if (awake) {
+      auto callback = [](uint16_t /* eventType */, void * /* eventData*/) {
+        auto platformAudioBase = static_cast<PlatformAudioBase&>(
+            EventLoopManagerSingleton::get()->getAudioRequestManager()
+                .getPlatformAudio());
+        platformAudioBase.onHostAwake();
+      };
+
+      EventLoopManagerSingleton::get()->deferCallback(
+          SystemCallbackType::AudioHandleHostAwake, nullptr, callback);
+    }
+#endif  // CHRE_AUDIO_SUPPORT_ENABLED
   }
 }
 
