diff --git a/phosphor-regulators/src/actions/i2c_write_bytes_action.cpp b/phosphor-regulators/src/actions/i2c_write_bytes_action.cpp
index 21b31f1..e9a02f3 100644
--- a/phosphor-regulators/src/actions/i2c_write_bytes_action.cpp
+++ b/phosphor-regulators/src/actions/i2c_write_bytes_action.cpp
@@ -51,8 +51,8 @@
             // Combine values to write with current values
             for (unsigned int i = 0; i < values.size(); ++i)
             {
-                valuesToWrite[i] =
-                    (values[i] & masks[i]) | (currentValues[i] & (~masks[i]));
+                valuesToWrite[i] = (values[i] & masks[i]) |
+                                   (currentValues[i] & (~masks[i]));
             }
         }
 
diff --git a/phosphor-regulators/src/actions/log_phase_fault_action.hpp b/phosphor-regulators/src/actions/log_phase_fault_action.hpp
index 70c4cd0..b587699 100644
--- a/phosphor-regulators/src/actions/log_phase_fault_action.hpp
+++ b/phosphor-regulators/src/actions/log_phase_fault_action.hpp
@@ -47,8 +47,7 @@
      *
      * @param type phase fault type
      */
-    explicit LogPhaseFaultAction(PhaseFaultType type) : type{type}
-    {}
+    explicit LogPhaseFaultAction(PhaseFaultType type) : type{type} {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp b/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp
index 896830c..a94775d 100644
--- a/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp
+++ b/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp
@@ -49,8 +49,8 @@
                 break;
             case pmbus_utils::SensorDataFormat::linear_16:
                 int8_t exponentValue = getExponentValue(environment, interface);
-                sensorValue =
-                    pmbus_utils::convertFromVoutLinear(value, exponentValue);
+                sensorValue = pmbus_utils::convertFromVoutLinear(value,
+                                                                 exponentValue);
                 break;
         }
 
diff --git a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
index ca1756f..55ed89d 100644
--- a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
+++ b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
@@ -41,8 +41,8 @@
         int8_t exponentValue = getExponentValue(environment, interface);
 
         // Convert volts value to linear data format
-        uint16_t linearValue =
-            pmbus_utils::convertToVoutLinear(voltsValue, exponentValue);
+        uint16_t linearValue = pmbus_utils::convertToVoutLinear(voltsValue,
+                                                                exponentValue);
 
         // Write linear format value to VOUT_COMMAND.  I2CInterface method
         // writes low-order byte first as required by PMBus.
diff --git a/phosphor-regulators/src/actions/run_rule_action.hpp b/phosphor-regulators/src/actions/run_rule_action.hpp
index 87cd0c4..568f9f0 100644
--- a/phosphor-regulators/src/actions/run_rule_action.hpp
+++ b/phosphor-regulators/src/actions/run_rule_action.hpp
@@ -47,8 +47,7 @@
      *
      * @param ruleID rule ID
      */
-    explicit RunRuleAction(const std::string& ruleID) : ruleID{ruleID}
-    {}
+    explicit RunRuleAction(const std::string& ruleID) : ruleID{ruleID} {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/config_file_parser.cpp b/phosphor-regulators/src/config_file_parser.cpp
index 4bb8bd8..ede608b 100644
--- a/phosphor-regulators/src/config_file_parser.cpp
+++ b/phosphor-regulators/src/config_file_parser.cpp
@@ -214,8 +214,8 @@
     ++propertyCount;
 
     // Required inventory_path property
-    const json& inventoryPathElement =
-        getRequiredProperty(element, "inventory_path");
+    const json& inventoryPathElement = getRequiredProperty(element,
+                                                           "inventory_path");
     std::string inventoryPath = parseInventoryPath(inventoryPathElement);
     ++propertyCount;
 
@@ -356,8 +356,8 @@
     ++propertyCount;
 
     // Required is_regulator property
-    const json& isRegulatorElement =
-        getRequiredProperty(element, "is_regulator");
+    const json& isRegulatorElement = getRequiredProperty(element,
+                                                         "is_regulator");
     bool isRegulator = parseBoolean(isRegulatorElement);
     ++propertyCount;
 
@@ -367,8 +367,8 @@
     ++propertyCount;
 
     // Required i2c_interface property
-    const json& i2cInterfaceElement =
-        getRequiredProperty(element, "i2c_interface");
+    const json& i2cInterfaceElement = getRequiredProperty(element,
+                                                          "i2c_interface");
     std::unique_ptr<i2c::I2CInterface> i2cInterface =
         parseI2CInterface(i2cInterfaceElement);
     ++propertyCount;
diff --git a/phosphor-regulators/src/device.hpp b/phosphor-regulators/src/device.hpp
index 352daeb..1815680 100644
--- a/phosphor-regulators/src/device.hpp
+++ b/phosphor-regulators/src/device.hpp
@@ -74,11 +74,11 @@
             std::vector<std::unique_ptr<Rail>>{}) :
         id{id},
         isRegulatorDevice{isRegulator}, fru{fru},
-        i2cInterface{std::move(i2cInterface)}, presenceDetection{std::move(
-                                                   presenceDetection)},
+        i2cInterface{std::move(i2cInterface)},
+        presenceDetection{std::move(presenceDetection)},
         configuration{std::move(configuration)},
-        phaseFaultDetection{std::move(phaseFaultDetection)}, rails{std::move(
-                                                                 rails)}
+        phaseFaultDetection{std::move(phaseFaultDetection)},
+        rails{std::move(rails)}
     {}
 
     /**
diff --git a/phosphor-regulators/src/error_logging.hpp b/phosphor-regulators/src/error_logging.hpp
index ae26dab..1c633f9 100644
--- a/phosphor-regulators/src/error_logging.hpp
+++ b/phosphor-regulators/src/error_logging.hpp
@@ -166,8 +166,7 @@
      *
      * @param bus D-Bus bus object
      */
-    explicit DBusErrorLogging(sdbusplus::bus_t& bus) : bus{bus}
-    {}
+    explicit DBusErrorLogging(sdbusplus::bus_t& bus) : bus{bus} {}
 
     /** @copydoc ErrorLogging::logConfigFileError() */
     virtual void logConfigFileError(Entry::Level severity,
diff --git a/phosphor-regulators/src/journal.cpp b/phosphor-regulators/src/journal.cpp
index 955792a..716a999 100644
--- a/phosphor-regulators/src/journal.cpp
+++ b/phosphor-regulators/src/journal.cpp
@@ -43,8 +43,7 @@
     JournalCloser& operator=(const JournalCloser&) = delete;
     JournalCloser& operator=(JournalCloser&&) = delete;
 
-    explicit JournalCloser(sd_journal* journal) : journal{journal}
-    {}
+    explicit JournalCloser(sd_journal* journal) : journal{journal} {}
 
     ~JournalCloser()
     {
diff --git a/phosphor-regulators/src/manager.cpp b/phosphor-regulators/src/manager.cpp
index 4bb9a23..cfbb811 100644
--- a/phosphor-regulators/src/manager.cpp
+++ b/phosphor-regulators/src/manager.cpp
@@ -73,9 +73,8 @@
 
 Manager::Manager(sdbusplus::bus_t& bus, const sdeventplus::Event& event) :
     ManagerObject{bus, managerObjPath}, bus{bus}, eventLoop{event},
-    services{bus}, phaseFaultTimer{event,
-                                   std::bind(&Manager::phaseFaultTimerExpired,
-                                             this)},
+    services{bus},
+    phaseFaultTimer{event, std::bind(&Manager::phaseFaultTimerExpired, this)},
     sensorTimer{event, std::bind(&Manager::sensorTimerExpired, this)}
 {
     // Subscribe to D-Bus interfacesAdded signal from Entity Manager.  This
@@ -414,8 +413,8 @@
 
             // Store config file information in a new System object.  The old
             // System object, if any, is automatically deleted.
-            system =
-                std::make_unique<System>(std::move(rules), std::move(chassis));
+            system = std::make_unique<System>(std::move(rules),
+                                              std::move(chassis));
         }
     }
     catch (const std::exception& e)
diff --git a/phosphor-regulators/src/presence_service.hpp b/phosphor-regulators/src/presence_service.hpp
index 9520dbd..5ae96d3 100644
--- a/phosphor-regulators/src/presence_service.hpp
+++ b/phosphor-regulators/src/presence_service.hpp
@@ -83,8 +83,7 @@
      *
      * @param bus D-Bus bus object
      */
-    explicit DBusPresenceService(sdbusplus::bus_t& bus) : bus{bus}
-    {}
+    explicit DBusPresenceService(sdbusplus::bus_t& bus) : bus{bus} {}
 
     /** @copydoc PresenceService::clearCache() */
     virtual void clearCache(void) override
diff --git a/phosphor-regulators/src/rail.hpp b/phosphor-regulators/src/rail.hpp
index 63d80eb..70b3e3d 100644
--- a/phosphor-regulators/src/rail.hpp
+++ b/phosphor-regulators/src/rail.hpp
@@ -62,8 +62,8 @@
         std::unique_ptr<Configuration> configuration = nullptr,
         std::unique_ptr<SensorMonitoring> sensorMonitoring = nullptr) :
         id{id},
-        configuration{std::move(configuration)}, sensorMonitoring{std::move(
-                                                     sensorMonitoring)}
+        configuration{std::move(configuration)},
+        sensorMonitoring{std::move(sensorMonitoring)}
     {}
 
     /**
diff --git a/phosphor-regulators/src/regsctl/main.cpp b/phosphor-regulators/src/regsctl/main.cpp
index 9f65c8b..6f03016 100644
--- a/phosphor-regulators/src/regsctl/main.cpp
+++ b/phosphor-regulators/src/regsctl/main.cpp
@@ -39,12 +39,12 @@
         // Add dbus methods group
         auto methods = app.add_option_group("Methods");
         // Configure method
-        CLI::App* config =
-            methods->add_subcommand("config", "Configure regulators");
+        CLI::App* config = methods->add_subcommand("config",
+                                                   "Configure regulators");
         config->set_help_flag("-h,--help", "Configure regulators method help");
         // Monitor method
-        CLI::App* monitor =
-            methods->add_subcommand("monitor", "Monitor regulators");
+        CLI::App* monitor = methods->add_subcommand("monitor",
+                                                    "Monitor regulators");
         monitor->set_help_flag("-h,--help", "Monitor regulators method help");
         monitor->add_flag("-e,--enable", monitorEnable,
                           "Enable regulator monitoring");
diff --git a/phosphor-regulators/src/regsctl/utility.hpp b/phosphor-regulators/src/regsctl/utility.hpp
index b1a1418..b64eab5 100644
--- a/phosphor-regulators/src/regsctl/utility.hpp
+++ b/phosphor-regulators/src/regsctl/utility.hpp
@@ -23,8 +23,8 @@
 auto callMethod(const std::string& method, Args&&... args)
 {
     auto bus = sdbusplus::bus::new_default();
-    auto reqMsg =
-        bus.new_method_call(busName, objPath, interface, method.c_str());
+    auto reqMsg = bus.new_method_call(busName, objPath, interface,
+                                      method.c_str());
     reqMsg.append(std::forward<Args>(args)...);
 
     // Set timeout to 6 minutes; some regulator methods take over 5 minutes
diff --git a/phosphor-regulators/src/services.hpp b/phosphor-regulators/src/services.hpp
index 3c2e3ff..0721479 100644
--- a/phosphor-regulators/src/services.hpp
+++ b/phosphor-regulators/src/services.hpp
@@ -112,8 +112,8 @@
      * @param bus D-Bus bus object
      */
     explicit BMCServices(sdbusplus::bus_t& bus) :
-        bus{bus}, errorLogging{bus},
-        presenceService{bus}, sensors{bus}, vpd{bus}
+        bus{bus}, errorLogging{bus}, presenceService{bus}, sensors{bus},
+        vpd{bus}
     {}
 
     /** @copydoc Services::getBus() */
diff --git a/phosphor-regulators/src/temporary_file.cpp b/phosphor-regulators/src/temporary_file.cpp
index 514d818..5b5954d 100644
--- a/phosphor-regulators/src/temporary_file.cpp
+++ b/phosphor-regulators/src/temporary_file.cpp
@@ -30,8 +30,8 @@
 TemporaryFile::TemporaryFile()
 {
     // Build template path required by mkstemp()
-    std::string templatePath =
-        fs::temp_directory_path() / "phosphor-regulators-XXXXXX";
+    std::string templatePath = fs::temp_directory_path() /
+                               "phosphor-regulators-XXXXXX";
 
     // Generate unique file name, create file, and open it.  The XXXXXX
     // characters are replaced by mkstemp() to make the file name unique.
diff --git a/phosphor-regulators/src/vpd.hpp b/phosphor-regulators/src/vpd.hpp
index 514172c..e86f834 100644
--- a/phosphor-regulators/src/vpd.hpp
+++ b/phosphor-regulators/src/vpd.hpp
@@ -88,8 +88,7 @@
      *
      * @param bus D-Bus bus object
      */
-    explicit DBusVPD(sdbusplus::bus_t& bus) : bus{bus}
-    {}
+    explicit DBusVPD(sdbusplus::bus_t& bus) : bus{bus} {}
 
     /** @copydoc VPD::clearCache() */
     virtual void clearCache(void) override
