|  | /* | 
|  | * Copyright 2019-2020 Peter Bigot Consulting, LLC | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * @file | 
|  | * @brief API for voltage and current regulators. | 
|  | */ | 
|  |  | 
|  | #ifndef ZEPHYR_INCLUDE_DRIVERS_REGULATOR_H_ | 
|  | #define ZEPHYR_INCLUDE_DRIVERS_REGULATOR_H_ | 
|  |  | 
|  | /** | 
|  | * @brief Regulator Interface | 
|  | * @defgroup regulator_interface Regulator Interface | 
|  | * @ingroup io_interfaces | 
|  | * @{ | 
|  | */ | 
|  |  | 
|  | #include <zephyr/types.h> | 
|  | #include <drivers/gpio.h> | 
|  | #include <sys/onoff.h> | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @brief Driver-specific API functions to support regulator control. | 
|  | */ | 
|  | __subsystem struct regulator_driver_api { | 
|  | int (*enable)(const struct device *dev, struct onoff_client *cli); | 
|  | int (*disable)(const struct device *dev); | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * @brief Enable a regulator. | 
|  | * | 
|  | * Reference-counted request that a regulator be turned on.  This is | 
|  | * an asynchronous operation; if successfully initiated the result | 
|  | * will be communicated through the @p cli parameter. | 
|  | * | 
|  | * A regulator is considered "on" when it has reached a stable/usable | 
|  | * state. | 
|  | * | 
|  | * @note This function is *isr-ok* and *pre-kernel-ok*. | 
|  | * | 
|  | * @param reg a regulator device | 
|  | * | 
|  | * @param cli used to notify the caller when the attempt to turn on | 
|  | * the regulator has completed. | 
|  | * | 
|  | * @return non-negative on successful initiation of the request. | 
|  | * Negative values indicate failures from onoff_request() or | 
|  | * individual regulator drivers. | 
|  | */ | 
|  | static inline int regulator_enable(const struct device *reg, | 
|  | struct onoff_client *cli) | 
|  | { | 
|  | const struct regulator_driver_api *api = | 
|  | (const struct regulator_driver_api *)reg->api; | 
|  |  | 
|  | return api->enable(reg, cli); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @brief Disable a regulator. | 
|  | * | 
|  | * Release a regulator after a previous regulator_enable() completed | 
|  | * successfully. | 
|  | * | 
|  | * If the release removes the last dependency on the regulator it will | 
|  | * begin a transition to its "off" state.  There is currently no | 
|  | * mechanism to notify when the regulator has completely turned off. | 
|  | * | 
|  | * This must be invoked at most once for each successful | 
|  | * regulator_enable(). | 
|  | * | 
|  | * @note This function is *isr-ok*. | 
|  | * | 
|  | * @param reg a regulator device | 
|  | * | 
|  | * @return non-negative on successful completion of the release | 
|  | * request.  Negative values indicate failures from onoff_release() or | 
|  | * individual regulator drivers. | 
|  | */ | 
|  | static inline int regulator_disable(const struct device *reg) | 
|  | { | 
|  | const struct regulator_driver_api *api = | 
|  | (const struct regulator_driver_api *)reg->api; | 
|  |  | 
|  | return api->disable(reg); | 
|  | } | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @} | 
|  | */ | 
|  |  | 
|  | #endif /* ZEPHYR_INCLUDE_DRIVERS_REGULATOR_H_ */ |