diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 48d7f14..41b6aeb 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -122,16 +122,17 @@
     }
 }
 
-status_t AudioPolicyManager::broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device,
+void AudioPolicyManager::broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device,
                                                         media::DeviceConnectedState state)
 {
     audio_port_v7 devicePort;
     device->toAudioPort(&devicePort);
-    status_t status = mpClientInterface->setDeviceConnectedState(&devicePort, state);
-    ALOGE_IF(status != OK, "Error %d while setting connected state %d for device %s", status,
-             static_cast<int>(state), device->getDeviceTypeAddr().toString(false).c_str());
-
-    return status;
+    if (status_t status = mpClientInterface->setDeviceConnectedState(&devicePort, state);
+            status != OK) {
+        ALOGE("Error %d while setting connected state %d for device %s",
+                status, static_cast<int>(state),
+                device->getDeviceTypeAddr().toString(false).c_str());
+    }
 }
 
 status_t AudioPolicyManager::setDeviceConnectionStateInt(
@@ -212,14 +213,7 @@
 
             // Before checking outputs, broadcast connect event to allow HAL to retrieve dynamic
             // parameters on newly connected devices (instead of opening the outputs...)
-            if (broadcastDeviceConnectionState(
-                        device, media::DeviceConnectedState::CONNECTED) != NO_ERROR) {
-                mAvailableOutputDevices.remove(device);
-                mHwModules.cleanUpForDevice(device);
-                ALOGE("%s() device %s format %x connection failed", __func__,
-                      device->toString().c_str(), device->getEncodedFormat());
-                return INVALID_OPERATION;
-            }
+            broadcastDeviceConnectionState(device, media::DeviceConnectedState::CONNECTED);
 
             if (checkOutputsForDevice(device, state, outputs) != NO_ERROR) {
                 mAvailableOutputDevices.remove(device);
@@ -404,14 +398,7 @@
 
             // Before checking intputs, broadcast connect event to allow HAL to retrieve dynamic
             // parameters on newly connected devices (instead of opening the inputs...)
-            if (broadcastDeviceConnectionState(
-                        device, media::DeviceConnectedState::CONNECTED) != NO_ERROR) {
-                mAvailableInputDevices.remove(device);
-                mHwModules.cleanUpForDevice(device);
-                ALOGE("%s() device %s format %x connection failed", __func__,
-                      device->toString().c_str(), device->getEncodedFormat());
-                return INVALID_OPERATION;
-            }
+            broadcastDeviceConnectionState(device, media::DeviceConnectedState::CONNECTED);
             // Propagate device availability to Engine
             setEngineDeviceConnectionState(device, state);
 
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h
index 9d2166a..953fd2a 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.h
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h
@@ -1105,8 +1105,8 @@
         // It can give a chance to HAL implementer to retrieve dynamic capabilities associated
         // to this device for example.
         // TODO avoid opening stream to retrieve capabilities of a profile.
-        status_t broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device,
-                                                media::DeviceConnectedState state);
+        void broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device,
+                                            media::DeviceConnectedState state);
 
         // updates device caching and output for streams that can influence the
         //    routing of notifications
diff --git a/services/audiopolicy/tests/audiopolicymanager_tests.cpp b/services/audiopolicy/tests/audiopolicymanager_tests.cpp
index 456b67f..f958ede 100644
--- a/services/audiopolicy/tests/audiopolicymanager_tests.cpp
+++ b/services/audiopolicy/tests/audiopolicymanager_tests.cpp
@@ -2530,29 +2530,8 @@
 
     void setSimulateFailure(bool simulateFailure) { mSimulateFailure = simulateFailure; }
 
-    void setSimulateBroadcastDeviceStatus(audio_devices_t device, status_t status) {
-        if (status != NO_ERROR) {
-            // simulate device connect status
-            mSimulateBroadcastDeviceStatus[device] = status;
-        } else {
-            // remove device connection fixed status
-            mSimulateBroadcastDeviceStatus.erase(device);
-        }
-    }
-
-    status_t setDeviceConnectedState(const struct audio_port_v7* port,
-                                     media::DeviceConnectedState state) override {
-        if (mSimulateBroadcastDeviceStatus.find(port->ext.device.type) !=
-            mSimulateBroadcastDeviceStatus.end()) {
-            // If a simulated status exists, return a status value
-            return mSimulateBroadcastDeviceStatus[port->ext.device.type];
-        }
-        return AudioPolicyManagerTestClient::setDeviceConnectedState(port, state);
-    }
-
   private:
     bool mSimulateFailure = false;
-    std::map<audio_devices_t, status_t> mSimulateBroadcastDeviceStatus;
 };
 
 }  // namespace
@@ -2573,9 +2552,6 @@
     void setSimulateOpenFailure(bool simulateFailure) {
         mFullClient->setSimulateFailure(simulateFailure); }
 
-    void setSimulateBroadcastDeviceStatus(audio_devices_t device, status_t status) {
-        mFullClient->setSimulateBroadcastDeviceStatus(device, status); }
-
     static const std::string sBluetoothConfig;
 
   private:
@@ -2619,30 +2595,6 @@
     }
 }
 
-TEST_P(AudioPolicyManagerTestDeviceConnectionFailed, BroadcastDeviceFailure) {
-    const audio_devices_t type = std::get<0>(GetParam());
-    const std::string name = std::get<1>(GetParam());
-    const std::string address = std::get<2>(GetParam());
-    const audio_format_t format = std::get<3>(GetParam());
-
-    // simulate broadcastDeviceConnectionState return failure
-    setSimulateBroadcastDeviceStatus(type, INVALID_OPERATION);
-    ASSERT_EQ(INVALID_OPERATION, mManager->setDeviceConnectionState(
-            type, AUDIO_POLICY_DEVICE_STATE_AVAILABLE,
-            address.c_str(), name.c_str(), format));
-
-    // if broadcast is fail, device should not be added to available devices list
-    if (audio_is_output_device(type)) {
-        auto availableDevices = mManager->getAvailableOutputDevices();
-        EXPECT_FALSE(availableDevices.containsDeviceWithType(type));
-    } else if (audio_is_input_device(type)) {
-        auto availableDevices = mManager->getAvailableInputDevices();
-        EXPECT_FALSE(availableDevices.containsDeviceWithType(type));
-    }
-
-    setSimulateBroadcastDeviceStatus(type, NO_ERROR);
-}
-
 INSTANTIATE_TEST_CASE_P(
         DeviceConnectionFailure,
         AudioPolicyManagerTestDeviceConnectionFailed,
