diff --git a/include/manufacturingcommands.hpp b/include/manufacturingcommands.hpp
index c7d6f25..7bd7280 100644
--- a/include/manufacturingcommands.hpp
+++ b/include/manufacturingcommands.hpp
@@ -264,6 +264,7 @@
     bool revertFanPWM = false;
     bool revertLedCallback = false;
     phosphor::Timer revertTimer;
+    int mtmTestBeepFd = -1;
 };
 
 } // namespace ipmi
diff --git a/src/manufacturingcommands.cpp b/src/manufacturingcommands.cpp
index 31e8938..9d81930 100644
--- a/src/manufacturingcommands.cpp
+++ b/src/manufacturingcommands.cpp
@@ -14,6 +14,8 @@
 // limitations under the License.
 */
 
+#include <linux/input.h>
+
 #include <boost/container/flat_map.hpp>
 #include <filesystem>
 #include <fstream>
@@ -180,6 +182,12 @@
         disablePidControlService(false);
     }
 
+    if (mtmTestBeepFd != -1)
+    {
+        ::close(mtmTestBeepFd);
+        mtmTestBeepFd = -1;
+    }
+
     for (const auto& ledProperty : ledPropertyList)
     {
         const std::string& ledName = ledProperty.getName();
@@ -557,6 +565,68 @@
             }
         }
         break;
+        case SmSignalSet::smSpeaker:
+        {
+            phosphor::logging::log<phosphor::logging::level::INFO>(
+                "Performing Speaker SmActionSet",
+                phosphor::logging::entry("ACTION=%d",
+                                         static_cast<uint8_t>(action)));
+            switch (action)
+            {
+                case SmActionSet::forceAsserted:
+                {
+                    char beepDevName[] = "/dev/input/event0";
+                    if (mtm.mtmTestBeepFd != -1)
+                    {
+                        phosphor::logging::log<phosphor::logging::level::INFO>(
+                            "mtm beep device is opened already!");
+                        // returning success as already beep is in progress
+                        return ipmi::response(retCode);
+                    }
+
+                    if ((mtm.mtmTestBeepFd =
+                             ::open(beepDevName, O_RDWR | O_CLOEXEC)) < 0)
+                    {
+                        phosphor::logging::log<phosphor::logging::level::ERR>(
+                            "Failed to open input device");
+                        return ipmi::responseUnspecifiedError();
+                    }
+
+                    struct input_event event;
+                    event.type = EV_SND;
+                    event.code = SND_TONE;
+                    event.value = 2000;
+
+                    if (::write(mtm.mtmTestBeepFd, &event,
+                                sizeof(struct input_event)) !=
+                        sizeof(struct input_event))
+                    {
+                        phosphor::logging::log<phosphor::logging::level::ERR>(
+                            "Failed to write a tone sound event");
+                        ::close(mtm.mtmTestBeepFd);
+                        mtm.mtmTestBeepFd = -1;
+                        return ipmi::responseUnspecifiedError();
+                    }
+                    mtm.revertTimer.start(revertTimeOut);
+                }
+                break;
+                case SmActionSet::revert:
+                case SmActionSet::forceDeasserted:
+                {
+                    if (mtm.mtmTestBeepFd != -1)
+                    {
+                        ::close(mtm.mtmTestBeepFd);
+                        mtm.mtmTestBeepFd = -1;
+                    }
+                }
+                break;
+                default:
+                {
+                    return ipmi::responseInvalidFieldRequest();
+                }
+            }
+        }
+        break;
         default:
         {
             return ipmi::responseInvalidFieldRequest();
