diff --git a/src/usb-dbg.cpp b/src/usb-dbg.cpp
index d2f9f05..d47a0a1 100644
--- a/src/usb-dbg.cpp
+++ b/src/usb-dbg.cpp
@@ -57,11 +57,11 @@
     try
     {
         std::shared_ptr<sdbusplus::asio::connection> dbus = getSdBus();
-        std::string service = getService(*dbus, ipmi::selector::interface,
-                                         ipmi::selector::path);
-        Value variant = getDbusProperty(*dbus, service, ipmi::selector::path,
-                                        ipmi::selector::interface,
-                                        "MaxPosition");
+        std::string service =
+            getService(*dbus, ipmi::selector::interface, ipmi::selector::path);
+        Value variant =
+            getDbusProperty(*dbus, service, ipmi::selector::path,
+                            ipmi::selector::interface, "MaxPosition");
         maxPosition = std::get<size_t>(variant);
     }
     catch (const std::exception& e)
@@ -77,8 +77,8 @@
     try
     {
         std::shared_ptr<sdbusplus::asio::connection> dbus = getSdBus();
-        std::string service = getService(*dbus, ipmi::selector::interface,
-                                         ipmi::selector::path);
+        std::string service =
+            getService(*dbus, ipmi::selector::interface, ipmi::selector::path);
         Value variant = getDbusProperty(*dbus, service, ipmi::selector::path,
                                         ipmi::selector::interface, "Position");
         hostPosition = std::get<size_t>(variant);
@@ -516,8 +516,8 @@
             {
                 if (postObj.size() != phase)
                 {
-                    std::string nextPhaseStr = "Phase" +
-                                               std::to_string(phase + 1);
+                    std::string nextPhaseStr =
+                        "Phase" + std::to_string(phase + 1);
                     postCode = postObj[nextPhaseStr][0][0];
                     *next = stoul(postCode, nullptr, 16);
                     *end = 0;
@@ -1007,8 +1007,8 @@
     }
 
     // '*': boot flags valid, BIOS has not yet read
-    bootOrderPanel.item_str[0] = std::string("Boot Order") +
-                                 ((bootMode & bootValid) ? "*" : "");
+    bootOrderPanel.item_str[0] =
+        std::string("Boot Order") + ((bootMode & bootValid) ? "*" : "");
 
     static const std::unordered_map<uint8_t, const char*>
         bootOrderMappingTable = {
