8#ifndef ZEPHYR_INCLUDE_DRIVERS_REGULATOR_H_
9#define ZEPHYR_INCLUDE_DRIVERS_REGULATOR_H_
46#define REGULATOR_ERROR_OVER_VOLTAGE BIT(0)
48#define REGULATOR_ERROR_OVER_CURRENT BIT(1)
50#define REGULATOR_ERROR_OVER_TEMP BIT(2)
56typedef int (*regulator_dvs_state_set_t)(
const struct device *dev,
60__subsystem
struct regulator_parent_driver_api {
61 regulator_dvs_state_set_t dvs_state_set;
64typedef int (*regulator_enable_t)(
const struct device *dev);
65typedef int (*regulator_disable_t)(
const struct device *dev);
66typedef unsigned int (*regulator_count_voltages_t)(
const struct device *dev);
67typedef int (*regulator_list_voltage_t)(
const struct device *dev,
68 unsigned int idx,
int32_t *volt_uv);
69typedef int (*regulator_set_voltage_t)(
const struct device *dev,
int32_t min_uv,
71typedef int (*regulator_get_voltage_t)(
const struct device *dev,
73typedef int (*regulator_set_current_limit_t)(
const struct device *dev,
75typedef int (*regulator_get_current_limit_t)(
const struct device *dev,
77typedef int (*regulator_set_mode_t)(
const struct device *dev,
79typedef int (*regulator_get_mode_t)(
const struct device *dev,
81typedef int (*regulator_get_error_flags_t)(
85__subsystem
struct regulator_driver_api {
86 regulator_enable_t enable;
87 regulator_disable_t disable;
88 regulator_count_voltages_t count_voltages;
89 regulator_list_voltage_t list_voltage;
90 regulator_set_voltage_t set_voltage;
91 regulator_get_voltage_t get_voltage;
92 regulator_set_current_limit_t set_current_limit;
93 regulator_get_current_limit_t get_current_limit;
94 regulator_set_mode_t set_mode;
95 regulator_get_mode_t get_mode;
96 regulator_get_error_flags_t get_error_flags;
105#define REGULATOR_ALWAYS_ON BIT(0)
107#define REGULATOR_BOOT_ON BIT(1)
109#define REGULATOR_INIT_ENABLED (REGULATOR_ALWAYS_ON | REGULATOR_BOOT_ON)
114#define REGULATOR_INITIAL_MODE_UNKNOWN UINT8_MAX
121struct regulator_common_config {
145#define REGULATOR_DT_COMMON_CONFIG_INIT(node_id) \
147 .min_uv = DT_PROP_OR(node_id, regulator_min_microvolt, \
149 .max_uv = DT_PROP_OR(node_id, regulator_max_microvolt, \
151 .min_ua = DT_PROP_OR(node_id, regulator_min_microamp, \
153 .max_ua = DT_PROP_OR(node_id, regulator_max_microamp, \
155 .allowed_modes = (const regulator_mode_t []) \
156 DT_PROP_OR(node_id, regulator_allowed_modes, {}), \
157 .allowed_modes_cnt = \
158 DT_PROP_LEN_OR(node_id, regulator_allowed_modes, 0), \
159 .initial_mode = DT_PROP_OR(node_id, regulator_initial_mode, \
160 REGULATOR_INITIAL_MODE_UNKNOWN), \
161 .flags = ((DT_PROP_OR(node_id, regulator_always_on, 0U) * \
162 REGULATOR_ALWAYS_ON) | \
163 (DT_PROP_OR(node_id, regulator_boot_on, 0U) * \
164 REGULATOR_BOOT_ON)), \
172#define REGULATOR_DT_INST_COMMON_CONFIG_INIT(inst) \
173 REGULATOR_DT_COMMON_CONFIG_INIT(DT_DRV_INST(inst))
180struct regulator_common_data {
194void regulator_common_data_init(
const struct device *dev);
217int regulator_common_init(
const struct device *dev,
bool is_enabled);
249 const struct regulator_parent_driver_api *api =
250 (
const struct regulator_parent_driver_api *)dev->
api;
252 if (api->dvs_state_set == NULL) {
256 return api->dvs_state_set(dev,
state);
316 const struct regulator_driver_api *api =
317 (
const struct regulator_driver_api *)dev->
api;
319 if (api->count_voltages == NULL) {
323 return api->count_voltages(dev);
342 unsigned int idx,
int32_t *volt_uv)
344 const struct regulator_driver_api *api =
345 (
const struct regulator_driver_api *)dev->
api;
347 if (api->list_voltage == NULL) {
351 return api->list_voltage(dev, idx, volt_uv);
401 const struct regulator_driver_api *api =
402 (
const struct regulator_driver_api *)dev->
api;
404 if (api->get_voltage == NULL) {
408 return api->get_voltage(dev, volt_uv);
444 const struct regulator_driver_api *api =
445 (
const struct regulator_driver_api *)dev->
api;
447 if (api->get_current_limit == NULL) {
451 return api->get_current_limit(dev, curr_ua);
485 const struct regulator_driver_api *api =
486 (
const struct regulator_driver_api *)dev->
api;
488 if (api->get_mode == NULL) {
492 return api->get_mode(dev, mode);
508 const struct regulator_driver_api *api =
509 (
const struct regulator_driver_api *)dev->
api;
511 if (api->get_error_flags == NULL) {
515 return api->get_error_flags(dev,
flags);
int regulator_enable(const struct device *dev)
Enable a regulator.
int regulator_set_mode(const struct device *dev, regulator_mode_t mode)
Set mode.
uint8_t regulator_mode_t
Definition: regulator.h:34
bool regulator_is_enabled(const struct device *dev)
Check if a regulator is enabled.
int regulator_set_voltage(const struct device *dev, int32_t min_uv, int32_t max_uv)
Set the output voltage.
int regulator_set_current_limit(const struct device *dev, int32_t min_ua, int32_t max_ua)
Set output current limit.
bool regulator_is_supported_voltage(const struct device *dev, int32_t min_uv, int32_t max_uv)
Check if a voltage within a window is supported.
uint8_t regulator_error_flags_t
Definition: regulator.h:37
static int regulator_list_voltage(const struct device *dev, unsigned int idx, int32_t *volt_uv)
Obtain the value of a voltage given an index.
Definition: regulator.h:341
static int regulator_get_current_limit(const struct device *dev, int32_t *curr_ua)
Get output current limit.
Definition: regulator.h:441
static int regulator_get_error_flags(const struct device *dev, regulator_error_flags_t *flags)
Get active error flags.
Definition: regulator.h:505
static unsigned int regulator_count_voltages(const struct device *dev)
Obtain the number of supported voltage levels.
Definition: regulator.h:314
uint8_t regulator_dvs_state_t
Definition: regulator.h:31
static int regulator_get_mode(const struct device *dev, regulator_mode_t *mode)
Get mode.
Definition: regulator.h:482
static int regulator_get_voltage(const struct device *dev, int32_t *volt_uv)
Obtain output voltage.
Definition: regulator.h:398
int regulator_disable(const struct device *dev)
Disable a regulator.
static int regulator_parent_dvs_state_set(const struct device *dev, regulator_dvs_state_t state)
Set a DVS state.
Definition: regulator.h:246
#define EINVAL
Definition: errno.h:61
#define ENOSYS
Definition: errno.h:83
flags
Definition: parser.h:96
state
Definition: parser_state.h:29
static struct k_spinlock lock
Definition: spinlock_error_case.c:13
__INT32_TYPE__ int32_t
Definition: stdint.h:74
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition: device.h:378
const void * api
Definition: device.h:384
Definition: kernel.h:2764