diff --git a/presence/gpio.hpp b/presence/gpio.hpp
new file mode 100644
index 0000000..e516e0f
--- /dev/null
+++ b/presence/gpio.hpp
@@ -0,0 +1,107 @@
+#pragma once
+
+#include <memory>
+#include "evdevpp/evdev.hpp"
+#include "sdevent/io.hpp"
+#include "sdevent/source.hpp"
+#include "psensor.hpp"
+#include "utility.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace presence
+{
+class RedundancyPolicy;
+
+/**
+ * @class Gpio
+ * @brief Gpio presence sensor implementation.
+ *
+ * The Gpio class uses a gpio wire to determine presence state.
+ */
+class Gpio : public PresenceSensor
+{
+    public:
+        /**
+         * @brief
+         *
+         * Cannot move or copy due to this ptr as context
+         * for sdevent callbacks.
+         */
+        Gpio() = delete;
+        Gpio(const Gpio&) = delete;
+        Gpio& operator=(const Gpio&) = delete;
+        Gpio(Gpio&&) = delete;
+        Gpio& operator=(Gpio&&) = delete;
+        ~Gpio() = default;
+
+        /**
+         * @brief Construct a gpio sensor.
+         *
+         * @param[in] physDevice - The physical gpio device path.
+         * @param[in] physPin - The physical gpio pin number.
+         */
+        Gpio(const std::string& physDevice, unsigned int physPin);
+
+        /**
+         * @brief start
+         *
+         * Register for an sdevent io callback on the gpio.
+         * Query the initial state of the gpio.
+         *
+         * @return The current sensor state.
+         */
+        bool start() override;
+
+        /**
+         * @brief stop
+         *
+         * De-register sdevent io callback.
+         */
+        void stop() override;
+
+        /**
+         * @brief fail
+         *
+         * Call the gpio out.
+         */
+        void fail() override;
+
+        /**
+         * @brief Check the sensor.
+         *
+         * Query the gpio.
+         */
+        bool present() override;
+
+    private :
+         /** @brief Get the policy associated with this sensor. */
+        virtual RedundancyPolicy& getPolicy() = 0;
+
+         /** @brief sdevent io callback. */
+        void ioCallback(sdevent::source::Source& source);
+
+        /** The current state of the sensor. */
+        bool currentState;
+
+        /** Gpio event device file descriptor. */
+        util::FileDescriptor evdevfd;
+
+        /** Gpio event device. */
+        evdevpp::evdev::EvDev evdev;
+
+        /** Physical gpio device. */
+        std::string phys;
+
+        /** Gpio pin number. */
+        unsigned int pin;
+
+        /** sdevent io callback handle. */
+        std::unique_ptr<sdevent::event::io::IO> callback;
+};
+
+} // namespace presence
+} // namespace fan
+} // namespace phosphor
