diff --git a/.gitignore b/.gitignore
index 6da54be..7d18ee6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 build*/
 subprojects/*
 !subprojects/*.wrap
+.*
diff --git a/const.hpp b/const.hpp
index db273e8..6cafd6f 100644
--- a/const.hpp
+++ b/const.hpp
@@ -110,10 +110,13 @@
 constexpr auto errIntfForGpioError = "com.ibm.VPD.Error.GPIOError";
 constexpr auto motherBoardInterface =
     "xyz.openbmc_project.Inventory.Item.Board.Motherboard";
-constexpr auto systemVpdFilePath = "/sys/bus/i2c/drivers/at24/8-0050/eeprom";
-constexpr auto i2cPathPrefix = "/sys/bus/i2c/drivers/at24/";
-constexpr auto spiPathPrefix = "/sys/bus/spi/drivers/at25/";
 constexpr auto invItemIntf = "xyz.openbmc_project.Inventory.Item";
+constexpr auto systemVpdFilePath = "/sys/bus/i2c/drivers/at24/8-0050/eeprom";
+constexpr auto i2cPathPrefix = "/sys/bus/i2c/drivers/";
+constexpr auto spiPathPrefix = "/sys/bus/spi/drivers/";
+constexpr auto at24driver = "at24";
+constexpr auto at25driver = "at25";
+constexpr auto ee1004driver = "ee1004";
 
 namespace lengths
 {
@@ -166,7 +169,7 @@
     DDR5_DDIMM_MEMORY_VPD,  /**< DDR5 DDIMM Memory VPD type */
     DDR4_ISDIMM_MEMORY_VPD, /**< DDR4 ISDIMM Memory VPD type */
     DDR5_ISDIMM_MEMORY_VPD, /**< DDR5 ISDIMM Memory VPD type */
-    INVALID_VPD_FORMAT      /**< Invalid VPD type */
+    INVALID_VPD_FORMAT      /**< Invalid VPD type Format */
 };
 
 enum PelSeverity
diff --git a/ibm_vpd_app.cpp b/ibm_vpd_app.cpp
index 94b7f55..b54af12 100644
--- a/ibm_vpd_app.cpp
+++ b/ibm_vpd_app.cpp
@@ -203,8 +203,8 @@
     }
     catch (const exception& e)
     {
-        cerr << "Failed to expand location code with exception: " << e.what()
-             << "\n";
+        std::cerr << "Failed to expand location code with exception: "
+                  << e.what() << "\n";
     }
     return expanded;
 }
@@ -262,12 +262,12 @@
                 }
                 else
                 {
-                    cerr << "Unknown Keyword[" << kw << "] found ";
+                    std::cerr << "Unknown Keyword[" << kw << "] found ";
                 }
             }
             else
             {
-                cerr << "Unknown Variant found ";
+                std::cerr << "Unknown Variant found ";
             }
         }
         else
@@ -508,17 +508,18 @@
             {
                 // Now bind the device
                 string bind = json["frus"][file].at(0).value("devAddress", "");
-                cout << "Binding device " << bind << std::endl;
+                std::cout << "Binding device " << bind << std::endl;
                 string bindCmd = string("echo \"") + bind +
                                  string("\" > /sys/bus/i2c/drivers/at24/bind");
-                cout << bindCmd << std::endl;
+                std::cout << bindCmd << std::endl;
                 executeCmd(bindCmd);
 
                 // Check if device showed up (test for file)
                 if (!fs::exists(file))
                 {
-                    cerr << "EEPROM " << file
-                         << " does not exist. Take failure action" << std::endl;
+                    std::cerr << "EEPROM " << file
+                              << " does not exist. Take failure action"
+                              << std::endl;
                     // If not, then take failure postAction
                     executePostFailAction(json, file);
                 }
@@ -526,11 +527,11 @@
             else
             {
                 // missing required informations
-                cerr << "VPD inventory JSON missing basic informations of "
-                        "preAction "
-                        "for this FRU : ["
-                     << file << "]. Executing executePostFailAction."
-                     << std::endl;
+                std::cerr << "VPD inventory JSON missing basic informations of "
+                             "preAction "
+                             "for this FRU : ["
+                          << file << "]. Executing executePostFailAction."
+                          << std::endl;
 
                 // Take failure postAction
                 executePostFailAction(json, file);
@@ -1354,6 +1355,7 @@
     json js{};
     Binary vpdVector{};
     string file{};
+    string driver{};
     // map to hold additional data in case of logging pel
     PelAdditionalData additionalData{};
 
@@ -1366,12 +1368,16 @@
 
     try
     {
-        App app{"ibm-read-vpd - App to read IPZ format VPD, parse it and store "
-                "in DBUS"};
+        App app{"ibm-read-vpd - App to read IPZ/Jedec format VPD, parse it and "
+                "store it in DBUS"};
 
         app.add_option("-f, --file", file, "File containing VPD (IPZ/KEYWORD)")
             ->required();
 
+        app.add_option("--driver", driver,
+                       "Driver used by kernel (at24,at25,ee1004)")
+            ->required();
+
         CLI11_PARSE(app, argc, argv);
 
         // PEL severity should be ERROR in case of any system VPD failure
@@ -1380,6 +1386,23 @@
             pelSeverity = PelSeverity::ERROR;
         }
 
+        // Check if input file is not empty.
+        if ((file.empty()) || (driver.empty()))
+        {
+            std::cerr << "Encountered empty input parameter file [" << file
+                      << "] driver [" << driver << "]" << std::endl;
+            return 0;
+        }
+
+        // Check if currently supported driver or not
+        if ((driver != at24driver) && (driver != at25driver) &&
+            (driver != ee1004driver))
+        {
+            std::cerr << "The driver [" << driver << "] is not supported."
+                      << std::endl;
+            return 0;
+        }
+
         auto jsonToParse = INVENTORY_JSON_DEFAULT;
 
         // If the symlink exists, it means it has been setup for us, switch the
@@ -1416,31 +1439,34 @@
         if (file.find("/ahb:apb") != string::npos)
         {
             // Translate udev path to a generic /sys/bus/.. file path.
-            udevToGenericPath(file);
+            udevToGenericPath(file, driver);
 
             if ((js["frus"].find(file) != js["frus"].end()) &&
                 (file == systemVpdFilePath))
             {
-                // We have already collected system VPD, skip.
+                std::cout << "We have already collected system VPD, skiping."
+                          << std::endl;
                 return 0;
             }
         }
 
         if (file.empty())
         {
-            cerr << "The EEPROM path <" << file << "> is not valid.";
+            std::cerr << "The EEPROM path <" << file << "> is not valid.";
             return 0;
         }
         if (js["frus"].find(file) == js["frus"].end())
         {
+            std::cerr << "The EEPROM path [" << file
+                      << "] is not found in the json." << std::endl;
             return 0;
         }
 
         if (!fs::exists(file))
         {
-            cout << "Device path: " << file
-                 << " does not exist. Spurious udev event? Exiting."
-                 << std::endl;
+            std::cout << "Device path: " << file
+                      << " does not exist. Spurious udev event? Exiting."
+                      << std::endl;
             return 0;
         }
 
@@ -1464,7 +1490,8 @@
             if ("xyz.openbmc_project.State.Chassis.PowerState.On" ==
                 getPowerState())
             {
-                cout << "This VPD cannot be read when power is ON" << std::endl;
+                std::cout << "This VPD cannot be read when power is ON"
+                          << std::endl;
                 return 0;
             }
         }
@@ -1472,7 +1499,7 @@
         // Check if this VPD should be recollected at all
         if (!needsRecollection(js, file))
         {
-            cout << "Skip VPD recollection for: " << file << std::endl;
+            std::cout << "Skip VPD recollection for: " << file << std::endl;
             return 0;
         }
 
@@ -1517,7 +1544,7 @@
         additionalData.emplace("DESCRIPTION", ex.what());
         createPEL(additionalData, pelSeverity, errIntfForJsonFailure, nullptr);
 
-        cerr << ex.what() << "\n";
+        std::cerr << ex.what() << "\n";
         rc = -1;
     }
     catch (const VpdEccException& ex)
@@ -1527,21 +1554,21 @@
                                INVENTORY_PATH + baseFruInventoryPath);
         createPEL(additionalData, pelSeverity, errIntfForEccCheckFail, nullptr);
         dumpBadVpd(file, vpdVector);
-        cerr << ex.what() << "\n";
+        std::cerr << ex.what() << "\n";
         rc = -1;
     }
     catch (const VpdDataException& ex)
     {
         if (isThisPcieOnPass1planar(js, file))
         {
-            cout << "Pcie_device  [" << file
-                 << "]'s VPD is not valid on PASS1 planar.Ignoring.\n";
+            std::cout << "Pcie_device  [" << file
+                      << "]'s VPD is not valid on PASS1 planar.Ignoring.\n";
             rc = 0;
         }
         else if (!(isPresent(js, file).value_or(true)))
         {
-            cout << "FRU at: " << file
-                 << " is not detected present. Ignore parser error.\n";
+            std::cout << "FRU at: " << file
+                      << " is not detected present. Ignore parser error.\n";
             rc = 0;
         }
         else
@@ -1563,7 +1590,7 @@
     catch (const exception& e)
     {
         dumpBadVpd(file, vpdVector);
-        cerr << e.what() << "\n";
+        std::cerr << e.what() << "\n";
         rc = -1;
     }
 
diff --git a/ibm_vpd_utils.cpp b/ibm_vpd_utils.cpp
index 388d869..8d93606 100644
--- a/ibm_vpd_utils.cpp
+++ b/ibm_vpd_utils.cpp
@@ -533,7 +533,7 @@
     return jsonPath;
 }
 
-void udevToGenericPath(std::string& file)
+void udevToGenericPath(std::string& file, const std::string& driver)
 {
     // Sample udevEvent i2c path :
     // "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a480.i2c-bus/i2c-8/8-0051/8-00510/nvmem"
@@ -560,7 +560,7 @@
             exit(EXIT_SUCCESS);
         }
         // Forming the generic file path
-        file = i2cPathPrefix + i2cBusAddr + "/eeprom";
+        file = i2cPathPrefix + driver + "/" + i2cBusAddr + "/eeprom";
     }
     // Sample udevEvent spi path :
     // "/sys/devices/platform/ahb/ahb:apb/1e79b000.fsi/fsi-master/fsi0/slave@00:00/00:00:00:04/spi_master/spi2/spi2.0/spi2.00/nvmem"
@@ -588,7 +588,7 @@
             exit(EXIT_SUCCESS);
         }
         // Forming the generic path
-        file = spiPathPrefix + spiBus + ".0/eeprom";
+        file = spiPathPrefix + driver + "/" + spiBus + ".0/eeprom";
     }
     else
     {
diff --git a/ibm_vpd_utils.hpp b/ibm_vpd_utils.hpp
index 8a64d16..18ee819 100644
--- a/ibm_vpd_utils.hpp
+++ b/ibm_vpd_utils.hpp
@@ -293,8 +293,9 @@
 
 /** @brief Translate udev event generated path to a generic /sys/bus eeprom path
  *  @param[io] file - path generated from udev event.
+ *  @param[in] driver - kernel driver used by the device.
  */
-void udevToGenericPath(std::string& file);
+void udevToGenericPath(std::string& file, const std::string& driver);
 
 /**
  * @brief API to generate a vpd name in some pattern.
