105 lines
2.5 KiB
C
105 lines
2.5 KiB
C
|
/*
|
||
|
* 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_ */
|