diff --git a/phosphor-power-supply/power_supply.cpp b/phosphor-power-supply/power_supply.cpp
index 3fd72e8..a6e4fae 100644
--- a/phosphor-power-supply/power_supply.cpp
+++ b/phosphor-power-supply/power_supply.cpp
@@ -38,7 +38,7 @@
                          std::function<bool()>&& callback) :
     bus(bus),
     inventoryPath(invpath), bindPath("/sys/bus/i2c/drivers/" + driver),
-    isPowerOn(std::move(callback))
+    isPowerOn(std::move(callback)), driverName(driver)
 {
     if (inventoryPath.empty())
     {
@@ -427,7 +427,7 @@
 
 void PowerSupply::determineMFRFault()
 {
-    if (bindPath.string().find("ibm-cffps") != std::string::npos)
+    if (bindPath.string().find(IBMCFFPS_DD_NAME) != std::string::npos)
     {
         // IBM MFR_SPECIFIC[4] is PS_Kill fault
         if (statusMFR & 0x10)
@@ -555,7 +555,11 @@
             if (statusWord)
             {
                 statusInput = pmbusIntf->read(STATUS_INPUT, Type::Debug);
-                statusMFR = pmbusIntf->read(STATUS_MFR, Type::Debug);
+                if (bindPath.string().find(IBMCFFPS_DD_NAME) !=
+                    std::string::npos)
+                {
+                    statusMFR = pmbusIntf->read(STATUS_MFR, Type::Debug);
+                }
                 statusCML = pmbusIntf->read(STATUS_CML, Type::Debug);
                 auto status0Vout = pmbusIntf->insertPageNum(STATUS_VOUT, 0);
                 statusVout = pmbusIntf->read(status0Vout, Type::Debug);
@@ -1025,7 +1029,7 @@
 
 void PowerSupply::setupInputHistory()
 {
-    if (bindPath.string().find("ibm-cffps") != std::string::npos)
+    if (bindPath.string().find(IBMCFFPS_DD_NAME) != std::string::npos)
     {
         auto maxPowerOut = getMaxPowerOut();
 
diff --git a/phosphor-power-supply/power_supply.hpp b/phosphor-power-supply/power_supply.hpp
index c28c11e..5db6714 100644
--- a/phosphor-power-supply/power_supply.hpp
+++ b/phosphor-power-supply/power_supply.hpp
@@ -50,6 +50,8 @@
 // than PGOOD_DEGLITCH_LIMIT.
 constexpr auto AC_FAULT_LIMIT = 6;
 
+constexpr auto IBMCFFPS_DD_NAME = "ibm-cffps";
+
 using SensorInterface = sdbusplus::xyz::openbmc_project::Sensor::server::Value;
 using SensorObject = sdbusplus::server::object_t<SensorInterface>;
 
@@ -1038,6 +1040,11 @@
      * again (though that could be done as a future improvement).
      */
     std::unique_ptr<SensorObject> inputVoltageRatingIface;
+
+    /**
+     * @brief The device driver name
+     */
+    std::string driverName;
 };
 
 } // namespace phosphor::power::psu
diff --git a/phosphor-power-supply/psu_manager.cpp b/phosphor-power-supply/psu_manager.cpp
index 62501e9..597a164 100644
--- a/phosphor-power-supply/psu_manager.cpp
+++ b/phosphor-power-supply/psu_manager.cpp
@@ -34,6 +34,9 @@
 constexpr auto supportedConfIntf =
     "xyz.openbmc_project.Configuration.SupportedConfiguration";
 
+const auto deviceDirPath = "/sys/bus/i2c/devices/";
+const auto driverDirName = "/driver";
+
 constexpr auto INPUT_HISTORY_SYNC_DELAY = 5;
 
 PSUManager::PSUManager(sdbusplus::bus_t& bus, const sdeventplus::Event& e) :
@@ -245,14 +248,13 @@
             return;
         }
 
-        constexpr auto driver = "ibm-cffps";
+        buildDriverName(*i2cbus, *i2caddr);
         log<level::DEBUG>(
-            fmt::format(
-                "make PowerSupply bus: {} addr: {} driver: {} presline: {}",
-                *i2cbus, *i2caddr, driver, presline)
+            fmt::format("make PowerSupply bus: {} addr: {} presline: {}",
+                        *i2cbus, *i2caddr, presline)
                 .c_str());
         auto psu = std::make_unique<PowerSupply>(
-            bus, invpath, *i2cbus, *i2caddr, driver, presline,
+            bus, invpath, *i2cbus, *i2caddr, driverName, presline,
             std::bind(
                 std::mem_fn(&phosphor::power::manager::PSUManager::isPowerOn),
                 this));
@@ -1264,4 +1266,23 @@
     }
 }
 
+void PSUManager::buildDriverName(uint64_t i2cbus, uint64_t i2caddr)
+{
+    namespace fs = std::filesystem;
+    std::stringstream ss;
+    ss << std::hex << std::setw(4) << std::setfill('0') << i2caddr;
+    std::string symLinkPath =
+        deviceDirPath + std::to_string(i2cbus) + "-" + ss.str() + driverDirName;
+    try
+    {
+        fs::path linkStrPath = fs::read_symlink(symLinkPath);
+        driverName = linkStrPath.filename();
+    }
+    catch (const std::exception& e)
+    {
+        log<level::ERR>(fmt::format("Failed to find device driver {}, error {}",
+                                    symLinkPath, e.what())
+                            .c_str());
+    }
+}
 } // namespace phosphor::power::manager
diff --git a/phosphor-power-supply/psu_manager.hpp b/phosphor-power-supply/psu_manager.hpp
index 8acb416..7bee9f7 100644
--- a/phosphor-power-supply/psu_manager.hpp
+++ b/phosphor-power-supply/psu_manager.hpp
@@ -408,6 +408,19 @@
             psu->setInputVoltageRating();
         }
     }
+
+    /**
+     * @brief Build the device driver name for the power supply.
+     *
+     * @param[in] i2cbus - i2c bus
+     * @param[in] i2caddr - i2c bus address
+     */
+    void buildDriverName(uint64_t i2cbus, uint64_t i2caddr);
+
+    /**
+     * @brief The device driver name for all power supplies.
+     */
+    std::string driverName;
 };
 
 } // namespace phosphor::power::manager
