/* * 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 #include #include #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_ */