diff --git a/phosphor-regulators/src/actions/i2c_action.hpp b/phosphor-regulators/src/actions/i2c_action.hpp
new file mode 100644
index 0000000..42b99e0
--- /dev/null
+++ b/phosphor-regulators/src/actions/i2c_action.hpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "action.hpp"
+#include "action_environment.hpp"
+#include "device.hpp"
+#include "i2c_interface.hpp"
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class I2CAction
+ *
+ * Abstract base class for actions that communicate with a device using an I2C
+ * interface.
+ */
+class I2CAction : public Action
+{
+  public:
+    // Specify which compiler-generated methods we want
+    I2CAction() = default;
+    I2CAction(const I2CAction&) = delete;
+    I2CAction(I2CAction&&) = delete;
+    I2CAction& operator=(const I2CAction&) = delete;
+    I2CAction& operator=(I2CAction&&) = delete;
+    virtual ~I2CAction() = default;
+
+  protected:
+    /**
+     * Returns the I2C interface to the current device within the specified
+     * action environment.
+     *
+     * Opens the interface if it was not already open.
+     *
+     * Throws an exception if an error occurs.
+     *
+     * @param environment action execution environment
+     * @return I2C interface to current device
+     */
+    i2c::I2CInterface& getI2CInterface(ActionEnvironment& environment)
+    {
+        // Get current device from action environment
+        Device& device = environment.getDevice();
+
+        // Get I2C interface from device
+        i2c::I2CInterface& interface = device.getI2CInterface();
+
+        // Open interface if necessary
+        if (!interface.isOpen())
+        {
+            interface.open();
+        }
+
+        return interface;
+    }
+};
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/src/actions/i2c_compare_byte_action.cpp b/phosphor-regulators/src/actions/i2c_compare_byte_action.cpp
new file mode 100644
index 0000000..8436e56
--- /dev/null
+++ b/phosphor-regulators/src/actions/i2c_compare_byte_action.cpp
@@ -0,0 +1,64 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "i2c_compare_byte_action.hpp"
+
+#include "action_error.hpp"
+#include "i2c_interface.hpp"
+
+#include <exception>
+#include <ios>
+#include <sstream>
+
+namespace phosphor::power::regulators
+{
+
+bool I2CCompareByteAction::execute(ActionEnvironment& environment)
+{
+    bool isEqual{false};
+    try
+    {
+        // Read actual value of device register
+        uint8_t actualValue{0x00};
+        i2c::I2CInterface& interface = getI2CInterface(environment);
+        interface.read(reg, actualValue);
+
+        // Modify actual value to only include bits specified in the mask
+        actualValue &= mask;
+
+        // Check if actual value equals expected value
+        isEqual = (actualValue == value);
+    }
+    catch (const i2c::I2CException& e)
+    {
+        // Nest I2CException within an ActionError so caller will have both the
+        // low level I2C error information and the action information
+        std::throw_with_nested(ActionError(*this));
+    }
+    return isEqual;
+}
+
+std::string I2CCompareByteAction::toString() const
+{
+    std::ostringstream ss;
+    ss << "i2c_compare_byte: { register: 0x" << std::hex << std::uppercase
+       << static_cast<uint16_t>(reg) << ", value: 0x"
+       << static_cast<uint16_t>(value) << ", mask: 0x"
+       << static_cast<uint16_t>(mask) << " }";
+    return ss.str();
+}
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp b/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp
new file mode 100644
index 0000000..a32bbdf
--- /dev/null
+++ b/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp
@@ -0,0 +1,141 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "action_environment.hpp"
+#include "i2c_action.hpp"
+
+#include <cstdint>
+#include <string>
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class I2CCompareByteAction
+ *
+ * Compares a device register to a byte value.  Communicates with the device
+ * directly using the I2C interface.
+ *
+ * Implements the i2c_compare_byte action in the JSON config file.
+ */
+class I2CCompareByteAction : public I2CAction
+{
+  public:
+    // Specify which compiler-generated methods we want
+    I2CCompareByteAction() = delete;
+    I2CCompareByteAction(const I2CCompareByteAction&) = delete;
+    I2CCompareByteAction(I2CCompareByteAction&&) = delete;
+    I2CCompareByteAction& operator=(const I2CCompareByteAction&) = delete;
+    I2CCompareByteAction& operator=(I2CCompareByteAction&&) = delete;
+    virtual ~I2CCompareByteAction() = default;
+
+    /**
+     * Constructor.
+     *
+     * @param reg Device register address.  Note: named 'reg' because 'register'
+     *            is a reserved keyword.
+     * @param value Expected byte value.
+     * @param mask Bit mask.  Specifies which bits should be compared within the
+     *             byte value.  Only the bits with a value of 1 in the mask will
+     *             be compared.  If not specified, defaults to 0xFF which means
+     *             that all bits will be compared.
+     */
+    explicit I2CCompareByteAction(uint8_t reg, uint8_t value,
+                                  uint8_t mask = 0xFF) :
+        reg{reg},
+        value{value}, mask{mask}
+    {
+    }
+
+    /**
+     * Executes this action.
+     *
+     * Compares a device register to a byte value using the I2C interface.
+     *
+     * The device register, byte value, and mask (if any) were specified in the
+     * constructor.
+     *
+     * The device is obtained from the specified action environment.
+     *
+     * Throws an exception if an error occurs.
+     *
+     * @param environment action execution environment
+     * @return true if the register contained the expected value, otherwise
+     *         returns false.
+     */
+    virtual bool execute(ActionEnvironment& environment) override;
+
+    /**
+     * Returns the device register address.
+     *
+     * @return register address
+     */
+    uint8_t getRegister() const
+    {
+        return reg;
+    }
+
+    /**
+     * Returns the expected byte value.
+     *
+     * @return expected value
+     */
+    uint8_t getValue() const
+    {
+        return value;
+    }
+
+    /**
+     * Returns the bit mask.
+     *
+     * Specifies which bits should be compared within the byte value.  Only the
+     * bits with a value of 1 in the mask will be compared.
+     *
+     * @return bit mask
+     */
+    uint8_t getMask() const
+    {
+        return mask;
+    }
+
+    /**
+     * Returns a string description of this action.
+     *
+     * @return description of action
+     */
+    virtual std::string toString() const override;
+
+  private:
+    /**
+     * Device register address.  Note: named 'reg' because 'register' is a
+     * reserved keyword.
+     */
+    const uint8_t reg{0x00};
+
+    /**
+     * Expected byte value.
+     */
+    const uint8_t value{0x00};
+
+    /**
+     * Bit mask.  Specifies which bits should be compared within the byte value.
+     * Only the bits with a value of 1 in the mask will be compared.
+     */
+    const uint8_t mask{0xFF};
+};
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/src/meson.build b/phosphor-regulators/src/meson.build
index 121bf45..a70a86a 100644
--- a/phosphor-regulators/src/meson.build
+++ b/phosphor-regulators/src/meson.build
@@ -6,7 +6,8 @@
 phosphor_regulators_library_source_files = [
     'id_map.cpp',
 
-    'actions/if_action.cpp'
+    'actions/if_action.cpp',
+    'actions/i2c_compare_byte_action.cpp'
 ]
 
 phosphor_regulators_library = static_library(
