diff --git a/common/i2c/i2c.cpp b/common/i2c/i2c.cpp
new file mode 100644
index 0000000..99de04b
--- /dev/null
+++ b/common/i2c/i2c.cpp
@@ -0,0 +1,82 @@
+#include "i2c.hpp"
+
+#include <unistd.h>
+
+extern "C"
+{
+#include <i2c/smbus.h>
+#include <linux/i2c-dev.h>
+#include <linux/i2c.h>
+}
+
+namespace phosphor::i2c
+{
+
+int I2C::open()
+{
+    int ret = 0;
+    fd = ::open(busStr.c_str(), O_RDWR);
+    if (fd < 0)
+    {
+        return fd;
+    }
+
+    ret = ioctl(fd, I2C_SLAVE_FORCE, deviceNode);
+    if (ret < 0)
+    {
+        close();
+        return ret;
+    }
+
+    return 0;
+}
+
+// NOLINTBEGIN(readability-static-accessed-through-instance)
+sdbusplus::async::task<bool> I2C::sendReceive(
+    uint8_t* writeData, uint8_t writeSize, uint8_t* readData,
+    uint8_t readSize) const
+// NOLINTEND(readability-static-accessed-through-instance)
+{
+    if (fd <= 0)
+    {
+        co_return false;
+    }
+
+    struct i2c_msg msg[2];
+    struct i2c_rdwr_ioctl_data readWriteData;
+    int msgIndex = 0;
+
+    if (writeSize)
+    {
+        msg[msgIndex].addr = deviceNode;
+        msg[msgIndex].flags = 0;
+        msg[msgIndex].len = writeSize;
+        msg[msgIndex].buf = writeData;
+        msgIndex++;
+    }
+
+    if (readSize)
+    {
+        msg[msgIndex].addr = deviceNode;
+        msg[msgIndex].flags = I2C_M_RD;
+        msg[msgIndex].len = readSize;
+        msg[msgIndex].buf = readData;
+        msgIndex++;
+    }
+
+    readWriteData.msgs = msg;
+    readWriteData.nmsgs = msgIndex;
+
+    if (ioctl(fd, I2C_RDWR, &readWriteData) < 0)
+    {
+        co_return false;
+    }
+    co_return true;
+}
+
+int I2C::close() const
+{
+    return ::close(fd);
+}
+
+} // namespace phosphor::i2c
diff --git a/common/i2c/meson.build b/common/i2c/meson.build
new file mode 100644
index 0000000..fd8a702
--- /dev/null
+++ b/common/i2c/meson.build
@@ -0,0 +1,8 @@
+libi2c_dev = static_library('i2c_dev', 'i2c.cpp', link_args: '-li2c')
+libi2c_inc = include_directories('.')
+libi2c_dep = declare_dependency(
+    common_include,
+    link_with: libi2c_dev,
+    include_directories: libi2c_inc,
+    link_args: '-li2c',
+)
diff --git a/common/include/i2c/i2c.hpp b/common/include/i2c/i2c.hpp
new file mode 100644
index 0000000..e86d574
--- /dev/null
+++ b/common/include/i2c/i2c.hpp
@@ -0,0 +1,61 @@
+#pragma once
+
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+
+#include <sdbusplus/async.hpp>
+
+#include <cstdint>
+#include <cstring>
+#include <string>
+
+extern "C"
+{
+#include <i2c/smbus.h>
+#include <linux/i2c-dev.h>
+#include <linux/i2c.h>
+}
+
+namespace phosphor::i2c
+{
+
+class I2C
+{
+  public:
+    explicit I2C(uint16_t bus, uint16_t node) :
+        busStr("/dev/i2c-" + std::to_string(bus)), deviceNode(node)
+    {
+        open();
+    }
+
+    I2C(I2C& i2c) = delete;
+    I2C& operator=(I2C other) = delete;
+    I2C(I2C&& other) = delete;
+    I2C& operator=(I2C&& other) = delete;
+
+    ~I2C()
+    {
+        this->close();
+    }
+
+    sdbusplus::async::task<bool> sendReceive(
+        uint8_t* writeData, uint8_t writeSize, uint8_t* readData,
+        uint8_t readSize) const;
+
+    bool isOpen() const
+    {
+        return (fd != invalidFd);
+    }
+
+    int close() const;
+
+  private:
+    static constexpr int invalidFd = -1;
+    int fd = invalidFd;
+    std::string busStr;
+    uint16_t deviceNode;
+    int open();
+}; // end class I2C
+
+} // namespace phosphor::i2c
diff --git a/common/meson.build b/common/meson.build
index 1e29ae8..6887c38 100644
--- a/common/meson.build
+++ b/common/meson.build
@@ -9,6 +9,7 @@
     'src/software.cpp',
     'src/software_update.cpp',
     'src/host_power.cpp',
-    include_directories: ['.', 'include/', common_include],
+    'i2c/i2c.cpp',
+    include_directories: ['.', 'include/', 'include/i2c/', common_include],
     dependencies: [pdi_dep, phosphor_logging_dep, sdbusplus_dep, libpldm_dep],
 )
