diff --git a/physical.cpp b/physical.cpp
index d060135..c2be4fa 100644
--- a/physical.cpp
+++ b/physical.cpp
@@ -92,7 +92,7 @@
 
 void Physical::stableStateOperation(Action action)
 {
-    auto value = (action == Action::On) ? assert : DEASSERT;
+    auto value = (action == Action::On) ? assert : deasserted;
 
     led.setTrigger("none");
     led.setBrightness(value);
diff --git a/physical.hpp b/physical.hpp
index b36d6e8..4194c9e 100644
--- a/physical.hpp
+++ b/physical.hpp
@@ -14,7 +14,7 @@
 namespace led
 {
 /** @brief De-assert value */
-constexpr unsigned long DEASSERT = 0;
+constexpr unsigned long deasserted = 0;
 
 using PhysicalIfaces = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Led::server::Physical>;
diff --git a/sysfs.cpp b/sysfs.cpp
index 09bbc5d..277710d 100644
--- a/sysfs.cpp
+++ b/sysfs.cpp
@@ -54,47 +54,47 @@
 
 unsigned long SysfsLed::getBrightness()
 {
-    return getSysfsAttr<unsigned long>(root / BRIGHTNESS);
+    return getSysfsAttr<unsigned long>(root / attrBrightness);
 }
 
 void SysfsLed::setBrightness(unsigned long brightness)
 {
-    setSysfsAttr<unsigned long>(root / BRIGHTNESS, brightness);
+    setSysfsAttr<unsigned long>(root / attrBrightness, brightness);
 }
 
 unsigned long SysfsLed::getMaxBrightness()
 {
-    return getSysfsAttr<unsigned long>(root / MAX_BRIGHTNESS);
+    return getSysfsAttr<unsigned long>(root / attrMaxBrightness);
 }
 
 std::string SysfsLed::getTrigger()
 {
-    return getSysfsAttr<std::string>(root / TRIGGER);
+    return getSysfsAttr<std::string>(root / attrTrigger);
 }
 
 void SysfsLed::setTrigger(const std::string& trigger)
 {
-    setSysfsAttr<std::string>(root / TRIGGER, trigger);
+    setSysfsAttr<std::string>(root / attrTrigger, trigger);
 }
 
 unsigned long SysfsLed::getDelayOn()
 {
-    return getSysfsAttr<unsigned long>(root / DELAY_ON);
+    return getSysfsAttr<unsigned long>(root / attrDelayOn);
 }
 
 void SysfsLed::setDelayOn(unsigned long ms)
 {
-    setSysfsAttr<unsigned long>(root / DELAY_ON, ms);
+    setSysfsAttr<unsigned long>(root / attrDelayOn, ms);
 }
 
 unsigned long SysfsLed::getDelayOff()
 {
-    return getSysfsAttr<unsigned long>(root / DELAY_OFF);
+    return getSysfsAttr<unsigned long>(root / attrDelayOff);
 }
 
 void SysfsLed::setDelayOff(unsigned long ms)
 {
-    setSysfsAttr<unsigned long>(root / DELAY_OFF, ms);
+    setSysfsAttr<unsigned long>(root / attrDelayOff, ms);
 }
 } // namespace led
 } // namespace phosphor
diff --git a/sysfs.hpp b/sysfs.hpp
index b65deff..a809378 100644
--- a/sysfs.hpp
+++ b/sysfs.hpp
@@ -42,11 +42,11 @@
     virtual void setDelayOff(unsigned long ms);
 
   protected:
-    static constexpr char BRIGHTNESS[] = "brightness";
-    static constexpr char MAX_BRIGHTNESS[] = "max_brightness";
-    static constexpr char TRIGGER[] = "trigger";
-    static constexpr char DELAY_ON[] = "delay_on";
-    static constexpr char DELAY_OFF[] = "delay_off";
+    static constexpr const char* attrBrightness = "brightness";
+    static constexpr const char* attrMaxBrightness = "max_brightness";
+    static constexpr const char* attrTrigger = "trigger";
+    static constexpr const char* attrDelayOn = "delay_on";
+    static constexpr const char* attrDelayOff = "delay_off";
 
     std::filesystem::path root;
 };
diff --git a/test/physical.cpp b/test/physical.cpp
index 000b321..d83ab66 100644
--- a/test/physical.cpp
+++ b/test/physical.cpp
@@ -145,8 +145,9 @@
     NiceMock<MockLed> led;
     ON_CALL(led, getMaxBrightness()).WillByDefault(Return(127));
     EXPECT_CALL(led, getTrigger()).WillOnce(Return("none"));
-    EXPECT_CALL(led, getBrightness()).WillOnce(Return(phosphor::led::DEASSERT));
-    EXPECT_CALL(led, setBrightness(phosphor::led::DEASSERT)).Times(0);
+    EXPECT_CALL(led, getBrightness())
+        .WillOnce(Return(phosphor::led::deasserted));
+    EXPECT_CALL(led, setBrightness(phosphor::led::deasserted)).Times(0);
     phosphor::led::Physical phy(bus, LED_OBJ, led);
     phy.state(Action::Off);
     EXPECT_EQ(phy.state(), Action::Off);
@@ -199,7 +200,7 @@
     NiceMock<MockLed> led;
     ON_CALL(led, getMaxBrightness()).WillByDefault(Return(asserted));
     EXPECT_CALL(led, getTrigger()).Times(1).WillOnce(Return("none"));
-    constexpr auto deasserted = phosphor::led::DEASSERT;
+    constexpr auto deasserted = phosphor::led::deasserted;
     EXPECT_CALL(led, getBrightness()).WillOnce(Return(deasserted));
     EXPECT_CALL(led, setBrightness(asserted));
     EXPECT_CALL(led, setBrightness(deasserted));
diff --git a/test/sysfs.cpp b/test/sysfs.cpp
index 7a23ed5..5d83d80 100644
--- a/test/sysfs.cpp
+++ b/test/sysfs.cpp
@@ -52,7 +52,8 @@
   private:
     explicit FakeSysfsLed(fs::path&& path) : SysfsLed(std::move(path))
     {
-        std::string attrs[4] = {BRIGHTNESS, TRIGGER, DELAY_ON, DELAY_OFF};
+        static constexpr auto attrs = {attrBrightness, attrTrigger, attrDelayOn,
+                                       attrDelayOff};
         for (const auto& attr : attrs)
         {
             fs::path p = root / attr;
@@ -60,7 +61,7 @@
             f.exceptions(f.failbit);
         }
 
-        fs::path p = root / MAX_BRIGHTNESS;
+        fs::path p = root / attrMaxBrightness;
         std::ofstream f(p, std::ios::out);
         f.exceptions(f.failbit);
         f << MAX_BRIGHTNESS_VAL;
