diff --git a/tpm/tpm_device.hpp b/tpm/tpm_device.hpp
new file mode 100644
index 0000000..a6e220e
--- /dev/null
+++ b/tpm/tpm_device.hpp
@@ -0,0 +1,76 @@
+#pragma once
+
+#include "common/include/device.hpp"
+#include "common/include/software_manager.hpp"
+
+#include <sdbusplus/async.hpp>
+
+#include <unordered_map>
+
+namespace SoftwareInf = phosphor::software;
+namespace ManagerInf = SoftwareInf::manager;
+
+enum class TPMType
+{
+    TPM2,
+};
+
+class TPMInterface
+{
+  public:
+    TPMInterface(sdbusplus::async::context& ctx, uint8_t tpmIndex) :
+        ctx(ctx), tpmIndex(tpmIndex)
+    {}
+    virtual ~TPMInterface() = default;
+    TPMInterface(const TPMInterface&) = delete;
+    TPMInterface& operator=(const TPMInterface&) = delete;
+    TPMInterface(TPMInterface&&) = delete;
+    TPMInterface& operator=(TPMInterface&&) = delete;
+
+    virtual bool isUpdateSupported() const = 0;
+    virtual sdbusplus::async::task<bool> getVersion(std::string& version) = 0;
+    virtual sdbusplus::async::task<bool> updateFirmware(const uint8_t* image,
+                                                        size_t imageSize) = 0;
+
+  protected:
+    sdbusplus::async::context& ctx;
+    uint8_t tpmIndex;
+};
+
+class TPMDevice : public Device
+{
+  public:
+    using Device::softwareCurrent;
+
+    TPMDevice(sdbusplus::async::context& ctx, enum TPMType tpmType,
+              uint8_t tpmIndex, SoftwareConfig& config,
+              ManagerInf::SoftwareManager* parent);
+
+    sdbusplus::async::task<bool> updateDevice(const uint8_t* image,
+                                              size_t image_size) final;
+
+    sdbusplus::async::task<std::string> getVersion();
+
+    bool isUpdateSupported() const
+    {
+        return tpmInterface ? tpmInterface->isUpdateSupported() : false;
+    }
+
+  private:
+    std::unique_ptr<TPMInterface> tpmInterface;
+};
+
+inline bool stringToTPMType(const std::string& type, TPMType& tpmType)
+{
+    static const std::unordered_map<std::string, TPMType> tpmTypeMap = {
+        {"TPM2Firmware", TPMType::TPM2},
+    };
+
+    auto it = tpmTypeMap.find(type);
+    if (it != tpmTypeMap.end())
+    {
+        tpmType = it->second;
+        return true;
+    }
+    return false;
+}
