diff --git a/audio/sthal/Android.bp b/audio/sthal/Android.bp
deleted file mode 100644
index c15c47f..0000000
--- a/audio/sthal/Android.bp
+++ /dev/null
@@ -1,13 +0,0 @@
-//
-// Copyright (C) 2024 The LineageOS Project
-//
-// SPDX-License-Identifier: Apache-2.0
-//
-
-cc_library_shared {
-    name: "sound_trigger.primary.dummy",
-    relative_install_path: "hw",
-    vendor: true,
-    srcs: ["sound_trigger_dummy.c"],
-    header_libs: ["libhardware_headers"],
-}
diff --git a/audio/sthal/sound_trigger_dummy.c b/audio/sthal/sound_trigger_dummy.c
deleted file mode 100644
index 1deb0c4..0000000
--- a/audio/sthal/sound_trigger_dummy.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2024 The LineageOS Project
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#include <errno.h>
-#include <stdlib.h>
-
-#include <hardware/sound_trigger.h>
-
-static const struct sound_trigger_properties hw_properties = {
-    "The LineageOS Project", // implementor
-    "Dummy SoundTrigger HAL", // description
-    1, // version
-    { 0x1817de20, 0xfa3b, 0x11e5, 0xbef2, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }, // uuid
-    2, // max_sound_models
-    1, // max_key_phrases
-    1, // max_users
-    RECOGNITION_MODE_VOICE_TRIGGER, // recognition_modes
-    true, // capture_transition
-    0, // max_buffer_ms
-    false, // concurrent_capture
-    false, // trigger_in_event
-    0 // power_consumption_mw
-};
-
-static struct sound_trigger_properties_extended_1_3 hw_properties_1_3 = {
-    {
-        SOUND_TRIGGER_DEVICE_API_VERSION_1_3, // API version
-        320, // rough total size
-    },
-    {
-        "The LineageOS Project", // implementor
-        "Dummy SoundTrigger HAL", // description
-        1, // version
-        { 0x1817de20, 0xfa3b, 0x11e5, 0xbef2, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }, // uuid
-        2, // max_sound_models
-        1, // max_key_phrases
-        1, // max_users
-        RECOGNITION_MODE_VOICE_TRIGGER, // recognition_modes
-        true, // capture_transition
-        0, // max_buffer_ms
-        false, // concurrent_capture
-        false, // trigger_in_event
-        0, // power_consumption_mw
-    },
-    "374236809, 4ac4bfe8-a4c9-3f5c-8f02-6db7c7123cb6", // supportedModelArch
-    0 // audioCapabilities
-};
-
-static int stdev_get_properties(const struct sound_trigger_hw_device* dev,
-                                struct sound_trigger_properties *properties) {
-    if (properties == NULL)
-        return -EINVAL;
-    memcpy(properties, &hw_properties, sizeof(struct sound_trigger_properties));
-
-    (void)dev;
-    return 0;
-}
-
-static const struct sound_trigger_properties_header* stdev_get_properties_extended(
-        const struct sound_trigger_hw_device *dev) {
-    (void)dev;
-    return (struct sound_trigger_properties_header*)&hw_properties_1_3;
-}
-
-static int stdev_unimplemented() {
-    return -EINVAL;
-}
-
-static int stdev_close(hw_device_t *device) {
-    free(device);
-    return 0;
-}
-
-static int stdev_open(const hw_module_t* module, const char* name,
-                      hw_device_t** device) {
-    struct sound_trigger_hw_device *stdev;
-
-    if (strcmp(name, SOUND_TRIGGER_HARDWARE_INTERFACE) != 0)
-        return -EINVAL;
-
-    stdev = calloc(1, sizeof(struct sound_trigger_hw_device));
-
-    stdev->common.tag = HARDWARE_DEVICE_TAG;
-    stdev->common.version = SOUND_TRIGGER_DEVICE_API_VERSION_1_3;
-    stdev->common.module = (struct hw_module_t*)module;
-    stdev->common.close = stdev_close;
-    stdev->get_properties = stdev_get_properties;
-    stdev->load_sound_model = stdev_unimplemented;
-    stdev->unload_sound_model = stdev_unimplemented;
-    stdev->start_recognition = stdev_unimplemented;
-    stdev->stop_recognition = stdev_unimplemented;
-    stdev->stop_all_recognitions = stdev_unimplemented;
-    stdev->get_model_state = stdev_unimplemented;
-    stdev->set_parameter = stdev_unimplemented;
-    stdev->get_parameter = stdev_unimplemented;
-    stdev->query_parameter = stdev_unimplemented;
-    stdev->get_properties_extended = stdev_get_properties_extended;
-    stdev->start_recognition_extended = stdev_unimplemented;
-
-    *device = &stdev->common;
-
-    return 0;
-};
-
-static struct hw_module_methods_t hal_module_methods = {
-    .open = stdev_open,
-};
-
-struct sound_trigger_module HAL_MODULE_INFO_SYM = {
-    .common = {
-        .tag = HARDWARE_MODULE_TAG,
-        .module_api_version = SOUND_TRIGGER_MODULE_API_VERSION_1_0,
-        .hal_api_version = HARDWARE_HAL_API_VERSION,
-        .id = SOUND_TRIGGER_HARDWARE_MODULE_ID,
-        .name = "Dummy SoundTrigger HAL",
-        .author = "The LineageOS Project",
-        .methods = &hal_module_methods,
-    },
-};
diff --git a/common.mk b/common.mk
index 8d87afe..5e176a9 100644
--- a/common.mk
+++ b/common.mk
@@ -33,15 +33,13 @@
     android.hardware.audio@7.1-impl:32 \
     android.hardware.audio.service \
     android.hardware.bluetooth.audio-impl \
-    android.hardware.soundtrigger@2.3-impl \
     audio.bluetooth.default \
     audio.primary.exynos9611 \
     audio.r_submix.default \
     audio.usb.default \
     libaudioroute \
     libtinyalsa \
-    libtinycompress \
-    sound_trigger.primary.dummy
+    libtinycompress
 
 PRODUCT_PACKAGES += \
     SamsungDAP
diff --git a/manifest.xml b/manifest.xml
index d64d4fc..06f7735 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -95,15 +95,6 @@
         </interface>
     </hal>
     <hal format="hidl">
-        <name>android.hardware.soundtrigger</name>
-        <transport>hwbinder</transport>
-        <version>2.3</version>
-        <interface>
-            <name>ISoundTriggerHw</name>
-            <instance>default</instance>
-        </interface>
-    </hal>
-    <hal format="hidl">
         <name>vendor.samsung.hardware.gnss</name>
         <transport>hwbinder</transport>
         <version>2.0</version>
diff --git a/vendor.prop b/vendor.prop
index 4fb1616..28ad0d5 100644
--- a/vendor.prop
+++ b/vendor.prop
@@ -10,7 +10,6 @@
 aaudio.mmap_exclusive_policy=2
 aaudio.hw_burst_min_usec=2000
 af.fast_track_multiplier=1
-ro.hardware.sound_trigger.primary=dummy
 
 ## Bluetooth
 bluetooth.device.class_of_device=90,1,16
