diff --git a/.clang-format b/.clang-format
index a75a2c2..e5530e6 100644
--- a/.clang-format
+++ b/.clang-format
@@ -104,7 +104,7 @@
 PenaltyBreakString: 1000
 PenaltyBreakTemplateDeclaration: 10
 PenaltyExcessCharacter: 1000000
-PenaltyReturnTypeOnItsOwnLine: 60
+PenaltyReturnTypeOnItsOwnLine: 150
 PenaltyIndentedWhitespace: 1
 PointerAlignment: Left
 QualifierAlignment: Left
diff --git a/cold-redundancy/cold_redundancy.hpp b/cold-redundancy/cold_redundancy.hpp
index d814c53..1a54462 100644
--- a/cold-redundancy/cold_redundancy.hpp
+++ b/cold-redundancy/cold_redundancy.hpp
@@ -41,8 +41,8 @@
      *
      * @param[in] dbusConnection - D-Bus connection
      */
-    void
-        createPSU(std::shared_ptr<sdbusplus::asio::connection>& dbusConnection);
+    void createPSU(
+        std::shared_ptr<sdbusplus::asio::connection>& dbusConnection);
 
   private:
     /**
diff --git a/compatible_system_types_finder.hpp b/compatible_system_types_finder.hpp
index 26093d9..768a63b 100644
--- a/compatible_system_types_finder.hpp
+++ b/compatible_system_types_finder.hpp
@@ -52,10 +52,10 @@
     CompatibleSystemTypesFinder() = delete;
     CompatibleSystemTypesFinder(const CompatibleSystemTypesFinder&) = delete;
     CompatibleSystemTypesFinder(CompatibleSystemTypesFinder&&) = delete;
-    CompatibleSystemTypesFinder&
-        operator=(const CompatibleSystemTypesFinder&) = delete;
-    CompatibleSystemTypesFinder&
-        operator=(CompatibleSystemTypesFinder&&) = delete;
+    CompatibleSystemTypesFinder& operator=(const CompatibleSystemTypesFinder&) =
+        delete;
+    CompatibleSystemTypesFinder& operator=(CompatibleSystemTypesFinder&&) =
+        delete;
     ~CompatibleSystemTypesFinder() = default;
 
     /**
diff --git a/dbus_interfaces_finder.cpp b/dbus_interfaces_finder.cpp
index 69d9583..1e9cb77 100644
--- a/dbus_interfaces_finder.cpp
+++ b/dbus_interfaces_finder.cpp
@@ -38,8 +38,8 @@
     findInterfaces();
 }
 
-void
-    DBusInterfacesFinder::interfacesAddedCallback(sdbusplus::message_t& message)
+void DBusInterfacesFinder::interfacesAddedCallback(
+    sdbusplus::message_t& message)
 {
     // Exit if message is invalid
     if (!message)
diff --git a/phosphor-power-sequencer/src/config_file_parser.cpp b/phosphor-power-sequencer/src/config_file_parser.cpp
index 83754b1..e8d68d5 100644
--- a/phosphor-power-sequencer/src/config_file_parser.cpp
+++ b/phosphor-power-sequencer/src/config_file_parser.cpp
@@ -31,9 +31,9 @@
 const std::filesystem::path standardConfigFileDirectory{
     "/usr/share/phosphor-power-sequencer"};
 
-std::filesystem::path
-    find(const std::vector<std::string>& compatibleSystemTypes,
-         const std::filesystem::path& configFileDir)
+std::filesystem::path find(
+    const std::vector<std::string>& compatibleSystemTypes,
+    const std::filesystem::path& configFileDir)
 {
     fs::path pathName, possiblePath;
     std::string fileName;
diff --git a/phosphor-power-sequencer/src/config_file_parser.hpp b/phosphor-power-sequencer/src/config_file_parser.hpp
index fef3f53..7b28f2f 100644
--- a/phosphor-power-sequencer/src/config_file_parser.hpp
+++ b/phosphor-power-sequencer/src/config_file_parser.hpp
@@ -155,8 +155,8 @@
  * @param element JSON element
  * @return vector of Rail objects
  */
-std::vector<std::unique_ptr<Rail>>
-    parseRailArray(const nlohmann::json& element);
+std::vector<std::unique_ptr<Rail>> parseRailArray(
+    const nlohmann::json& element);
 
 /**
  * Parses the JSON root element of the entire configuration file.
diff --git a/phosphor-power-sequencer/src/pmbus_driver_device.cpp b/phosphor-power-sequencer/src/pmbus_driver_device.cpp
index cb08476..ea92a8e 100644
--- a/phosphor-power-sequencer/src/pmbus_driver_device.cpp
+++ b/phosphor-power-sequencer/src/pmbus_driver_device.cpp
@@ -217,8 +217,8 @@
     return isLabel;
 }
 
-std::optional<uint8_t>
-    PMBusDriverDevice::readPageFromLabelFile(const std::string& fileName)
+std::optional<uint8_t> PMBusDriverDevice::readPageFromLabelFile(
+    const std::string& fileName)
 {
     std::optional<uint8_t> page;
     try
diff --git a/phosphor-power-sequencer/src/pmbus_driver_device.hpp b/phosphor-power-sequencer/src/pmbus_driver_device.hpp
index c8754db..6823907 100644
--- a/phosphor-power-sequencer/src/pmbus_driver_device.hpp
+++ b/phosphor-power-sequencer/src/pmbus_driver_device.hpp
@@ -218,8 +218,8 @@
      * @param fileName voltage label file within the sysfs hwmon directory
      * @return PMBus page number
      */
-    virtual std::optional<uint8_t>
-        readPageFromLabelFile(const std::string& fileName);
+    virtual std::optional<uint8_t> readPageFromLabelFile(
+        const std::string& fileName);
 
     /**
      * I2C bus for the device.
diff --git a/phosphor-power-sequencer/src/power_sequencer_device.hpp b/phosphor-power-sequencer/src/power_sequencer_device.hpp
index 4b3ada6..a133f41 100644
--- a/phosphor-power-sequencer/src/power_sequencer_device.hpp
+++ b/phosphor-power-sequencer/src/power_sequencer_device.hpp
@@ -151,9 +151,9 @@
      * @return error that should be logged if a pgood fault was found, or an
      *         empty string if no pgood fault was found
      */
-    virtual std::string
-        findPgoodFault(Services& services, const std::string& powerSupplyError,
-                       std::map<std::string, std::string>& additionalData) = 0;
+    virtual std::string findPgoodFault(
+        Services& services, const std::string& powerSupplyError,
+        std::map<std::string, std::string>& additionalData) = 0;
 };
 
 } // namespace phosphor::power::sequencer
diff --git a/phosphor-power-sequencer/src/services.hpp b/phosphor-power-sequencer/src/services.hpp
index d573743..2f38008 100644
--- a/phosphor-power-sequencer/src/services.hpp
+++ b/phosphor-power-sequencer/src/services.hpp
@@ -84,9 +84,9 @@
      * @param severity Severity property of the error log entry
      * @param additionalData AdditionalData property of the error log entry
      */
-    virtual void
-        logError(const std::string& message, Entry::Level severity,
-                 std::map<std::string, std::string>& additionalData) = 0;
+    virtual void logError(
+        const std::string& message, Entry::Level severity,
+        std::map<std::string, std::string>& additionalData) = 0;
 
     /**
      * Returns whether the hardware with the specified inventory path is
@@ -183,16 +183,16 @@
     }
 
     /** @copydoc Services::logError() */
-    virtual void
-        logError(const std::string& message, Entry::Level severity,
-                 std::map<std::string, std::string>& additionalData) override;
+    virtual void logError(
+        const std::string& message, Entry::Level severity,
+        std::map<std::string, std::string>& additionalData) override;
 
     /** @copydoc Services::isPresent() */
     virtual bool isPresent(const std::string& inventoryPath) override;
 
     /** @copydoc Services::getGPIOValues() */
-    virtual std::vector<int>
-        getGPIOValues(const std::string& chipLabel) override;
+    virtual std::vector<int> getGPIOValues(
+        const std::string& chipLabel) override;
 
     /** @copydoc Services::createPMBus() */
     virtual std::unique_ptr<PMBusBase> createPMBus(
diff --git a/phosphor-power-sequencer/src/standard_device.hpp b/phosphor-power-sequencer/src/standard_device.hpp
index 245af38..227e3bc 100644
--- a/phosphor-power-sequencer/src/standard_device.hpp
+++ b/phosphor-power-sequencer/src/standard_device.hpp
@@ -93,8 +93,8 @@
      *
      * @param services System services like hardware presence and the journal
      */
-    virtual void
-        prepareForPgoodFaultDetection([[maybe_unused]] Services& services)
+    virtual void prepareForPgoodFaultDetection(
+        [[maybe_unused]] Services& services)
     {}
 
     /**
@@ -163,9 +163,9 @@
      * @param values GPIO values obtained from the device (if any)
      * @param additionalData Additional data to include in an error log
      */
-    virtual void
-        storeGPIOValues(Services& services, const std::vector<int>& values,
-                        std::map<std::string, std::string>& additionalData);
+    virtual void storeGPIOValues(
+        Services& services, const std::vector<int>& values,
+        std::map<std::string, std::string>& additionalData);
 
     /**
      * Device name.
diff --git a/phosphor-power-sequencer/test/mock_services.hpp b/phosphor-power-sequencer/test/mock_services.hpp
index 40937e2..cb1d445 100644
--- a/phosphor-power-sequencer/test/mock_services.hpp
+++ b/phosphor-power-sequencer/test/mock_services.hpp
@@ -53,8 +53,8 @@
     MOCK_METHOD(std::vector<int>, getGPIOValues, (const std::string& chipLabel),
                 (override));
 
-    virtual std::unique_ptr<PMBusBase>
-        createPMBus(uint8_t, uint16_t, const std::string&, size_t) override
+    virtual std::unique_ptr<PMBusBase> createPMBus(
+        uint8_t, uint16_t, const std::string&, size_t) override
     {
         return std::make_unique<MockPMBus>();
     }
diff --git a/phosphor-power-supply/util.cpp b/phosphor-power-supply/util.cpp
index 8fe4e23..54f6eb7 100644
--- a/phosphor-power-supply/util.cpp
+++ b/phosphor-power-supply/util.cpp
@@ -28,8 +28,8 @@
     }
 }
 
-std::unique_ptr<GPIOInterfaceBase>
-    GPIOInterface::createGPIO(const std::string& namedGpio)
+std::unique_ptr<GPIOInterfaceBase> GPIOInterface::createGPIO(
+    const std::string& namedGpio)
 {
     return std::make_unique<GPIOInterface>(namedGpio);
 }
diff --git a/phosphor-power-supply/util.hpp b/phosphor-power-supply/util.hpp
index 1614138..f432af0 100644
--- a/phosphor-power-supply/util.hpp
+++ b/phosphor-power-supply/util.hpp
@@ -235,8 +235,8 @@
      */
     GPIOInterface(const std::string& namedGpio);
 
-    static std::unique_ptr<GPIOInterfaceBase>
-        createGPIO(const std::string& namedGpio);
+    static std::unique_ptr<GPIOInterfaceBase> createGPIO(
+        const std::string& namedGpio);
 
     /**
      * @brief Attempts to read the state of the GPIO line.
diff --git a/phosphor-regulators/src/actions/i2c_capture_bytes_action.cpp b/phosphor-regulators/src/actions/i2c_capture_bytes_action.cpp
index 338ef4a..abae4a1 100644
--- a/phosphor-regulators/src/actions/i2c_capture_bytes_action.cpp
+++ b/phosphor-regulators/src/actions/i2c_capture_bytes_action.cpp
@@ -60,8 +60,8 @@
     return ss.str();
 }
 
-std::string
-    I2CCaptureBytesAction::getErrorDataKey(ActionEnvironment& environment) const
+std::string I2CCaptureBytesAction::getErrorDataKey(
+    ActionEnvironment& environment) const
 {
     // Additional error data key format: <deviceID>_register_<register>
     std::ostringstream ss;
@@ -91,8 +91,8 @@
     return key;
 }
 
-std::string
-    I2CCaptureBytesAction::getErrorDataValue(const uint8_t* values) const
+std::string I2CCaptureBytesAction::getErrorDataValue(
+    const uint8_t* values) const
 {
     // Additional error data value format: [ <byte 0>, <byte 1>, ... ]
     std::ostringstream ss;
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..62231be 100644
--- a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
+++ b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
@@ -122,8 +122,8 @@
     return parameter;
 }
 
-double
-    PMBusWriteVoutCommandAction::getVoltsValue(ActionEnvironment& environment)
+double PMBusWriteVoutCommandAction::getVoltsValue(
+    ActionEnvironment& environment)
 {
     double voltsValue;
 
diff --git a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.hpp b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.hpp
index e15d032..3a69228 100644
--- a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.hpp
+++ b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.hpp
@@ -68,10 +68,10 @@
     PMBusWriteVoutCommandAction() = delete;
     PMBusWriteVoutCommandAction(const PMBusWriteVoutCommandAction&) = delete;
     PMBusWriteVoutCommandAction(PMBusWriteVoutCommandAction&&) = delete;
-    PMBusWriteVoutCommandAction&
-        operator=(const PMBusWriteVoutCommandAction&) = delete;
-    PMBusWriteVoutCommandAction&
-        operator=(PMBusWriteVoutCommandAction&&) = delete;
+    PMBusWriteVoutCommandAction& operator=(const PMBusWriteVoutCommandAction&) =
+        delete;
+    PMBusWriteVoutCommandAction& operator=(PMBusWriteVoutCommandAction&&) =
+        delete;
     virtual ~PMBusWriteVoutCommandAction() = default;
 
     /**
diff --git a/phosphor-regulators/src/config_file_parser.cpp b/phosphor-regulators/src/config_file_parser.cpp
index 4bb8bd8..442db04 100644
--- a/phosphor-regulators/src/config_file_parser.cpp
+++ b/phosphor-regulators/src/config_file_parser.cpp
@@ -775,8 +775,8 @@
     return std::make_unique<OrAction>(std::move(actions));
 }
 
-std::unique_ptr<PhaseFaultDetection>
-    parsePhaseFaultDetection(const json& element)
+std::unique_ptr<PhaseFaultDetection> parsePhaseFaultDetection(
+    const json& element)
 {
     verifyIsObject(element);
     unsigned int propertyCount{0};
@@ -864,8 +864,8 @@
                                                    exponent);
 }
 
-std::unique_ptr<PMBusWriteVoutCommandAction>
-    parsePMBusWriteVoutCommand(const json& element)
+std::unique_ptr<PMBusWriteVoutCommandAction> parsePMBusWriteVoutCommand(
+    const json& element)
 {
     verifyIsObject(element);
     unsigned int propertyCount{0};
@@ -1061,8 +1061,8 @@
     return rules;
 }
 
-std::vector<std::unique_ptr<Action>>
-    parseRuleIDOrActionsProperty(const json& element)
+std::vector<std::unique_ptr<Action>> parseRuleIDOrActionsProperty(
+    const json& element)
 {
     verifyIsObject(element);
     // Required rule_id or actions property
diff --git a/phosphor-regulators/src/config_file_parser.hpp b/phosphor-regulators/src/config_file_parser.hpp
index 3add3ff..1119fc0 100644
--- a/phosphor-regulators/src/config_file_parser.hpp
+++ b/phosphor-regulators/src/config_file_parser.hpp
@@ -125,8 +125,8 @@
  * @param element JSON element
  * @return vector of Action objects
  */
-std::vector<std::unique_ptr<Action>>
-    parseActionArray(const nlohmann::json& element);
+std::vector<std::unique_ptr<Action>> parseActionArray(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing an and action.
@@ -232,8 +232,8 @@
  * @param element JSON element
  * @return vector of Chassis objects
  */
-std::vector<std::unique_ptr<Chassis>>
-    parseChassisArray(const nlohmann::json& element);
+std::vector<std::unique_ptr<Chassis>> parseChassisArray(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a compare_presence action.
@@ -245,8 +245,8 @@
  * @param element JSON element
  * @return ComparePresenceAction object
  */
-std::unique_ptr<ComparePresenceAction>
-    parseComparePresence(const nlohmann::json& element);
+std::unique_ptr<ComparePresenceAction> parseComparePresence(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a compare_vpd action.
@@ -258,8 +258,8 @@
  * @param element JSON element
  * @return CompareVPDAction object
  */
-std::unique_ptr<CompareVPDAction>
-    parseCompareVPD(const nlohmann::json& element);
+std::unique_ptr<CompareVPDAction> parseCompareVPD(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a configuration object.
@@ -271,8 +271,8 @@
  * @param element JSON element
  * @return Configuration object
  */
-std::unique_ptr<Configuration>
-    parseConfiguration(const nlohmann::json& element);
+std::unique_ptr<Configuration> parseConfiguration(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a device.
@@ -296,8 +296,8 @@
  * @param element JSON element
  * @return vector of Device objects
  */
-std::vector<std::unique_ptr<Device>>
-    parseDeviceArray(const nlohmann::json& element);
+std::vector<std::unique_ptr<Device>> parseDeviceArray(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a double (floating point number).
@@ -376,8 +376,8 @@
  * @param element JSON element
  * @return I2CCaptureBytesAction object
  */
-std::unique_ptr<I2CCaptureBytesAction>
-    parseI2CCaptureBytes(const nlohmann::json& element);
+std::unique_ptr<I2CCaptureBytesAction> parseI2CCaptureBytes(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing an i2c_compare_bit action.
@@ -389,8 +389,8 @@
  * @param element JSON element
  * @return I2CCompareBitAction object
  */
-std::unique_ptr<I2CCompareBitAction>
-    parseI2CCompareBit(const nlohmann::json& element);
+std::unique_ptr<I2CCompareBitAction> parseI2CCompareBit(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing an i2c_compare_byte action.
@@ -402,8 +402,8 @@
  * @param element JSON element
  * @return I2CCompareByteAction object
  */
-std::unique_ptr<I2CCompareByteAction>
-    parseI2CCompareByte(const nlohmann::json& element);
+std::unique_ptr<I2CCompareByteAction> parseI2CCompareByte(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing an i2c_compare_bytes action.
@@ -415,8 +415,8 @@
  * @param element JSON element
  * @return I2CCompareBytesAction object
  */
-std::unique_ptr<I2CCompareBytesAction>
-    parseI2CCompareBytes(const nlohmann::json& element);
+std::unique_ptr<I2CCompareBytesAction> parseI2CCompareBytes(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing an i2c_interface.
@@ -428,8 +428,8 @@
  * @param element JSON element
  * @return i2c::I2CInterface object
  */
-std::unique_ptr<i2c::I2CInterface>
-    parseI2CInterface(const nlohmann::json& element);
+std::unique_ptr<i2c::I2CInterface> parseI2CInterface(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing an i2c_write_bit action.
@@ -441,8 +441,8 @@
  * @param element JSON element
  * @return I2CWriteBitAction object
  */
-std::unique_ptr<I2CWriteBitAction>
-    parseI2CWriteBit(const nlohmann::json& element);
+std::unique_ptr<I2CWriteBitAction> parseI2CWriteBit(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing an i2c_write_byte action.
@@ -454,8 +454,8 @@
  * @param element JSON element
  * @return I2CWriteByteAction object
  */
-std::unique_ptr<I2CWriteByteAction>
-    parseI2CWriteByte(const nlohmann::json& element);
+std::unique_ptr<I2CWriteByteAction> parseI2CWriteByte(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing an i2c_write_bytes action.
@@ -467,8 +467,8 @@
  * @param element JSON element
  * @return I2CWriteBytesAction object
  */
-std::unique_ptr<I2CWriteBytesAction>
-    parseI2CWriteBytes(const nlohmann::json& element);
+std::unique_ptr<I2CWriteBytesAction> parseI2CWriteBytes(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing an if action.
@@ -532,8 +532,8 @@
  * @param element JSON element
  * @return LogPhaseFaultAction object
  */
-std::unique_ptr<LogPhaseFaultAction>
-    parseLogPhaseFault(const nlohmann::json& element);
+std::unique_ptr<LogPhaseFaultAction> parseLogPhaseFault(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a not action.
@@ -569,8 +569,8 @@
  * @param element JSON element
  * @return PhaseFaultDetection object
  */
-std::unique_ptr<PhaseFaultDetection>
-    parsePhaseFaultDetection(const nlohmann::json& element);
+std::unique_ptr<PhaseFaultDetection> parsePhaseFaultDetection(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a PhaseFaultType expressed as a string.
@@ -594,8 +594,8 @@
  * @param element JSON element
  * @return PMBusReadSensorAction object
  */
-std::unique_ptr<PMBusReadSensorAction>
-    parsePMBusReadSensor(const nlohmann::json& element);
+std::unique_ptr<PMBusReadSensorAction> parsePMBusReadSensor(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a pmbus_write_vout_command action.
@@ -607,8 +607,8 @@
  * @param element JSON element
  * @return PMBusWriteVoutCommandAction object
  */
-std::unique_ptr<PMBusWriteVoutCommandAction>
-    parsePMBusWriteVoutCommand(const nlohmann::json& element);
+std::unique_ptr<PMBusWriteVoutCommandAction> parsePMBusWriteVoutCommand(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a presence_detection object.
@@ -620,8 +620,8 @@
  * @param element JSON element
  * @return PresenceDetection object
  */
-std::unique_ptr<PresenceDetection>
-    parsePresenceDetection(const nlohmann::json& element);
+std::unique_ptr<PresenceDetection> parsePresenceDetection(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a rail.
@@ -645,8 +645,8 @@
  * @param element JSON element
  * @return vector of Rail objects
  */
-std::vector<std::unique_ptr<Rail>>
-    parseRailArray(const nlohmann::json& element);
+std::vector<std::unique_ptr<Rail>> parseRailArray(
+    const nlohmann::json& element);
 
 /**
  * Parses the JSON root element of the entire configuration file.
@@ -684,8 +684,8 @@
  * @param element JSON element
  * @return vector of Rule objects
  */
-std::vector<std::unique_ptr<Rule>>
-    parseRuleArray(const nlohmann::json& element);
+std::vector<std::unique_ptr<Rule>> parseRuleArray(
+    const nlohmann::json& element);
 
 /**
  * Parses the "rule_id" or "actions" property in a JSON element.
@@ -703,8 +703,8 @@
  * @param element JSON element
  * @return vector of Action objects
  */
-std::vector<std::unique_ptr<Action>>
-    parseRuleIDOrActionsProperty(const nlohmann::json& element);
+std::vector<std::unique_ptr<Action>> parseRuleIDOrActionsProperty(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a run_rule action.
@@ -728,8 +728,8 @@
  * @param element JSON element
  * @return SensorDataFormat enum value
  */
-pmbus_utils::SensorDataFormat
-    parseSensorDataFormat(const nlohmann::json& element);
+pmbus_utils::SensorDataFormat parseSensorDataFormat(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a sensor_monitoring object.
@@ -741,8 +741,8 @@
  * @param element JSON element
  * @return SensorMonitoring object
  */
-std::unique_ptr<SensorMonitoring>
-    parseSensorMonitoring(const nlohmann::json& element);
+std::unique_ptr<SensorMonitoring> parseSensorMonitoring(
+    const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a SensorType expressed as a string.
diff --git a/phosphor-regulators/src/dbus_sensor.cpp b/phosphor-regulators/src/dbus_sensor.cpp
index 8dd760a..5f0a938 100644
--- a/phosphor-regulators/src/dbus_sensor.cpp
+++ b/phosphor-regulators/src/dbus_sensor.cpp
@@ -152,9 +152,9 @@
     setLastUpdateTime();
 }
 
-std::vector<AssocationTuple>
-    DBusSensor::getAssociations(const std::string& deviceInventoryPath,
-                                const std::string& chassisInventoryPath)
+std::vector<AssocationTuple> DBusSensor::getAssociations(
+    const std::string& deviceInventoryPath,
+    const std::string& chassisInventoryPath)
 {
     std::vector<AssocationTuple> associations{};
 
diff --git a/phosphor-regulators/src/dbus_sensor.hpp b/phosphor-regulators/src/dbus_sensor.hpp
index 68982d3..5f88b1a 100644
--- a/phosphor-regulators/src/dbus_sensor.hpp
+++ b/phosphor-regulators/src/dbus_sensor.hpp
@@ -268,9 +268,9 @@
      * @param chassisInventoryPath D-Bus inventory path of the chassis that
      *                             contains the voltage regulator device
      */
-    std::vector<AssocationTuple>
-        getAssociations(const std::string& deviceInventoryPath,
-                        const std::string& chassisInventoryPath);
+    std::vector<AssocationTuple> getAssociations(
+        const std::string& deviceInventoryPath,
+        const std::string& chassisInventoryPath);
 
     /**
      * Get sensor properties that are based on the sensor type.
diff --git a/phosphor-regulators/src/error_logging.cpp b/phosphor-regulators/src/error_logging.cpp
index 9ebce1a..a7b4a3d 100644
--- a/phosphor-regulators/src/error_logging.cpp
+++ b/phosphor-regulators/src/error_logging.cpp
@@ -192,8 +192,8 @@
     return files;
 }
 
-std::vector<FFDCTuple>
-    DBusErrorLogging::createFFDCTuples(std::vector<FFDCFile>& files)
+std::vector<FFDCTuple> DBusErrorLogging::createFFDCTuples(
+    std::vector<FFDCFile>& files)
 {
     std::vector<FFDCTuple> ffdcTuples{};
     for (FFDCFile& file : files)
diff --git a/phosphor-regulators/src/error_logging.hpp b/phosphor-regulators/src/error_logging.hpp
index 1c633f9..6b058f8 100644
--- a/phosphor-regulators/src/error_logging.hpp
+++ b/phosphor-regulators/src/error_logging.hpp
@@ -110,10 +110,10 @@
      *                      occurred
      * @param additionalData additional error data (if any)
      */
-    virtual void
-        logPhaseFault(Entry::Level severity, Journal& journal,
-                      PhaseFaultType type, const std::string& inventoryPath,
-                      std::map<std::string, std::string> additionalData) = 0;
+    virtual void logPhaseFault(
+        Entry::Level severity, Journal& journal, PhaseFaultType type,
+        const std::string& inventoryPath,
+        std::map<std::string, std::string> additionalData) = 0;
 
     /**
      * Log a PMBus error.
@@ -140,9 +140,9 @@
      * @param inventoryPath D-Bus inventory path of the device where the error
      *                      occurred
      */
-    virtual void
-        logWriteVerificationError(Entry::Level severity, Journal& journal,
-                                  const std::string& inventoryPath) = 0;
+    virtual void logWriteVerificationError(
+        Entry::Level severity, Journal& journal,
+        const std::string& inventoryPath) = 0;
 };
 
 /**
@@ -195,9 +195,9 @@
                                const std::string& inventoryPath) override;
 
     /** @copydoc ErrorLogging::logWriteVerificationError() */
-    virtual void
-        logWriteVerificationError(Entry::Level severity, Journal& journal,
-                                  const std::string& inventoryPath) override;
+    virtual void logWriteVerificationError(
+        Entry::Level severity, Journal& journal,
+        const std::string& inventoryPath) override;
 
   private:
     /**
diff --git a/phosphor-regulators/src/journal.hpp b/phosphor-regulators/src/journal.hpp
index c004031..2199c8c 100644
--- a/phosphor-regulators/src/journal.hpp
+++ b/phosphor-regulators/src/journal.hpp
@@ -55,9 +55,9 @@
      *            matching messages.
      * @return matching messages from the journal
      */
-    virtual std::vector<std::string>
-        getMessages(const std::string& field, const std::string& fieldValue,
-                    unsigned int max = 0) = 0;
+    virtual std::vector<std::string> getMessages(const std::string& field,
+                                                 const std::string& fieldValue,
+                                                 unsigned int max = 0) = 0;
 
     /**
      * Logs a debug message in the system journal.
@@ -119,9 +119,9 @@
     virtual ~SystemdJournal() = default;
 
     /** @copydoc Journal::getMessages() */
-    virtual std::vector<std::string>
-        getMessages(const std::string& field, const std::string& fieldValue,
-                    unsigned int max) override;
+    virtual std::vector<std::string> getMessages(const std::string& field,
+                                                 const std::string& fieldValue,
+                                                 unsigned int max) override;
 
     /** @copydoc Journal::logDebug(const std::string&) */
     virtual void logDebug(const std::string& message) override
diff --git a/phosphor-regulators/test/presence_detection_tests.cpp b/phosphor-regulators/test/presence_detection_tests.cpp
index 0de5919..1604908 100644
--- a/phosphor-regulators/test/presence_detection_tests.cpp
+++ b/phosphor-regulators/test/presence_detection_tests.cpp
@@ -62,8 +62,8 @@
  *         Device objects are contained within the System object and will be
  *         automatically destructed.
  */
-std::tuple<std::unique_ptr<System>, Chassis*, Device*>
-    createParentObjects(std::unique_ptr<PresenceDetection> detection)
+std::tuple<std::unique_ptr<System>, Chassis*, Device*> createParentObjects(
+    std::unique_ptr<PresenceDetection> detection)
 {
     // Create mock I2CInterface
     std::unique_ptr<i2c::MockedI2CInterface> i2cInterface =
diff --git a/pmbus.cpp b/pmbus.cpp
index e737147..6021a26 100644
--- a/pmbus.cpp
+++ b/pmbus.cpp
@@ -397,8 +397,8 @@
     }
 }
 
-std::unique_ptr<PMBusBase>
-    PMBus::createPMBus(std::uint8_t bus, const std::string& address)
+std::unique_ptr<PMBusBase> PMBus::createPMBus(std::uint8_t bus,
+                                              const std::string& address)
 {
     const std::string physpath = {
         "/sys/bus/i2c/devices/" + std::to_string(bus) + "-" + address};
diff --git a/pmbus.hpp b/pmbus.hpp
index 6b5ccc4..1df4660 100644
--- a/pmbus.hpp
+++ b/pmbus.hpp
@@ -250,8 +250,8 @@
      *
      * @return PMBusBase pointer
      */
-    static std::unique_ptr<PMBusBase>
-        createPMBus(std::uint8_t bus, const std::string& address);
+    static std::unique_ptr<PMBusBase> createPMBus(std::uint8_t bus,
+                                                  const std::string& address);
 
     /**
      * Reads a file in sysfs that represents a single bit,
diff --git a/power-sequencer/ucd90160.hpp b/power-sequencer/ucd90160.hpp
index 33f8d4f..e9c8860 100644
--- a/power-sequencer/ucd90160.hpp
+++ b/power-sequencer/ucd90160.hpp
@@ -94,8 +94,8 @@
      * @return fs::path - The gpiochip path, like
      *                   /dev/gpiochip1
      */
-    static std::filesystem::path
-        findGPIODevice(const std::filesystem::path& path);
+    static std::filesystem::path findGPIODevice(
+        const std::filesystem::path& path);
 
     /**
      * Checks for VOUT faults on the device.
diff --git a/temporary_subdirectory.cpp b/temporary_subdirectory.cpp
index b4e6cc9..1ac6e4c 100644
--- a/temporary_subdirectory.cpp
+++ b/temporary_subdirectory.cpp
@@ -48,8 +48,8 @@
     path = templatePath;
 }
 
-TemporarySubDirectory&
-    TemporarySubDirectory::operator=(TemporarySubDirectory&& subdirectory)
+TemporarySubDirectory& TemporarySubDirectory::operator=(
+    TemporarySubDirectory&& subdirectory)
 {
     // Verify not assigning object to itself (a = std::move(a))
     if (this != &subdirectory)
diff --git a/tools/i2c/i2c.cpp b/tools/i2c/i2c.cpp
index 28cedf6..3c3d689 100644
--- a/tools/i2c/i2c.cpp
+++ b/tools/i2c/i2c.cpp
@@ -530,9 +530,9 @@
     return dev;
 }
 
-std::unique_ptr<I2CInterface>
-    create(uint8_t busId, uint8_t devAddr,
-           I2CInterface::InitialState initialState, int maxRetries)
+std::unique_ptr<I2CInterface> create(uint8_t busId, uint8_t devAddr,
+                                     I2CInterface::InitialState initialState,
+                                     int maxRetries)
 {
     return I2CDevice::create(busId, devAddr, initialState, maxRetries);
 }
diff --git a/tools/i2c/i2c.hpp b/tools/i2c/i2c.hpp
index 0f745c3..e3c34e3 100644
--- a/tools/i2c/i2c.hpp
+++ b/tools/i2c/i2c.hpp
@@ -227,10 +227,9 @@
      *
      * @return The unique_ptr holding the I2CInterface
      */
-    static std::unique_ptr<I2CInterface>
-        create(uint8_t busId, uint8_t devAddr,
-               InitialState initialState = InitialState::OPEN,
-               int maxRetries = 0);
+    static std::unique_ptr<I2CInterface> create(
+        uint8_t busId, uint8_t devAddr,
+        InitialState initialState = InitialState::OPEN, int maxRetries = 0);
 };
 
 } // namespace i2c
diff --git a/tools/i2c/test/mocked_i2c_interface.cpp b/tools/i2c/test/mocked_i2c_interface.cpp
index 4747490..7732d3d 100644
--- a/tools/i2c/test/mocked_i2c_interface.cpp
+++ b/tools/i2c/test/mocked_i2c_interface.cpp
@@ -5,9 +5,9 @@
 namespace i2c
 {
 
-std::unique_ptr<I2CInterface>
-    create(uint8_t /*busId*/, uint8_t /*devAddr*/,
-           I2CInterface::InitialState /*initialState*/, int /*maxRetries*/)
+std::unique_ptr<I2CInterface> create(
+    uint8_t /*busId*/, uint8_t /*devAddr*/,
+    I2CInterface::InitialState /*initialState*/, int /*maxRetries*/)
 {
     return std::make_unique<MockedI2CInterface>();
 }
diff --git a/tools/power-utils/aei_updater.cpp b/tools/power-utils/aei_updater.cpp
index 8bddea4..ffe2d1d 100644
--- a/tools/power-utils/aei_updater.cpp
+++ b/tools/power-utils/aei_updater.cpp
@@ -272,8 +272,8 @@
     return true;
 }
 
-std::unique_ptr<std::ifstream>
-    AeiUpdater::openFirmwareFile(const std::string& fspath)
+std::unique_ptr<std::ifstream> AeiUpdater::openFirmwareFile(
+    const std::string& fspath)
 {
     auto inputFile = updater::internal::openFirmwareFile(fspath);
     if (!inputFile)
diff --git a/tools/power-utils/utils.cpp b/tools/power-utils/utils.cpp
index 9517680..82e40b5 100644
--- a/tools/power-utils/utils.cpp
+++ b/tools/power-utils/utils.cpp
@@ -118,8 +118,8 @@
     return std::make_tuple(*i2cbus, *i2caddr);
 }
 
-std::unique_ptr<phosphor::pmbus::PMBusBase>
-    getPmbusIntf(std::uint64_t i2cBus, std::uint64_t i2cAddr)
+std::unique_ptr<phosphor::pmbus::PMBusBase> getPmbusIntf(std::uint64_t i2cBus,
+                                                         std::uint64_t i2cAddr)
 {
     std::stringstream ss;
     ss << std::hex << std::setw(4) << std::setfill('0') << i2cAddr;
diff --git a/tools/power-utils/utils.hpp b/tools/power-utils/utils.hpp
index 256ae60..17f3af4 100644
--- a/tools/power-utils/utils.hpp
+++ b/tools/power-utils/utils.hpp
@@ -55,8 +55,8 @@
  *
  * @return Pointer to PSU PMBus interface
  */
-std::unique_ptr<phosphor::pmbus::PMBusBase>
-    getPmbusIntf(std::uint64_t i2cBus, std::uint64_t i2cAddr);
+std::unique_ptr<phosphor::pmbus::PMBusBase> getPmbusIntf(std::uint64_t i2cBus,
+                                                         std::uint64_t i2cAddr);
 
 /**
  * @brief Reads a VPD value from PMBus, corrects size, and contents.
