/** * Copyright (c) 2021 NXP * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief Regulator consumer API based on linux regulator API * * This API extends the Zephyr regulator API by implementing voltage * and current level control for supported regulators. Currently, the only * supported device is the NXP PCA9420 PMIC. */ #ifndef ZEPHYR_INCLUDE_DRIVERS_PMIC_CONSUMER_H_ #define ZEPHYR_INCLUDE_DRIVERS_PMIC_CONSUMER_H_ #include #include #ifdef __cplusplus extern "C" { #endif /** * @brief Return the number of supported voltage levels * Returns the number of selectors, or negative errno. Selectors are * numbered starting at zero, and typically correspond to bitfields * in hardware registers. * * @param dev: Regulator device to count voltage levels for. * @return number of selectors, or negative errno. */ int regulator_count_voltages(const struct device *dev); /** * @brief Return supported voltage * Returns a voltage that can be passed to @ref regulator_set_voltage(), zero * if the selector code can't be used, or a negative errno. * * @param dev: Regulator device to get voltage for. * @param selector: voltage selector code. * @return voltage level in uV, or zero if selector code can't be used. */ int regulator_list_voltages(const struct device *dev, unsigned int selector); /** * @brief Check if a voltage range can be supported. * * @param dev: Regulator to check range against. * @param min_uV: Minimum voltage in microvolts * @param max_uV: maximum voltage in microvolts * @returns boolean or negative error code. */ int regulator_is_supported_voltage(const struct device *dev, int min_uV, int max_uV); /** * @brief Set regulator output voltage. * Sets a regulator to the closest supported output voltage. * @param dev: Regulator to set voltage * @param min_uV: Minimum acceptable voltage in microvolts * @param max_uV: Maximum acceptable voltage in microvolts */ int regulator_set_voltage(const struct device *dev, int min_uV, int max_uV); /** * @brief Get regulator output voltage. * Returns the current regulator voltage in microvolts * * @param dev: Regulator to query * @return voltage level in uV */ int regulator_get_voltage(const struct device *dev); /** * @brief Set regulator output current limit * Sets current sink to desired output current. * @param dev: Regulator to set output current level * @param min_uA: minimum microamps * @param max_uA: maximum microamps * @return 0 on success, or errno on error */ int regulator_set_current_limit(const struct device *dev, int min_uA, int max_uA); /** * @brief Get regulator output current. * Note the current limit must have been set for this call to succeed. * @param dev: Regulator to query * @return current limit in uA, or errno */ int regulator_get_current_limit(const struct device *dev); #ifdef __cplusplus } #endif #endif