diff --git a/phosphor-regulators/src/actions/i2c_write_bit_action.cpp b/phosphor-regulators/src/actions/i2c_write_bit_action.cpp
new file mode 100644
index 0000000..ee146ac
--- /dev/null
+++ b/phosphor-regulators/src/actions/i2c_write_bit_action.cpp
@@ -0,0 +1,72 @@
+/**
+ * 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_write_bit_action.hpp"
+
+#include "action_error.hpp"
+#include "i2c_interface.hpp"
+
+#include <exception>
+#include <ios>
+#include <sstream>
+
+namespace phosphor::power::regulators
+{
+
+bool I2CWriteBitAction::execute(ActionEnvironment& environment)
+{
+    try
+    {
+        // Read value of device register
+        uint8_t registerValue{0x00};
+        i2c::I2CInterface& interface = getI2CInterface(environment);
+        interface.read(reg, registerValue);
+
+        // Write bit to register value
+        if (value == 0)
+        {
+            // Clear bit within register value
+            registerValue &= ~(0x01 << position);
+        }
+        else
+        {
+            // Set bit within register value
+            registerValue |= (0x01 << position);
+        }
+
+        // Write modified value to device register
+        interface.write(reg, registerValue);
+    }
+    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 true;
+}
+
+std::string I2CWriteBitAction::toString() const
+{
+    std::ostringstream ss;
+    ss << "i2c_write_bit: { register: 0x" << std::hex << std::uppercase
+       << static_cast<uint16_t>(reg) << ", position: " << std::dec
+       << static_cast<uint16_t>(position)
+       << ", value: " << static_cast<uint16_t>(value) << " }";
+    return ss.str();
+}
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/src/actions/i2c_write_bit_action.hpp b/phosphor-regulators/src/actions/i2c_write_bit_action.hpp
new file mode 100644
index 0000000..dea4ba7
--- /dev/null
+++ b/phosphor-regulators/src/actions/i2c_write_bit_action.hpp
@@ -0,0 +1,153 @@
+/**
+ * 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 <stdexcept>
+#include <string>
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class I2CWriteBitAction
+ *
+ * Writes a bit to a device register.  Communicates with the device directly
+ * using the I2C interface.
+ *
+ * Implements the i2c_write_bit action in the JSON config file.
+ */
+class I2CWriteBitAction : public I2CAction
+{
+  public:
+    // Specify which compiler-generated methods we want
+    I2CWriteBitAction() = delete;
+    I2CWriteBitAction(const I2CWriteBitAction&) = delete;
+    I2CWriteBitAction(I2CWriteBitAction&&) = delete;
+    I2CWriteBitAction& operator=(const I2CWriteBitAction&) = delete;
+    I2CWriteBitAction& operator=(I2CWriteBitAction&&) = delete;
+    virtual ~I2CWriteBitAction() = default;
+
+    /**
+     * Constructor.
+     *
+     * Throws an exception if any of the input parameters are invalid.
+     *
+     * @param reg Device register address.  Note: named 'reg' because 'register'
+     *            is a reserved keyword.
+     * @param position Bit position.  Must be in the range 0-7.  Bit 0 is the
+     *                 least significant bit.
+     * @param value Bit value to write.  Must be 0 or 1.
+     */
+    explicit I2CWriteBitAction(uint8_t reg, uint8_t position, uint8_t value) :
+        reg{reg}, position{position}, value{value}
+    {
+        if (position > 7)
+        {
+            throw std::invalid_argument{
+                "Invalid bit position: " +
+                std::to_string(static_cast<unsigned>(position))};
+        }
+
+        if (value > 1)
+        {
+            throw std::invalid_argument{
+                "Invalid bit value: " +
+                std::to_string(static_cast<unsigned>(value))};
+        }
+    }
+
+    /**
+     * Executes this action.
+     *
+     * Writes a bit to a device register using the I2C interface.
+     *
+     * The device register, bit position, and bit value 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
+     */
+    virtual bool execute(ActionEnvironment& environment) override;
+
+    /**
+     * Returns the device register address.
+     *
+     * @return register address
+     */
+    uint8_t getRegister() const
+    {
+        return reg;
+    }
+
+    /**
+     * Returns the bit position.
+     *
+     * Value is in the range 0-7.  Bit 0 is the least significant bit.
+     *
+     * @return bit position
+     */
+    uint8_t getPosition() const
+    {
+        return position;
+    }
+
+    /**
+     * Returns the bit value to write.
+     *
+     * Value is 0 or 1.
+     *
+     * @return bit value
+     */
+    uint8_t getValue() const
+    {
+        return value;
+    }
+
+    /**
+     * 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};
+
+    /**
+     * Bit position.  Must be in the range 0-7.  Bit 0 is the least significant
+     * bit.
+     */
+    const uint8_t position{0};
+
+    /**
+     * Bit value to write.  Must be 0 or 1.
+     */
+    const uint8_t value{0};
+};
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/src/meson.build b/phosphor-regulators/src/meson.build
index 556c65b..d9734c3 100644
--- a/phosphor-regulators/src/meson.build
+++ b/phosphor-regulators/src/meson.build
@@ -10,6 +10,7 @@
     'actions/i2c_compare_bit_action.cpp',
     'actions/i2c_compare_byte_action.cpp',
     'actions/i2c_compare_bytes_action.cpp',
+    'actions/i2c_write_bit_action.cpp',
     'actions/i2c_write_byte_action.cpp',
     'actions/i2c_write_bytes_action.cpp'
 ]
