diff --git a/configs/anorak/anorak.mk b/configs/anorak/anorak.mk
index 752e492..090ee01 100644
--- a/configs/anorak/anorak.mk
+++ b/configs/anorak/anorak.mk
@@ -436,7 +436,8 @@
 vendor.audio.feature.audiozoom.enable=false \
 vendor.audio.feature.snd_mon.enable=true \
 vendor.audio.feature.dmabuf.cma.memory.enable=true \
-vendor.audio.hdr.record.enable=false
+vendor.audio.hdr.record.enable=false \
+vendor.audio.feature.handset.profile.disable=true
 
 
 PRODUCT_PACKAGES_ENG += \
diff --git a/configs/kalama/kalama.mk b/configs/kalama/kalama.mk
index 55ac0d8..7196d11 100644
--- a/configs/kalama/kalama.mk
+++ b/configs/kalama/kalama.mk
@@ -464,7 +464,8 @@
 vendor.audio.feature.audiozoom.enable=false \
 vendor.audio.feature.snd_mon.enable=true \
 vendor.audio.feature.dmabuf.cma.memory.enable=false \
-vendor.audio.hdr.record.enable=false
+vendor.audio.hdr.record.enable=false \
+vendor.audio.feature.handset.profile.disable=false
 
 # set dynamic sensor operation timeout in ms
 PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/hal/AudioStream.cpp b/hal/AudioStream.cpp
index 20b1126..bb0af27 100644
--- a/hal/AudioStream.cpp
+++ b/hal/AudioStream.cpp
@@ -2348,6 +2348,7 @@
 
 int StreamOutPrimary::RouteStream(const std::set<audio_devices_t>& new_devices, bool force_device_switch __unused) {
     int ret = 0, noPalDevices = 0;
+    bool skipDeviceSet = false;
     pal_device_id_t * deviceId = nullptr;
     struct pal_device* deviceIdConfigs = nullptr;
     pal_param_device_capability_t *device_cap_query = nullptr;
@@ -2427,6 +2428,14 @@
         mAndroidOutDevices = new_devices;
 
         for (int i = 0; i < noPalDevices; i++) {
+            /*Skip device set for Handset profile for targets that do not support Handset profile for VoIP call*/
+            if (noHandsetSupport && (mPalOutDevice[i].id == PAL_DEVICE_OUT_SPEAKER &&
+                streamAttributes_.type == PAL_STREAM_VOIP_RX) &&
+                (mPalOutDeviceIds[i] == PAL_DEVICE_OUT_SPEAKER ||
+                mPalOutDeviceIds[i] == PAL_DEVICE_OUT_HANDSET)) {
+                skipDeviceSet = true;
+                AHAL_DBG("Skip pal_stream_set_device as the stream is already on speaker");
+            }
             mPalOutDevice[i].id = mPalOutDeviceIds[i];
             mPalOutDevice[i].config.sample_rate = mPalOutDevice[0].config.sample_rate;
             mPalOutDevice[i].config.bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
@@ -2481,6 +2490,13 @@
                        "hifi-filter_custom_key",
                        sizeof(mPalOutDevice[i].custom_config.custom_key));
             }
+
+            /*For targets that do not support Handset profile for VoIP call, set the speaker profile for VoIP call*/
+            if (noHandsetSupport && mPalOutDevice[i].id == PAL_DEVICE_OUT_HANDSET &&
+                streamAttributes_.type == PAL_STREAM_VOIP_RX && !skipDeviceSet) {
+                mPalOutDevice[i].id = PAL_DEVICE_OUT_SPEAKER;
+                AHAL_DBG("set PAL_DEVICE_OUT_SPEAKER instead of Handset_speaker for VoIP_RX ");
+            }
         }
 
         std::shared_ptr<AudioDevice> adevice = AudioDevice::GetInstance();
@@ -2509,7 +2525,8 @@
             }
         }
 
-        if (pal_stream_handle_) {
+        /*Skip device set for Handset profile for targets that do not support Handset profile for VoIP call*/
+        if (pal_stream_handle_ && !skipDeviceSet)  {
             ret = pal_stream_set_device(pal_stream_handle_, noPalDevices, mPalOutDevice);
             if (!ret) {
                 for (const auto &dev : mAndroidOutDevices)
@@ -3064,6 +3081,12 @@
         }
     }
 
+    /*For targets that do not support Handset profile for VoIP call, set the speaker profile for VoIP call*/
+    if(noHandsetSupport && mPalOutDevice->id == PAL_DEVICE_OUT_HANDSET && streamAttributes_.type == PAL_STREAM_VOIP_RX) {
+        mPalOutDevice->id = PAL_DEVICE_OUT_SPEAKER;
+        AHAL_DBG("set PAL_DEVICE_OUT_SPEAKER instead of Handset_speaker for VoIP_RX");
+    }
+
     ret = pal_stream_open(&streamAttributes_,
                           mAndroidOutDevices.size(),
                           mPalOutDevice,
@@ -3812,6 +3835,7 @@
           address(%s)", handle, config->format, config->sample_rate, config->channel_mask,
           mAndroidOutDevices.size(), flags, address);
 
+    noHandsetSupport = property_get_bool("vendor.audio.feature.handset.profile.disable", false);
     //TODO: check if USB device is connected or not
     if (AudioExtn::audio_devices_cmp(mAndroidOutDevices, audio_is_usb_out_device)){
         // get capability from device of USB
@@ -4361,6 +4385,7 @@
 int StreamInPrimary::RouteStream(const std::set<audio_devices_t>& new_devices, bool force_device_switch) {
     bool is_empty, is_input;
     int ret = 0, noPalDevices = 0;
+    bool skipDeviceSet = false;
     pal_device_id_t * deviceId = nullptr;
     struct pal_device* deviceIdConfigs = nullptr;
     pal_param_device_capability_t *device_cap_query = nullptr;
@@ -4441,6 +4466,14 @@
         }
 
         for (int i = 0; i < noPalDevices; i++) {
+            /*Skip device set for targets that do not support Handset profile for VoIP call*/
+            if (noHandsetSupport && (mPalInDevice[i].id == PAL_DEVICE_IN_SPEAKER_MIC &&
+                streamAttributes_.type == PAL_STREAM_VOIP_TX) &&
+                (mPalInDeviceIds[i] == PAL_DEVICE_IN_SPEAKER_MIC ||
+                mPalInDeviceIds[i] == PAL_DEVICE_IN_HANDSET_MIC)) {
+                skipDeviceSet = true;
+                AHAL_DBG("Skip pal_stream_set_device as the stream is already on speaker");
+            }
             mPalInDevice[i].id = mPalInDeviceIds[i];
             if (((mPalInDeviceIds[i] == PAL_DEVICE_IN_USB_DEVICE) ||
                (mPalInDeviceIds[i] == PAL_DEVICE_IN_USB_HEADSET)) && device_cap_query) {
@@ -4484,6 +4517,13 @@
                 ((get_hdr_mode() == AUDIO_RECORD_SPF_HDR) &&
                 (source_ == AUDIO_SOURCE_CAMCORDER || source_ == AUDIO_SOURCE_MIC)))
                 setup_hdr_usecase(&mPalInDevice[i]);
+
+            /*For targets that do not support Handset profile for VoIP call, set speaker profile for VoIP call*/
+            if (noHandsetSupport && mPalInDevice[i].id == PAL_DEVICE_IN_HANDSET_MIC &&
+                streamAttributes_.type == PAL_STREAM_VOIP_TX && !skipDeviceSet) {
+                mPalInDevice[i].id = PAL_DEVICE_IN_SPEAKER_MIC;
+                AHAL_DBG("set PAL_DEVICE_IN_SPEAKER_MIC instead of Handset_mic for VoIP_TX");
+            }
         }
 
         mAndroidInDevices = new_devices;
@@ -4504,7 +4544,7 @@
             }
         }
 
-        if (pal_stream_handle_)
+        if (pal_stream_handle_ && !skipDeviceSet)
             ret = pal_stream_set_device(pal_stream_handle_, noPalDevices, mPalInDevice);
     }
 
@@ -4755,6 +4795,11 @@
         }
     }
 
+    /* For targets that do no support Handset profile for VoIP call so set the speaker profile for VoIP call*/
+    if (noHandsetSupport && mPalInDevice->id == PAL_DEVICE_IN_HANDSET_MIC &&  streamAttributes_.type == PAL_STREAM_VOIP_TX) {
+        mPalInDevice->id = PAL_DEVICE_IN_SPEAKER_MIC;
+        AHAL_DBG("set PAL_DEVICE_IN_SPEAKER_MIC instead of Handset_mic for VoIP_TX");
+    }
     ret = pal_stream_open(&streamAttributes_,
                          mAndroidInDevices.size(),
                          mPalInDevice,
@@ -5180,6 +5225,7 @@
         AHAL_ERR("stream_ new allocation failed");
         goto error;
     }
+    noHandsetSupport = property_get_bool("vendor.audio.feature.handset.profile.disable", false);
 
     if (AudioExtn::audio_devices_cmp(mAndroidInDevices, audio_is_usb_in_device)) {
         // get capability from device of USB
diff --git a/hal/AudioStream.h b/hal/AudioStream.h
index 969224d..e65ce28 100644
--- a/hal/AudioStream.h
+++ b/hal/AudioStream.h
@@ -598,6 +598,7 @@
     uint32_t convertBufSize;
     uint32_t fragments_ = 0;
     uint32_t fragment_size_ = 0;
+    bool noHandsetSupport = false;
     pal_snd_dec_t palSndDec;
     struct pal_compr_gapless_mdata gaplessMeta = {0, 0};
     uint32_t msample_rate;
@@ -674,6 +675,7 @@
     uint32_t fragments_ = 0;
     uint32_t fragment_size_ = 0;
     int FillHalFnPtrs();
+    bool noHandsetSupport = false;
     std::shared_ptr<audio_stream_in>    stream_;
     audio_source_t                      source_;
     friend class AudioDevice;
