| // Copyright 2022 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; |
| |
| /// A fuchsia.hardware.gpio.Gpio call to make as part of an `InitStep`. |
| type InitCall = flexible union { |
| /// If set, the GPIO core driver will call `ConfigIn` with the given flags. |
| 1: input_flags fuchsia.hardware.gpio.GpioFlags; |
| /// If set, the GPIO core driver will call `ConfigOut` with the given output value. |
| 2: output_value uint8; |
| /// If set, the GPIO core driver will call `SetAltFunction` with the given alt function value |
| /// (specific to the GPIO implementation driver). |
| 3: alt_function uint64; |
| /// If set, the GPIO core driver will call `SetDriveStrength` with the given value in microamps. |
| 4: drive_strength_ua uint64; |
| /// If set, the GPIO core driver will delay for this long before processing the next step. |
| 5: delay zx.Duration; |
| }; |
| |
| /// A single init step to be performed by the GPIO core driver. |
| type InitStep = struct { |
| /// The platform-specific GPIO index that this step operates on. |
| index uint32; |
| /// A call to make on this GPIO. |
| call InitCall; |
| }; |
| |
| /// Passed to the GPIO core driver in metadata as DEVICE_METADATA_GPIO_INIT. Steps are processed |
| /// sequentially in the order that they appear in the vector. Processing occurs once during the GPIO |
| /// core driver's bind hook. |
| type InitMetadata = struct { |
| steps vector<InitStep>:MAX; |
| }; |
| |
| /// Information passed to the GPIO core driver through GpioImpl protocol methods. |
| type ControllerMetadata = struct { |
| /// ID for the controller which is unique among all gpio controllers. |
| /// Passed through GetControllerId to the core driver. |
| id uint32; |
| }; |