// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.hardware.gpioimpl;

using fuchsia.hardware.gpio;
using zx;

[Transport = "Banjo", BanjoLayout = "ddk-protocol"]
protocol GpioImpl {
    /// Configures a GPIO for input.
    ConfigIn(uint32 index, uint32 flags) -> (zx.status s);
    /// Configures a GPIO for output.
    ConfigOut(uint32 index, uint8 initial_value) -> (zx.status s);
    /// Configures the GPIO pin for an alternate function (I2C, SPI, etc)
    /// the interpretation of "function" is platform dependent.
    SetAltFunction(uint32 index, uint64 function) -> (zx.status s);
    /// Configures the GPIO pin drive strength.
    SetDriveStrength(uint32 index, uint64 ua) -> (zx.status s, uint64 actual_ua);
    /// Reads the current value of a GPIO (0 or 1).
    Read(uint32 index) -> (zx.status s, uint8 value);
    /// Sets the current value of the GPIO (any non-zero value maps to 1).
    Write(uint32 index, uint8 value) -> (zx.status s);
    /// Gets an interrupt object pertaining to a particular GPIO pin.
    GetInterrupt(uint32 index, uint32 flags) -> (zx.status s, zx.handle:INTERRUPT irq);
    /// Release the interrupt.
    ReleaseInterrupt(uint32 index) -> (zx.status s);
    /// Set GPIO polarity.
    SetPolarity(uint32 index, fuchsia.hardware.gpio.GpioPolarity polarity) -> (zx.status s);
};
